【发布时间】:2020-08-05 11:41:20
【问题描述】:
错误
无法读取 null 的属性“querySelectorAll”
我正在抓取这个site,当我在控制台中编写以下行时,它给了我 HTML。但是当我从 puppeteer 抓取 HTML 时,它给了我错误
document.querySelectorAll('#stroke-play-container > .stroke-play-leaderboard > .the-leaderboard.with-rolex > table.leaderboard.leaderboard-table.large')[0].nextSibling;
代码
'use strict';
const puppeteer = require('puppeteer');
function run() {
return new Promise(async (resolve, reject) => {
try {
const browser = await puppeteer.launch({
headless : false
});
const page = await browser.newPage();
await page.goto("https://www.pgatour.com/leaderboard.html");
await page.evaluate(`window.scrollTo(0, document.body.scrollHeight)`);
await page.waitFor(5000);
let urls = await page.evaluateHandle(() => {
let results = [];
var parser = new DOMParser();
var node = document.querySelectorAll('#stroke-play-container > .stroke-play-leaderboard > .the-leaderboard.with-rolex > table.leaderboard.leaderboard-table.large')[0].nextSibling;
if(node){
var $ = parser.parseFromString(node, 'text/html');
return {
name: $.querySelectorAll('table > tbody:nth-child(1) > tr > td.player-name > div > div.player-name-col').innerText
};
}
else{
return 'error';
}
})
browser.close();
return resolve(urls);
} catch (e) {
return reject(e);
}
})
}
run().then(console.log).catch(console.error);
【问题讨论】:
-
你能用 evaluate 代替 evaluateHandle 看看是否有帮助吗?
-
仍然出现同样的错误
-
nextSiblings 不能在 chromium 中工作
-
仅供参考:ToC 7. 行为。 (b) 您不得通过自动电子程序、机器人、蜘蛛、爬虫、网络爬虫或其他计算机程序来使用、允许或协助他人使用 PGATOUR.com,这些程序会监控、复制或下载在 PGATOUR 上找到或通过 PGATOUR 访问的数据或其他内容.com,包括但不限于实时评分、视频、音频、统计数据、投票或数据内容,无论是当前的还是存档的。
-
@Lawrence - 该页面是公开的,没有服务条款。人们不受他们不同意相信与否的合同的约束。
标签: javascript node.js web-scraping puppeteer