有没有办法在 Puppeteer 中通过它的两个属性找到一个按钮?

Is there a way find a button by two of its properties in Puppeteer?

我试图通过使用 puppeteer 单击一个按钮,我试图通过它的两个属性 aria-describedbytitle 找到它,因为它没有 ID。 aria-describedby 属性 的值是我设置的名称,但是,最后两个字符是数字,它会自动更改为随机数。

我搜索了正则表达式问题、JS 问题、木偶操作者的代码,但没有任何实际效果。

我最接近的是这个:

//v1
const arr = await page.$x('//button[starts-with("aria-describedby", "someName")]');
await arr[1].click();

//v2
page.click('button[aria-describedby="someName20"][title="Click button"]');

我尝试了不同的代码,但几乎总是得到 undefinedno node found for selector

我缺少 html 代码,因此很难确定答案,但每当我有需要两个参数的动态选择器来单击时,我都会通过包含文本进行搜索:

let toClick = await page.$x("//button[contains(text(),'someName20')][contains(text(),'Click button')]");

await toClick[0].click();

注意: text() 方法仅适用于文本节点(即 <a>someName20</a> ),但您可以交换括号中的第一个或第二个表达式以查询 属性 的值而不是元素文本值。

您可以尝试 css starts-with 选择器 (^=):

button[aria-describedby^="someName"][aria-label="Click button"]