我在文件 login.js 中有代码
const puppeteer = require('puppeteer');
const configpass = require("./config.json");
const login_helper = require("./login_helper");
(async () => {
const browser = await puppeteer.launch({
args: ["--no-sandbox"],
headless: false,
slowMo: 30
})
const page = await browser.newPage()
await page.setViewport({ width: 1920, height: 1080 })
const navigationPromise = page.waitForNavigation({
waitUntil: "networkidle0"
});
await login_helper.login_function(page, configpass.username, configpass.password);
await navigationPromise
await page.waitForSelector('.container > .row > .col-md-4 > p > a')
await page.click('.container > .row > .col-md-4 > p > a')
await navigationPromise
//await browser.close()
})()
我想在外部文件中创建一个具有许多操作的函数,就像在文件 login_helper.js 中一样
module.exports = {
login_function: async (page, username, password) => {
page.goto('http://quotes.toscrape.com/');
page.waitForSelector('.container > .row > .col-md-4 > p > a');
page.click('.container > .row > .col-md-4 > p > a');
page.waitForSelector('.container #username');
page.click('.container #username');
page.type(
".container #username", username
);
page.waitForSelector('.container #password');
page.click('.container #password');
page.type(".container #password", password
);
page.waitForSelector('body > .container > form > .btn')
page.click('body > .container > form > .btn')
return page;
}
};
我收到错误,为什么?
UnhandledPromiseRejectionWarning:错误:执行上下文被破坏,很可能是因为导航。
tnx 很多
Puppeteer 返回承诺。您应该调用 await,否则,控制流将不会像您预期的那样。您希望代码在继续下一个语句之前完成每个语句,但如果没有等待,它将立即开始下一个语句,而第一个语句尚未完成。
例如,代替
page.goto('http://quotes.toscrape.com/');
尝试
await page.goto('http://quotes.toscrape.com/');
此外,不会处理错误。这就是你得到UnhandledPromiseRejectionWarning
异常的原因。尝试await
在与所有交互之前添加page
(有关详细信息,请检查 API,但我认为,在您的情况下,每次调用都会返回一个承诺)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句