РЕДАКТИРОВАТЬ: как указано в комментариях, помните о Условиях обслуживания pgatours.com, которые не допускают парсинга, сканирования и т. Д. c. Приведенное ниже решение предназначено только для того, чтобы проиллюстрировать, как решить общую техническую проблему c, стоящую за вашим вопросом.
Я думаю, что это может быть связано с размером окна просмотра по умолчанию, который использует Puppeteer. Веб-сайт скрывает контент, который вы ищете при меньшем разрешении, отсюда и проблема.
Эта работа заставила меня явно указать размер области просмотра, например:
page.setViewport({ width: 1200, height: 1000 })
Итак ваш код станет:
'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();
page.setViewport({ width: 1200, height: 1000 })
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);