首页 > 解决方案 > 如何使用 puppeteer 单击以下按钮?

问题描述

我正在尝试使用 puppeteer 单击网站上的按钮,但它对我不起作用。

元素信息:

<button aria-label="Alles akzeptieren" role="button" data-testid="uc-accept-all-button" class="sc-gtsrHT gqGzpd">OK</button>

我的代码:

async function checkout(){
    const browser = await puppeteer.launch({headless: false});
    const page = await browser.newPage();
    
    
    await page.goto(product_url);
    await page.waitFor(3000);
    await page.click("Button[class='sc-gtsrHT gqGzpd']", elem => elem.click());

}

错误信息:

错误:找不到选择器的节点:Object.assert 处的按钮 [class='sc-gtsrHT gqGzpd'] (C:\Coding\Ticket-Bot\node_modules\puppeteer\lib\cjs\puppeteer\common\assert.js:26 :15)
在 DOMWorld.click (C:\Coding\Ticket-Bot\node_modules\puppeteer\lib\cjs\puppeteer\common\DOMWorld.js:277:21)
在 processTicksAndRejections (internal/process/task_queues.js:95: 5) 在异步结帐时 (C:\Coding\Ticket-Bot\bayern.js:14:5)

图片:

什么是正确的代码,以便单击按钮?

标签: automationclickpuppeteer

解决方案


由于页面上不存在该元素,您会收到错误消息,这可能是由于 CSS 类是按照 @Sirko 建议的那样自动生成的。

如果您在 headful 模式下启动 puppeteer,您甚至可以在 DevTools 中检查元素的类名。

您将需要找到那些保持不变的选择器,例如:

await page.click('[aria-label="Alles akzeptieren"]');
await page.click('[data-testid="uc-accept-all-button"]');

注意:我不确定您是否需要elem => elem.click()点击选项。


推荐阅读