Как выполнить скрипт в каждом окне, которое загружается в кукловод? - PullRequest
0 голосов
/ 02 ноября 2019

Мне нужно выполнить скрипт в каждом объекте Window, созданном в Chrome, а именно:

  • вкладки, открытые через кукловода
  • ссылки, открываемые щелчком () по ссылкам в кукловоде
  • все всплывающие окна (например, window.open или "_blank")
  • все iframes, содержащиеся в вышеприведенном

, он должен быть выполнен без явной оценки дляэтот конкретный Window объект ...

Я проверил документацию Chrome, и я должен использовать Page.addScriptToEvaluateOnNewDocument. Тем не менее, это не представляется возможным использовать через кукловод.

Есть идеи? Спасибо.

1 Ответ

0 голосов
/ 03 ноября 2019

Поиск цели во всех контекстах браузера.

Пример поиска цели для открытой страницы

с помощью 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!')
    })

})

via browser.pages() или tabs

Этот скрипт запускает оценку скрипта на второй вкладке:

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

via page.frames() или iframes

Пример полученияeval из элемента iframe:

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

Надеюсь, это поможет вам

...