gpt4 book ai didi

javascript - 使用 Puppeteer 将数据对象注入(inject)到窗口

转载 作者:行者123 更新时间:2023-12-01 00:58:40 43 4
gpt4 key购买 nike

背景

我正在使用 Puppeteer 创建一些 PDF。当 Puppeteer 加载页面时,我需要将一些数据注入(inject)到页面中。

问题

我尝试使用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 页面上的窗口以便可以在页面内访问它以使用数据客户端的正确方法是什么?

最佳答案

将对象传递给评估

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

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

将对象传递给evaluateOnNewDocument

evaluateOnNewDocument 的工作方式与 evaluate 类似,只是只要有新窗口/导航/框架就会运行。这样,即使您导航到另一个页面,数据也将保留。

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

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

关于javascript - 使用 Puppeteer 将数据对象注入(inject)到窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56309552/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com