PuppeteerでCSSセレクタによる要素の検索方法

CSSセレクタは、ウェブスクレイピング時にHTMLページをパースする最も効率的な方法の一つです。Node.jsとPuppeteerでは、page. $およびpage.$$メソッドを使用してCSSセレクタを操作できます。これらのメソッドにより、慣れ親しんだCSS構文を用いてページ上の要素とやり取りが可能です。

以下に、これらのメソッドを使用してページ上の要素を検索する方法を示すサンプルコードを、各ステップを理解しやすくするための詳細なコメント付きで記載します。

      const puppeteer = require('puppeteer');

async function run() {
    // 新しいブラウザインスタンスを起動
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    
    // 対象ウェブページへ移動
    await page.goto("https://httpbin.dev/html", { waitUntil: 'domcontentloaded' });

    // 最初に一致する要素を取得
    const firstParagraph = await page.$("p");
    console.log("最初の段落要素を発見:", firstParagraph);

    // 一致する要素をすべて取得
    const allParagraphs = await page.$$("p");
    console.log("見つかった段落の総数:", allParagraphs.length);

    // 最初の段落のテキスト内容を抽出してログ出力
    const firstParagraphText = await page.$eval("p", element => element.innerText);
    console.log("最初の段落のテキスト:", firstParagraphText);

    // 最初のアンカータグのhref属性を抽出・ログ出力
    const firstAnchorHref = await page.$eval("a", element => element.href);
    console.log("最初のアンカータグのhref:", firstAnchorHref);

    // 段落要素の総数をカウント
    const paragraphCount = await page.$$eval("p", elements => elements.length);
    console.log("段落要素の総数:", paragraphCount);

    // 最初の段落の内部テキストを変更
    await page.$eval("p", element => element.innerText = "最初の段落の新しいテキスト");
    console.log("最初の段落のテキストを変更しました。");

    // ブラウザを閉じる
    await browser.close();
}

// 関数を実行
run();
    

この例では、以下の操作を実行します:

  1. 新しいブラウザインスタンスを起動: Puppeteer制御の新しいブラウザを起動します。
  2. 対象ウェブページへ移動:gotoメソッドが指定URLへ移動し、ページのDOMコンテンツが完全に読み込まれるまで待機します。
  3. 最初の一致要素を取得:page.$メソッドはCSSセレクタpに一致する最初の要素を取得します。
  4. 一致する全要素を取得:page.$$メソッドがCSSセレクタpに一致する全要素を取得します。
  5. 最初の段落のテキスト内容を抽出・記録:page.$evalメソッドは最初の一致要素のコンテキストで関数を評価し、そのinnerTextを返します。
  6. 最初のアネクタータグのhref属性を抽出してログ出力: page.$evalメソッドは最初のアネクタータグのhref属性を取得します。
  7. 段落要素の総数をカウントpage.$$evalメソッドは、一致する全要素のコンテキストで関数を評価し、総数を返します。
  8. 最初の段落の内部テキストを変更するpage.$evalメソッドは最初の一致するp要素のinnerTextを変更します。
  9. ブラウザを閉じる:これにより、スクリプト終了後にブラウザインスタンスが適切に閉じられます。

注意:
特に動的コンテンツを含むページでは、要素を検索する前にページが完全に読み込まれるまで待機することが不可欠です。詳細は「Puppeteer でページの読み込みを待機する方法」を参照してください
要素を特定するその他の方法については、「Puppeteer で XPath を使用して要素を見つける方法」も参照できます

まとめ

PuppeteerでCSSセレクターを使用することで、ウェブスクレイピングや自動化タスクを簡潔かつ効率的に実行できます。これらの手法を理解し活用することで、ウェブページ要素と効果的にやり取りし、貴重なデータを抽出することが可能になります。

20,000+ 人以上のお客様に世界中で信頼されています

準備はできましたか?