Поэтому, когда вы пытаетесь получить объект Frame, вы должны прослушать событие frameattached
на странице. Вы можете сделать этот слушатель как функцию.
function waitForFrame(page, frameName) {
let fulfill;
const promise = new Promise(x => fulfill = x);
checkFrame();
return promise;
function checkFrame() {
const frame = page.frames().find(f => f.name() === frameName);
if (frame)
fulfill(frame);
else
page.once('frameattached', checkFrame);
}
}
И эти строки ниже - способ получения объекта Frame
// 1. waiting for frame with name 'ifrw' to get attached
const frame = await waitForFrame(page, 'ifrw')
// 2. waiting for the frame to contain the necessary selector
await frame.waitForSelector('input[type="text"][name="username"]')
// 3. do whatever you want to do like login form for example
const nameInputHandle = await frame.$('input[type="text"][name="username"]')
await nameInputHandle.type('my_name_is_too_long_for_sure')
const passInputHandle = await frame.$('input[type="password"][name="password"]')
await passInputHandle.type('Even_the_password_is_tricky_12345')
const submitButton = await frame.$('input[type="submit"][name="loginsubmit"]')
await submitButton.click()