/ / evaluateOnNewDocumentとexposeFunctionの使い方は? - javascript、puppeteer

evaluateOnNewDocumentとexposeFunctionの使い方は? - javascript、puppeteer

最近、私はPuppeteerを新しいプロジェクトに使用しました。

私は理解していないAPIの一部についていくつかの質問があります。これらのAPIの紹介では、ドキュメントは非常にシンプルです。

  1. page.exposeFunction
  2. page.evaluateOnNewDocument

より良い理解を得るために詳細なデモを見ることができますか?

回答:

回答№1は0

概要:

Puppeteer関数 page.exposeFunction() 基本的には、ページDOM環境内のNode.js機能にアクセスすることができます。

一方、 page.evaluateOnNewDocument() 新しい文書が作成され、そのスクリプトのいずれかが実行される前に、事前定義された関数を評価します。


/>

Puppeteerのドキュメント page.exposeFunction() 州:

page.exposeFunction(name、puppeteerFunction)

  • name <文字列>ウィンドウオブジェクト上の関数の名前
  • puppeteerFunction <関数> Puppeteerのコンテキストで呼び出されるコールバック関数。
  • 戻り値:<約束する>

このメソッドは、 name ページ上の window オブジェクト。呼び出されると、関数が実行されます。 puppeteerFunction node.jsで 約束する 戻り値に解決されます。 puppeteerFunction.

もし puppeteerFunction 返す 約束するそれは待たれるでしょう。

注意 経由でインストールされる機能 page.exposeFunction 生き残った航海。

追加する例 md5 関数をページに追加する:

const puppeteer = require("puppeteer");
const crypto = require("crypto");

puppeteer.launch().then(async browser => {
const page = await browser.newPage();
page.on("console", msg => console.log(msg.text()));
await page.exposeFunction("md5", text =>
crypto.createHash("md5").update(text).digest("hex")
);
await page.evaluate(async () => {
// use window.md5 to compute hashes
const myString = "PUPPETEER";
const myHash = await window.md5(myString);
console.log(`md5 of ${myString} is ${myHash}`);
});
await browser.close();
});

追加する例 window.readfile 関数をページに追加する:

const puppeteer = require("puppeteer");
const fs = require("fs");

puppeteer.launch().then(async browser => {
const page = await browser.newPage();
page.on("console", msg => console.log(msg.text()));
await page.exposeFunction("readfile", async filePath => {
return new Promise((resolve, reject) => {
fs.readFile(filePath, "utf8", (err, text) => {
if (err)
reject(err);
else
resolve(text);
});
});
});
await page.evaluate(async () => {
// use window.readfile to read contents of a file
const content = await window.readfile("/etc/hosts");
console.log(content);
});
await browser.close();
});

/>

さらに、 Puppeteerのドキュメント page.evaluateOnNewDocument 説明します:

page.evaluateOnNewDocument(PageFunction、... args)

次のいずれかのシナリオで呼び出される関数を追加します。

  • ページがナビゲートされるたびに
  • 子フレームが取り付けられているかナビゲートされているときはいつでも。この場合、関数は新しくアタッチされたフレームのコンテキストで呼び出されます

この関数は、ドキュメントが作成された後、そのスクリプトが実行される前に呼び出されます。これは、JavaScript環境を修正するのに便利です。種にする Math.random.

ページが読み込まれる前にnavigator.languagesプロパティをオーバーライドする例を次に示します。

// preload.js

// overwrite the `languages` property to use a custom getter
Object.defineProperty(navigator, "languages", {
get: function() {
return ["en-US", "en", "bn"];
}
});

// In your puppeteer script, assuming the preload.js file is in same folder of our script
const preloadFile = fs.readFileSync("./preload.js", "utf8");
await page.evaluateOnNewDocument(preloadFile);