有没有办法在 Puppeteer 中通过它的两个属性找到一个按钮?
Is there a way find a button by two of its properties in Puppeteer?
我试图通过使用 puppeteer 单击一个按钮,我试图通过它的两个属性 aria-describedby
和 title
找到它,因为它没有 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"]');
我尝试了不同的代码,但几乎总是得到 undefined
或 no 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"]
我试图通过使用 puppeteer 单击一个按钮,我试图通过它的两个属性 aria-describedby
和 title
找到它,因为它没有 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"]');
我尝试了不同的代码,但几乎总是得到 undefined
或 no 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"]