Puppeteer ブラウザで、[Cookie Accept] ボタンをクリックした後に予期しない終了動作が発生する
P粉883278265
P粉883278265 2023-08-16 21:40:51
0
1
458
<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>
P粉883278265
P粉883278265

全員に返信(1)
P粉798010441

await page.waitForSelector(".Ip")配列ではなく 1 つの要素のみを返すため、ループすることはできません。問題を説明する明確なエラー メッセージがあるはずです。代わりに、page.$$eval (または最新の locator API を試したい場合) を使用してデータを抽出します。

リーリー ###注記:###

Cookie バナーをオフにすることはクローリングには必要ありませんが、Cookie バナーをオフにする場合は、
    waitForSelector
  • の戻り値を確認する必要はありません。それが要素であることが保証されていますが、それ以外の場合、指定された時間内に見つからなかった場合は例外がスローされます。
  • await elements[i].$(".Ip")
  • は、すでに保持している .Ip 要素内に ## がないため、何もアクセスできません # .Ip ElementHandles の使用は避けてください。これらは遅く、信頼性が低く、冗長です。
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート