Puppeteer ブラウザで、[Cookie Accept] ボタンをクリックした後に予期しない終了動作が発生する
P粉883278265
2023-08-16 21:40:51
<p>node.js と puppeteer を使用して Web サイトをクロールしてリアルタイムのサッカー情報を取得しようとしていますが、console.log("trying to select Team element") の後にブラウザがすぐに閉じてしまいます。 </p>
<pre class="brush:php;toolbar:false;">const puppeteer = require("puppeteer");
非同期関数 openPage() {
const browser = await puppeteer.launch( {headless: true} );
const page = ブラウザを待ちます.newPage();
await page.setViewport({ 幅: 1000, 高さ: 926 });
await page.goto("https://www.livescore.com/ja/");
// クッキーを受け入れる
const button = await page.waitForSelector('#onetrust-accept-btn-handler');
if (ボタン) {
button.click(); を待ちます。
console.log("クリックされたクッキーボタン");
};
ページに戻る。
}
非同期関数scrapeData(page) {
コンテンツ = []; にします。
// 競争要素を取得します
let elements = await page.waitForSelector(".Ip")
console.log("チーム要素を選択しようとしています")
for (let i=0; i < elements.length; i ) {
let homeTeamElement = await elements[i].$(".Ip")
if (homeTeamElement) {
const homeTeamText = await homeTeamElement.evaluate(node =>node.textContent);
content.push(ホームチームテキスト);
}
};
コンテンツを返す。
};
(async () => {
const page = await openPage();
const dataScraped = awaitscrapeData(page);
console.log(データスクレイピング)
page.browser().close(); を待ちます。
})();
<p>なぜこれが当てはまるのかについてのアイデアや、私のコードに対するさらなる批判は大歓迎です。 </p>
リーリー ###注記:###await page.waitForSelector(".Ip")
配列ではなく 1 つの要素のみを返すため、ループすることはできません。問題を説明する明確なエラー メッセージがあるはずです。代わりに、page.$$eval
(または最新の locator API を試したい場合) を使用してデータを抽出します。waitForSelector- の戻り値を確認する必要はありません。それが要素であることが保証されていますが、それ以外の場合、指定された時間内に見つからなかった場合は例外がスローされます。
await elements[i].$(".Ip")- は、すでに保持している
.Ip
要素内に ## がないため、何もアクセスできません # .Ip。
ElementHandles の使用は避けてください。これらは遅く、信頼性が低く、冗長です。