Im Puppeteer-Browser kam es zu unerwartetem Schließverhalten nach dem Klicken auf die Schaltfläche „Cookie akzeptieren'.
P粉883278265
2023-08-16 21:40:51
<p>Ich versuche, node.js und puppeteer zu verwenden, um eine Website nach Echtzeit-Fußballinformationen zu crawlen, aber nach console.log("trying to select team element") wird mein Browser sofort geschlossen. </p>
<pre class="brush:php;toolbar:false;">const puppeteer = require("puppeteer");
asynchrone Funktion openPage() {
const browser = waiting puppeteer.launch( {headless: true} );
const page = waiting browser.newPage();
Warten Sie auf page.setViewport({ width: 1000, height: 926 });
Warten Sie auf page.goto("https://www.livescore.com/en/");
//Cookies akzeptieren
const button = waiting page.waitForSelector('#onetrust-accept-btn-handler');
if (Schaltfläche) {
Warten Sie auf button.click();
console.log("Cookie-Schaltfläche angeklickt");
};
Rückkehrseite;
}
asynchrone Funktion scrapeData(page) {
let content = [];
// Holen Sie sich die Wettbewerbselemente
let elements = wait page.waitForSelector(".Ip")
console.log("versucht, ein Teamelement auszuwählen")
for (let i=0; i < elements.length; i++) {
let homeTeamElement = waiting elements[i].$(".Ip")
if (homeTeamElement) {
const homeTeamText = waiting homeTeamElement.evaluate(node => node.textContent);
content.push(homeTeamText);
}
};
Inhalt zurückgeben;
};
(async () => {
const page = wait openPage();
const dataScraped = waiting scrapeData(page);
console.log(dataScraped)
Warten Sie auf page.browser().close();
})();</pre>
<p>Alle Ideen, warum das so ist, und weitere Kritik an meinem Code sind willkommen! </p>
await page.waitForSelector(".Ip")
只返回一个元素,而不是一个数组,所以无法循环遍历。应该有一个清晰的错误消息来解释这个问题。相反,可以使用page.$$eval
(或者如果你想尝试最新的定位器 API)来提取数据。注:
waitForSelector
的返回值。它保证是该元素,否则如果在规定时间内找不到它,它会抛出异常。await elements[i].$(".Ip")
不会帮助你访问任何内容,因为在你已经持有的.Ip
元素内部没有.Ip
。