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