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

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

我没有使用puppeteer太多,所以我可能只是遇到一个简单的语法问题,即即时通讯看不到。

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();
})();

最佳答案

问题

表达式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...

10-06 03:58