Кукольник - Запуск функции внутри кадра - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь выполнить функцию внутри фрейма, но безуспешно.

await page.evaluateHandle(()=>{
  console.log(window.document.getElementsByTagName("frame")[3].contentWindow)
  console.log(window.document.getElementsByTagName("frame")[3].contentWindow.fiAbrePagina)
});

Обратите внимание, что в журнале консоли функция существует в объекте, но когда я пытаюсь получить доступ к функции,он не существует.

Chrominium console output

Глядя на консоль и осматривая объект окна, функция существует:

enter image description here

Мне нужна помощь, как выполнить функцию внутри фрейма?

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Вы можете сделать это с помощью contentFrame из элемента frame, примерно так:

let frameElement = await page.evaluateHandle(() => window.document.getElementsByTagName("frame")[3]);

frameElement = await frameElement.asElement();

const frameContentFrame = await frameElement.contentFrame();

await frameContentFrame.evaluate(() => console.log(fiAbrePagina.toString()));
0 голосов
/ 27 октября 2018

Вы можете использовать page.frames(), чтобы получить массив всех фреймов, прикрепленных к странице.Затем вы можете использовать frame.evaluate() для выполнения функции в контексте браузера внутри определенного фрейма.

Также убедитесь, что вы используете page.on('console') для обработки console.log() из среды DOM страницы:

page.on('console', msg => {
  for (let i = 0; i < msg.args().length; ++i) {
    console.log(`${i}: ${msg.args()[i]}`);
  }
});

const frame = page.frames().find(frame => frame.name() === 'example');

await frame.evaluate(() => {
  console.log(window.fiAbrePagina);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...