Кукловод не может прочитать свойство getElementById неопределенного

#javascript #node.js #puppeteer

#javascript #node.js #кукловод

Вопрос:

Я пытаюсь передать значение в браузер, созданный кукловодом, но появляется эта ошибка:

Не удается прочитать свойство ‘getElementById’ неопределенного

 async function start() {
    const browser = await puppeteer.launch({
        headless : false
    });
    const page = await browser.newPage();
    await page.goto('https://www.google.com/recaptcha/api2/demo?invisible=true');

    await page.document.getElementById("g-recaptcha-response").innerHTML === response.text
    
    await Promise.all([
        page.click('#recaptcha-demo-submit'),
    ]);
}
 

Ошибка в этой строке:

 await page.document.getElementById("g-recaptcha-response").innerHTML === response.text
 

что я делаю не так?

Спасибо.

Комментарии:

1. Что должна делать эта строка? Что, если они не равны?

Ответ №1:

Вы можете использовать только getElementById в контексте страницы. Используйте page.evaluate , например:

 const html = await page.evaluate(() => {
    return document.getElementById("g-recaptcha-response").innerHTML;
});
console.log(html);
 

Это возьмет значение innerHTML этого элемента, отправит его обратно в Puppeteer и зарегистрирует его в Node.

Если вы хотите передать что-то на страницу, вам нужно будет передать это page.evaluate , например

 await page.evaluate((arg) => {
    return document.getElementById("g-recaptcha-response").value = arg;
}, '123');
 

Это установит значение текстовой 123 области равным .