使用 Puppeteer 将数据对象注入 window

Injecting data object to window with Puppeteer

背景

我正在使用 Puppeteer 创建一些 PDF。我需要在 Puppeteer 加载页面时将一些数据注入页面。

问题

我曾尝试使用 evaluateOnNewDocument(),仅在使用 String 时成功。当我尝试使用 Object 时,它失败了。我也尝试过 evaluate(),但无论我传入什么,它都会失败。

示例

// Works
    await page.evaluateOnNewDocument(() => {
           window.pdfData = {};
           window.pdfData = "Some String";
    });

// Does not work 
    await page.evaluateOnNewDocument(() => {
           window.pdfData = {};
           window.pdfData = data;
    });

// Fails
await page.evaluate(data => {
     window.pdfData = {};
     window.pdfData = data;
}, data);

我想像这样访问这个对象,

const data = window.pdfData;

问题

在加载的 Puppeteer 页面上将数据对象传递到 window 以便可以在页面内访问它以使用数据客户端的正确方法是什么?

正在将对象传递给 evaluate

您可以传递将序列化为 JSON 的数据。

await page.evaluateOnNewDocument(data => { // <-- pass as parameter
  window.pdfData = data; // <-- read it here
}, data); // <-- pass as argument

正在将对象传递给 evaluateOnNewDocument

evaluateOnNewDocumentevaluate 的工作方式类似,除了它会 运行 只要有新的 window/navigation/frame。这样,即使您导航到另一个页面,数据也会保留。

您可以在函数内部传递数据和读取。

await page.evaluateOnNewDocument(data => {
  window.pdfData = data;
}, data);