【问题标题】:Error when trying to crawl external site with Puppeteer尝试使用 Puppeteer 抓取外部网站时出错
【发布时间】:2019-09-09 13:32:11
【问题描述】:

我正在尝试抓取外部职位发布板并获取每个职位发布的数据。现在我只是想收集职位发布列表中第一个职位发布的数据。我似乎无法让它停止对我说:

UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read property 'textContent' of null

我没有经常使用 puppeteer,所以我可能只是有一个简单的语法问题我没有看到。我正在尝试抓取的数据地址:Canvas Job Postings

const puppeteer = require('puppeteer');
const fs = require('fs');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();


    const oportunities = [];
    const opportunity = {
        title: '',
        desc: '',
        category: '',
        reqName: '',
        hours: '',
        postingDate: '',
        address: ''
    };
  await page.goto('https://recruiting2.ultipro.com/PUB1004PSCU/JobBoard/d433f5c3-37c8-4bcf-a3af-248a707c7d31/?q=&o=postedDateDesc');

  const title = await page.evaluate(() => {
    return document.querySelector('.opportunity .row .col-lg-20 h3 a').textContent
  });

  opportunity.title = title;

  console.log(opportunity);

  browser.close();
})();

【问题讨论】:

    标签: javascript node.js puppeteer


    【解决方案1】:

    问题

    表达式document.querySelector('.opportunity .row .col-lg-20 h3 a')返回null,表示选择器没有找到任何元素。

    很可能是这种情况,因为虽然load 事件已被触发,但页面尚未构建完成。

    解决方案

    解决此问题的最简单方法是等待元素出现,然后再继续执行脚本。您可以像这样使用page.waitForSelector

    await page.goto(/* ... */);
    
    await page.waitForSelector('.opportunity .row .col-lg-20 h3 a');
    
    // continue with the remaining script...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多