具有多个 puppeteer 操作的函数的 module.exports 不起作用

用户1862965

我在文件 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章