【问题标题】:Pupateer page.evaluate randomly stopped work when parsing websitePuppeteer page.evaluate 解析网站时随机停止工作
【发布时间】:2021-04-25 07:21:13
【问题描述】:

大约 3 周前,我为选项警报创建了一个 webparser,一切进展顺利,截至今天,我检查了它,由于某种原因它返回空值,我想也许网站已重新调整,但没有什么不同,我在过去的几个小时里一直在尝试许多修复,所以希望我能得到一些帮助,下面是我用来解析网站的代码:

const browser = await puppeteer.launch({
        args: ['--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-dev-shm-usage',
        '--disable-accelerated-2d-canvas',
        '--no-first-run',
        '--no-zygote',
        '--single-process', 
        '--disable-gpu'],
        dumpio: true,
        headless: true
      });
      const page = await browser.newPage();
      await page.goto(process.env.ALERTS_PARSER_WEBSITE);
      // page.on("console", msg => console.log("PAGE LOG:", msg));


      const data = await page.evaluate(() =>
        Array.from(document.querySelectorAll("table > tbody > tr"), (row) =>
          Array.from(row.querySelectorAll("th, td"), (cell) => cell.innerText)
        )
      );

然后我将数据映射到我自己的数组并传回我的前端,我试图解析的网站是Bar Chart Unusual Options Activity。您可以在那里检查该站点并查看查询选择器应该可以工作,我真的在这个最后一站,所以任何帮助将不胜感激。

【问题讨论】:

    标签: node.js puppeteer chromium


    【解决方案1】:

    不确定原因可能是什么,但我设法仅使用puppeteer.launch({ headless: false });

    page.setDefaultTimeout(300_000);
    // ...
    await page.waitForSelector("table > tbody > tr");
    

    (最后一个可能只在像我这样的慢速机器上需要)。

    也许该网站开始使用一些针对无头模式的保护。

    附:当我尝试在无头模式下获取页面截图时,我立即得到:

    附言目前看来解决方案很简单。由于response.request().redirectChain() 为空,站点仅检查第一个请求中的用户代理标头。所以这似乎解决了无头模式的问题(可以通过比较两种模式下的await browser.userAgent() 值来推断差异):

      await page.setUserAgent((await browser.userAgent()).replace('HeadlessChrome', 'Chrome'));
    
      await page.goto('https://www.barchart.com/options/unusual-activity/stocks?orderBy=tradeTime&orderDir=desc');
    

    【讨论】:

    • 你我的朋友是救命稻草,你是怎么想到这个结论的?你经历了什么过程?我一直想弄清楚吗?
    • 这是一点经验)健康行为和无头行为之间的差异是问题的常见原因。过程全在答案中:尝试健康模式;如果没问题 — 尝试无头页面的屏幕截图;如果页面是即时错误并且没有重定向(即没有复杂的中间浏览器模式检查),则用户代理标头是主要嫌疑人)
    猜你喜欢
    • 2019-04-21
    • 2014-04-11
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    相关资源
    最近更新 更多