Puppeteer 无法读取未定义的属性 getElementById

Tia*_*ago 2 javascript node.js puppeteer

我试图将一个值传递给木偶操纵者创建的浏览器,但出现此错误:

无法读取未定义的属性“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'),
    ]);
}
Run Code Online (Sandbox Code Playgroud)

错误在这一行:

await page.document.getElementById("g-recaptcha-response").innerHTML === response.text
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

谢谢。

Cer*_*nce 6

您只能getElementById在页面上下文中使用。使用page.evaluate,例如:

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

这将获取该元素的 the innerHTML,将其发送回 Puppeteer,并将其记录在 Node 中。

如果您想将某些内容传递页面,则必须将其传递给page.evaluate,例如

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

这会将文本区域的值设置为123