我正在尝试爬网外部职位发布板并获取每个职位发布的数据。现在,我只是想收集职位发布列表中第一个职位发布的数据。我似乎无法阻止它继续对我说:
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();
})();
答案 0 :(得分:2)
问题
表达式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...