【问题标题】:Can't scrape contributors div from github insights page无法从 github 洞察页面抓取贡献者 div
【发布时间】:2020-11-29 16:45:33
【问题描述】:

我正在尝试使用 NodeJS、puppeteer 和 Cheerio 收集 github 贡献者的见解。

const cheerio = require('cheerio');
const puppeteer = require('puppeteer');
const url = 'https://github.com/grey-software/grey.software/graphs/contributors';

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.waitForSelector('#contributors', {
    visible: true,
  })

  await page.goto(url);
  const pageContent = await page.content()

  const $ = cheerio.load(pageContent);
  $('.contrib-person').each(function (i, elem) {
    console.log(elem)
  });
  await browser.close();
})();

运行上面的代码时出现以下错误

UnhandledPromiseRejectionWarning:TimeoutError:等待选择器“#contributors”失败:超时超过 30000 毫秒

#contributors div 应该在 30 秒内加载,但我总是遇到此超时。 注意:page.waitForNavigation() 给出相同的超时错误

【问题讨论】:

    标签: javascript node.js web-scraping puppeteer cheerio


    【解决方案1】:

    您的问题是您正在等待选择器存在...在您首先访问该网站之前。使用page.goto()后使用page.waitForSelector()

    【讨论】:

    • 我实际上已经尝试实现该方法,但贡献部分似乎没有呈现。虽然我没有收到上面的拒绝警告,但刮板无法检测到 .contrib-person 类的元素,因为组件没有被渲染。因此 for 循环不会执行,也没有输出。
    • 添加 visible 到 true 然后作为第二个参数
    • waitForSelector() 的第二个参数已经可见:true。你指的是这个吗?
    • 哦,等等,是的 nvm。你可以做 page.goto(url, {waitUntil:"domcontentloaded"}) pptr.dev/…
    猜你喜欢
    • 2021-03-15
    • 1970-01-01
    • 2012-11-06
    • 2012-12-15
    • 1970-01-01
    • 2023-03-10
    • 2018-09-24
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多