我想使用一个具有等待的全局变量,如下所示:
(async () => {
const browser = await puppeteer.launch({headless: false})
const page = await browser.newPage();
})()
后来在我的所有功能上使用它:
async function login() {
await page.goto(urls.login);
await page.type('#username', user);
await page.type('#password', pw);
page.click('[type="submit"]');
await page.waitForNavigation();
}
运行它我收到此错误:
ReferenceError:未定义页面。
有一些方法可以让它发挥作用吗?
答案 0 :(得分:1)
将promise存储在全局变量中:
const pagePromise = (async () => {
const browser = await puppeteer.launch({headless: false})
return browser.newPage();
})();
然后您可以稍后使用它
async function login(page) {
await page.goto(urls.login);
await page.type('#username', user);
await page.type('#password', pw);
page.click('[type="submit"]');
await page.waitForNavigation();
}
pagePromise.then(login).catch(console.error);
或
async function login() {
const page = await pagePromise;
await page.goto(urls.login);
await page.type('#username', user);
await page.type('#password', pw);
page.click('[type="submit"]');
await page.waitForNavigation();
}
login().catch(console.error);
答案 1 :(得分:-1)
这里的解决方案: https://github.com/tc39/ecmascript-asyncawait/issues/9
(async () => {
const browser = await puppeteer.launch({headless: false})
const page = await browser.newPage()
async function login() {
await page.goto(urls.login, {waitUntil: 'networkidle2'});
await page.type('#user', user);
await page.type('#password', pw);
await page.click('[type="submit"]');
await page.waitForNavigation();
await page.screenshot({path: 'after-login.png'});
}
login();
})()