Я установил базовый код кукловода для автоматизации 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');
с await, я получаю ту же ошибку.Поэтому я попытался добавить еще один асинхронный код, выполнив 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
});
}
};
Другой подход был бы приемлемым, в то время как мы можем использовать т.е.page.goto(<url>)
внутри foo
функция mymodule
.Если это сработает, все будет хорошо.