我设置了一个基本的伪造者代码来自动执行chrome。而且我正在尝试使用page
将mymodule.foo(page)
变量作为参数传递给我的模块方法,但是它无法引发错误,如下所示:
目标是能够使用其他模块中的伪造对象,例如page
。
E:\scripts\node\myproject\mymodule.js:3
await page.evaluateOnNewDocument(() => {
^^^^
SyntaxError: Unexpected identifier
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:607:28)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
at Module.require (module.js:587:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (E:\scripts\node\myproject\app.js:3:18)
PS E:\scripts\node\myproject>
这是文件app.js
:
// app.js
const puppeteer = require('puppeteer');
const mymodule = require('./mymodule');
(async () => {
const browser = await puppeteer.launch({
headless: false,
});
const page = await browser.newPage();
await mymodule.foo(page);
await browser.close();
})();
这是文件mymodule.js
:
更新:我已经更新了此文件,将async
添加到foo
函数中。但是,如果我尝试使用await page.goto('http://www.google.com');
并等待,我会得到相同的错误。因此,我尝试添加另一个执行page.evaluateOnNewDocument(async ()
的异步程序,然后运行它,打开浏览器,但它没有导航到页面,也没有等待。
// mymodule.js
module.exports = {
foo: async function (page) {
await page.evaluateOnNewDocument(async () => {
await page.goto('http://www.google.com');
await page.waitFor(10000); // That's Evil, I know
});
}
};
更新2:这是我正在使用的实际代码(由@Hongarc提出),不会引发错误,但仍无法正常工作。
module.exports = {
foo: function (page) {
return page.evaluateOnNewDocument(async () => {
await page.goto('http://www.google.com');
await page.waitFor(10000); // That's Evil, I know
});
}
};
可以使用另一种方法,尽管我们可以使用ie。 page.goto(<url>)
的{{1}}功能内的foo
。如果可以的话,就可以了。
答案 0 :(得分:2)
面对现实,以下函数将在浏览器上下文
上运行代码N === images.length
错误不在于模块本身,而在于您如何使用它。 page.evaluateOnNewDocument
对象在浏览器上下文中不可用。因此,调用它不是解决方案。
如果要使用页面。在另一个模块中,您可以通过这种方式安全地做到这一点,
page
还要确保您具有节点版本7.6或更高版本。
答案 1 :(得分:1)
您需要标记您的功能为async
才能使用await
。
试试这个:
// mymodule.js
module.exports = {
foo: async function (page) {
await page.evaluateOnNewDocument(async () => {
await page.goto('http://www.google.com');
await page.waitFor(10000);
});
}
};
此代码将修复代码的语法,但在逻辑上是错误的。
await
的{{1}}中的module.exports.foo
。mymodule.js
内部没有能力使用功能。您可以尝试:
async