ホームページ > ウェブフロントエンド > jsチュートリアル > Puppeteer の `page.evaluate()` 関数に変数を適切に渡すにはどうすればよいですか?

Puppeteer の `page.evaluate()` 関数に変数を適切に渡すにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-09 10:20:09
オリジナル
613 人が閲覧しました

How Can I Properly Pass Variables to Puppeteer's `page.evaluate()` Function?

Puppeteer の評価関数に変数を渡す

Puppeteer では、page.evaluate() 関数を使用して開発者がブラウザー コンテキスト内で JavaScript を実行できるようにします。ただし、この関数に変数を渡すのは難しい場合があります。

次の例を考えてみましょう。

const puppeteer = require('puppeteer');

(async() => {

  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();

  const evalVar = 'WHUT??';

  try {

    await page.goto('https://www.google.com.au');
    await page.waitForSelector('#fbar');
    const links = await page.evaluate((evalVar) => {

      console.log('evalVar:', evalVar); // appears undefined

      const urls = [];
      hrefs = document.querySelectorAll('#fbar #fsl a');
      hrefs.forEach(function(el) {
        urls.push(el.href);
      });
      return urls;
    })
    console.log('links:', links);

  } catch (err) {

    console.log('ERR:', err.message);

  } finally {

    // browser.close();

  }

})();
ログイン後にコピー

この例では、変数 evalVar が page.evaluate() 関数内で未定義です。この問題を解決するには、変数を引数としてページ関数に渡す必要があります:

const links = await page.evaluate((evalVar) => {

  console.log(evalVar); // 2. should be defined now
  ...

}, evalVar); // 1. pass variable as an argument
ログイン後にコピー

このアプローチに従うことで、変数を page.evaluate() 関数に簡単に渡すことができ、ブラウザコンテキスト内でのより複雑な操作。

以上がPuppeteer の `page.evaluate()` 関数に変数を適切に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート