automation - 如何使用 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)
图片:
什么是正确的代码,以便单击按钮?
解决方案
由于页面上不存在该元素,您会收到错误消息,这可能是由于 CSS 类是按照 @Sirko 建议的那样自动生成的。
如果您在 headful 模式下启动 puppeteer,您甚至可以在 DevTools 中检查元素的类名。
您将需要找到那些保持不变的选择器,例如:
await page.click('[aria-label="Alles akzeptieren"]');
await page.click('[data-testid="uc-accept-all-button"]');
注意:我不确定您是否需要elem => elem.click()
点击选项。
推荐阅读
- angular - 角度测试并在 e2e 中出错
- node.js - 使用 node.js 进行 Soap Web 服务监控、遥测和指标
- javascript - 如何循环遍历数组并向vue.js中的所有对象添加属性
- connection-pooling - 使用“动态”连接池连接极光 rds 无服务器
- angular - Universal 不呈现 HTTP 调用
- firebase-cloud-messaging - 使用通知编写器目标使用 Firebase 通知
- bixby - bixby:音频播放器,如何给音频播放器输入
- ajax - 在弹出窗口中显示验证错误(模式)
- sql - 如何使查询仅作用于一个元素
- command-line - 我应该在哪里存储 .NET Core 全局工具的数据?