Dans le navigateur Puppeteer, comportement de fermeture inattendu après avoir cliqué sur le bouton Cookie Accepter
P粉883278265
2023-08-16 21:40:51
<p>J'essaie d'utiliser node.js et puppeteer pour explorer un site Web pour obtenir des informations sur le football en temps réel, mais après console.log("trying to select team element"), mon navigateur se ferme immédiatement. </p>
<pre class="brush:php;toolbar:false;">const marionnettiste = require("marionnettiste");
fonction asynchrone openPage() {
const navigateur = wait puppeteer.launch( {headless: true} );
const page = attendre navigateur.newPage();
wait page.setViewport({ largeur : 1000, hauteur : 926 });
attendre page.goto("https://www.livescore.com/en/");
//Accepter les cookies
bouton const = attendre page.waitForSelector('#onetrust-accept-btn-handler');
si (bouton) {
attendre le bouton.click();
console.log("clic sur le bouton cookie");
} ;
page de retour ;
}
fonction asynchrone scrapeData (page) {
laissez contenu = [];
// Récupère les éléments du concours
let elements = attendre page.waitForSelector(".Ip")
console.log("essayer de sélectionner un élément d'équipe")
pour (soit i=0; i < elements.length; i++) {
laissez homeTeamElement = attendre les éléments[i].$(".Ip")
si (homeTeamElement) {
const homeTeamText = wait homeTeamElement.evaluate(node => node.textContent);
content.push(homeTeamText);
}
} ;
renvoyer du contenu ;
} ;
(async () => {
const page = attendre openPage();
const dataScraped = wait scrapeData(page);
console.log(dataScraped)
attendre page.browser().close();
})();</pre>
<p>Toutes les idées sur les raisons pour lesquelles c'est le cas et toute autre critique de mon code sont les bienvenues ! </p>
await page.waitForSelector(".Ip")
只返回一个元素,而不是一个数组,所以无法循环遍历。应该有一个清晰的错误消息来解释这个问题。相反,可以使用page.$$eval
(ou si vous souhaitez essayer la dernière Locator API) pour extraire les données.Remarque :
waitForSelector
. Il est garanti qu'il s'agit de l'élément, sinon il lèvera une exception s'il n'est pas trouvé dans le délai spécifié.await elements[i].$(".Ip")
不会帮助你访问任何内容,因为在你已经持有的.Ip
元素内部没有.Ip
.