首页 > 解决方案 > 如何在 puppeteer 中加载的每个窗口中执行脚本?

问题描述

我需要在 Chrome 中创建的每个 Window 对象中执行一个脚本——即:

它必须在没有我明确评估该特定Window对象的情况下执行...

我检查了 Chrome 的文档,我应该使用的是Page.addScriptToEvaluateOnNewDocument. 但是,它似乎无法通过 puppeteer 使用。

任何想法?谢谢。

标签: puppeteergoogle-chrome-headless

解决方案


这会在所有浏览器上下文中搜索目标。

为打开的页面查找目标的示例

通过window.open()或弹出窗口:

await page.evaluate(() => window.open('https://www.example.com/'))
const newWindowTarget = await browser.waitForTarget(async target => {

    await page.evaluate(() => {
        runTheScriptYouLike()
        console.log('Hello StackOverflow!')
    })

})

通过browser.pages()或标签

此脚本在第二个选项卡中运行脚本评估:

const pageTab2 = (await browser.pages())[1]
const runScriptOnTab2 = await pageTab2.evaluate(() => {
    runTheScriptYouLike()
    console.log('Hello StackOverflow!')
})

通过page.frames()或 iframe

从 iframe 元素获取 eval 的示例:

const frame = page.frames().find(frame => frame.name() === 'myframe')
const result = await frame.evaluate(() => {
    return Promise.resolve(8 * 7);
});
console.log(result); // prints "56"

希望这可以帮助你


推荐阅读