当waitForNavigation和waitForSelector上的headless为true时,操纵up便超时

时间:2020-04-14 16:21:52

标签: node.js web-scraping puppeteer

我成功地能够浏览网站,登录并获取所需的信息。但是,当我改用无头为真的情况下使用相同的代码时,我尝试等待的每一行都会超时。

const self = {
  browser: null,
  page: null,

  initialize: async () => {
    self.browser = await puppeteer.launch({
      headless: true,
    });

    self.page = await self.browser.newPage();

    /* Go to homepage */
    await self.page.goto(SHIPT_URL, { waitUntil: "networkidle0" });
  },

getResults: async () => {
    await self.page.type("#email", email, { delay: 100 });
    await self.page.type("#password", password, { delay: 100 });
    let loginButton = await self.page.$("button.sc-fzplWN");
    if (loginButton) {
      await loginButton.click();
      await self.page.waitForNavigation({ waitUntil: "networkidle0" }); // Hangs here

      await self.page.waitForSelector("a.pointer.link.gray900"); // Hangs here if I remove above waitForNavigation

我尝试研究此问题,并尝试了几种不同的方法,例如设置用户代理,将.click和waitForNavigation放入promise.all,在waitForNavigation中删除“ waitUntil”,以及在.click上删除await,但似乎没有工作。

编辑。因此,似乎登录无法正常工作,并显示错误的用户名或电子邮件,这是没有意义的,因为当我没有头脑时,它可以工作。需要进一步研究

1 个答案:

答案 0 :(得分:0)

在运行命令之前尝试对输出进行屏幕截图。可能是页面的默认大小不同,选择器不存在。

Puppeteer将初始页面尺寸设置为800×600px,这定义了屏幕截图尺寸。

getResults: async () => {
await page.screenshot({path: 'example.png'});
await self.page.type("#email", email, { delay: 100 });
await self.page.type("#password", password, { delay: 100 });
let loginButton = await self.page.$("button.sc-fzplWN");