【问题标题】:Puppeteer Sharp - Get element containing textContentPuppeteer Sharp - 获取包含 textContent 的元素
【发布时间】:2019-08-14 13:37:02
【问题描述】:

我正在尝试研究如何有效地从包含特定字符串的页面中获取元素。

元素位于<a> 标记中,但它的类/ID 是随机生成的。

我能做到这一点的唯一方法是遍历每个 <a> 标签并检查 textContent 是否匹配。

<a>Match this text foo</a>

我也尝试过使用 xPath 表达式,但是我可以弄清楚如何使用返回的元素。

//a[contains(text(),'Match this text')]

谁有更好的解决方案?

【问题讨论】:

  • 您没有可以识别的父元素吗?所以你可以做类似.parent-div-class A
  • 很遗憾没有。该站点竭尽全力使所有选择器动态化,并且 HTML 非常基本。我确信 xPath 应该更有效,但是我不知道如何使用返回的 ElementHandle

标签: puppeteer puppeteer-sharp


【解决方案1】:

page.$x(expression) 方法返回:<Promise<Array<ElementHandle>>>。因此,您可以通过索引或仅通过解构赋值来获取特定元素。

例如:

const links = await page.$x('//a[text()="Specific Text"]'); // returns: <Promise<Array<ElementHandle>>>
await links[0].click();

解构赋值甚至更好:

const [ link ] = await page.$x('//a[text()="Specific Text"]');
await link.click();

【讨论】:

  • 完美谢谢!我没有意识到 ElementHandle 可以以这种方式使用。
  • 很高兴为您提供帮助!)
  • 你知道我将如何从ElementHandle 对象中读取标签的 URL 吗?我为此使用c#
  • 嘿@atoms。 ElementHandle 对象的标签 URL 是什么意思?可以举个例子吗?
  • 我找到了!是打电话给ElementHandle[0].getPropertyAsync("href")。当你知道怎么做时很明显!感谢您的帮助!
猜你喜欢
  • 2020-06-15
  • 2021-02-12
  • 2022-12-13
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 2019-04-01
  • 2021-02-13
相关资源
最近更新 更多