javascript - 带有浏览器和页面的 Puppeteer 页面对象模型与主页面分开
问题描述
我正在尝试将 puppeter 调用、浏览器对象和页面对象放入一个类中。但是在使用页面对象模型时我无法使用它。页面成员未定义。
在我发现的每个示例中,我总是在主函数中看到对 puppeteer 以及浏览器和页面对象的调用。我想这是上下文访问的问题。
但是有可能归档我正在寻找的内容并且仍然能够至少使用页面对象文件中的页面对象吗?
主要的.mjs
import Browser from './browser.mjs'
import HomePage from './HomePage.mjs'
async function main () {
const browser = new Browser();
const homePage = new HomePage(browser.page);
await homePage.open();
console.log(await homepage.getTitle());
await browser.close();
}
main();
浏览器.mjs
class Browser {
constructor() {
return this.main(); // I know, that's ugly
}
async main() {
this.browser = await puppeteer.launch({
headless: false,
});
this.page = await browser.newPage();
return this.browser,this.page
}
}
export default Browser
主页.mjs
class HomePage {
constructor(page) {
this.page = page;
}
async open() {
this.page.goto('http://www.contoso.com');
}
async getTitle() {
return this.page.title();
}
}
export default HomePage
解决方案
return this.browser,this.page
这将返回browser
. 如果你想访问浏览器和页面,你应该this
只返回。您的代码应如下所示。
return this
您可以从该对象访问浏览器、页面以及介于两者之间的所有内容。
推荐阅读
- c# - 如何仅在特定用户控件 ascx 中删除“X-Content-Type-Options: nosniff”标头
- javascript - CKEditor 5 工具栏固定位置
- json - 无法访问 JSON 数据并仅打印 Begin 和 End React Native
- python - 为什么我收到空约束错误?
- angular - 如何在不刷新页面的情况下更新组件内部的值?
- azure - 我可以更改现有 NIC 的 V-Net 吗?
- r - 为多个时间序列图从数据帧中分离数据帧
- php - stripos vs glob 用于取消链接
- python - 如何锁定pdf选择文本不可用
- javascript - PowerShell 和 IE 自动化