有没有什么方法(在API中找不到)或者解决方案来点击带有文本的元素?
例如,我有html:
<div class="elements">
<button>Button text</button>
<a href=#>Href text</a>
<div>Div text</div>
</div>
我想单击其中包含文本的元素(单击.elements中的按钮),如下所示:
Page.click('Button text', '.elements')
发布于 2018-01-07 04:04:37
您可以在page.$x(expression)中使用XPath选择器
const linkHandlers = await page.$x("//a[contains(text(), 'Some text')]");
if (linkHandlers.length > 0) {
await linkHandlers[0].click();
} else {
throw new Error("Link not found");
}
有关完整的示例,请查看此gist中的clickByText
。它负责转义引号,这对于XPath表达式来说有点棘手。
发布于 2018-07-29 11:41:47
您还可以使用page.evaluate()
单击从document.querySelectorAll()
获取的已按文本内容过滤的元素:
await page.evaluate(() => {
[...document.querySelectorAll('.elements button')].find(element => element.textContent === 'Button text').click();
});
或者,您可以使用document.evaluate()
和相应的XPath表达式,使用page.evaluate()
根据元素的文本内容单击元素:
await page.evaluate(() => {
const xpath = '//*[@class="elements"]//button[contains(text(), "Button text")]';
const result = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null);
result.iterateNext().click();
});
发布于 2019-03-07 00:40:33
快速解决方案,能够使用高级css选择器,如“:包含(文本)”
所以使用这个library你可以
const select = require ('puppeteer-select');
const element = await select(page).getElement('button:contains(Button text)');
await element.click()
https://stackoverflow.com/questions/47407791
复制相似问题