首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Puppeteer中用文本点击元素

如何在Puppeteer中用文本点击元素
EN

Stack Overflow用户
提问于 2017-11-21 15:46:23
回答 9查看 131.3K关注 0票数 116

有没有什么方法(在API中找不到)或者解决方案来点击带有文本的元素?

例如,我有html:

代码语言:javascript
运行
复制
<div class="elements">
    <button>Button text</button>
    <a href=#>Href text</a>
    <div>Div text</div>
</div>

我想单击其中包含文本的元素(单击.elements中的按钮),如下所示:

代码语言:javascript
运行
复制
Page.click('Button text', '.elements')
EN

回答 9

Stack Overflow用户

发布于 2018-01-07 04:04:37

您可以在page.$x(expression)中使用XPath选择器

代码语言:javascript
运行
复制
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表达式来说有点棘手。

票数 97
EN

Stack Overflow用户

发布于 2018-07-29 11:41:47

您还可以使用page.evaluate()单击从document.querySelectorAll()获取的已按文本内容过滤的元素:

代码语言:javascript
运行
复制
await page.evaluate(() => {
  [...document.querySelectorAll('.elements button')].find(element => element.textContent === 'Button text').click();
});

或者,您可以使用document.evaluate()和相应的XPath表达式,使用page.evaluate()根据元素的文本内容单击元素:

代码语言:javascript
运行
复制
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();
});
票数 24
EN

Stack Overflow用户

发布于 2019-03-07 00:40:33

快速解决方案,能够使用高级css选择器,如“:包含(文本)”

所以使用这个library你可以

代码语言:javascript
运行
复制
const select = require ('puppeteer-select');

const element = await select(page).getElement('button:contains(Button text)');
await element.click()
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47407791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档