当前位置: 首页 > 知识库问答 >
问题:

如何通过硒找到数据钩子中存在的元素

国兴贤
2023-03-14

我的HTML代码如下:

<a class="a-size-base a-link-normal review-title a-color-base a-text-bold" data-hook="review-title" href="/gp/customer-reviews/R252N8IFRXV8TW/ref=cm_cr_getr_d_rvw_ttl?ie=UTF8&ASIN=B071NZZHF9">Security concern</a>

我必须通过数据钩子搜索元素,因为类名对于其他属性也是通用的,而且href和link文本是动态的,因为它对于下一个元素是变化的,因为我需要获取多个元素。

我可以通过数据钩子搜索它吗?如果是的话,有人能帮我吗!

共有3个答案

严安志
2023-03-14

根据您共享的HTML,通过data hook属性查找元素,您可以使用以下代码行:

driver.findElement(By.xpath("//a[@data-hook='review-title']"));

虽然您提到class name很常见,但在xpath中保留class name属性将是一个很好的做法,如下所示:

driver.findElement(By.xpath("//a[@class='a-size-base a-link-normal review-title a-color-base a-text-bold' and @data-hook='review-title']"));

此外,尽管您提到href正在更改,但我建议使用所有三个属性的组合来唯一地将元素标识为:

driver.findElement(By.xpath("//a[@class='a-size-base a-link-normal review-title a-color-base a-text-bold' and contains(@href,'/gp/customer-reviews/') and @data-hook='review-title']"));
刘丰羽
2023-03-14

如果需要多个数据挂钩项,也可以使用下面的代码。

List<WebElement> list = driver.findElements(By.className("review-title"));

for(WebElement elem : list){
    System.out.println(elem.getAttribute("data-hook"));
}
佘茂才
2023-03-14

你当然可以。

CSS:

driver.findElement(By.cssSelector("a[data-hook='review-title']"));

Xpath:

driver.findElement(By.xpath("//a[@data-hook='review-title']"));
 类似资料:
  • 我将Selenium与PHP WebDriver结合使用。我试图单击导航栏中的链接,该链接显示在HTML中,如下所示: 我正在尝试选择元素,然后单击它。但是,当我尝试使用xpath时,如下所示: 或 我得到以下错误: 没有这样的元素:无法定位元素:{“method”:“xpath”,“selector”:“/*[@showpage=“cards”]”}(会话信息:chrome=70.0.3538.

  • 我需要在HTML中找到此元素 我就是这样做的 使用XPATH,由Chrome控制台生成: 使用XPATH,它正在寻找某种正则表达式: 最后使用XPATH,它通过页面精确到我的元素 他们都没有工作。All给出了一个例外 硒。常见的例外情况。InvalidSelectorException:Message:u'由于以下错误,给定的选择器无法找到具有xpath表达式的元素:\n语法错误:表达式不是合法表

  • 我正在自动化一个枯燥的数据输入任务,所以我创建了一个程序,基本上是使用Selenium为我点击和键入。它跑得很好!除非它到达这个特定的“编辑详细信息...”元素,但是,无论我尝试什么方法,selenium都无法找到该元素。 我尝试使用一个CSS选择器来访问ID,但没有成功。我还尝试使用XPATH,并尝试通过给它一个带有按钮文本的'contains'语句来更加具体。最后,我使用selenium ID

  • 但是它抛出了-看起来像期望元素在那里,所以这是有缺陷的。这对硒来说一定是面包和黄油,不想推倒重来……有没有人可以提出一个替代方案,理想情况下不滚动我自己的?

  • 我还没反应过来。我试图从REST APIendpoint发出GET请求,该endpoint应返回以下JSON: 要查询API,我使用以下代码: 我想创建一个函数,返回JSON中的注释列表。我最初的尝试如下: 但是,它给了我一个错误。从网上看,似乎大多数人的问题都可以通过将默认值设置为空字典来解决,但我已经在React钩子中这样做了。我很困惑为什么要发帖子。注释列表未定义。我还注意到,试图使用控制台

  • 问题内容: 我试图让Selenium等待页面加载后动态添加到DOM的元素。试过这个: 如果有帮助,这里是: 但是它抛出一个-看起来像期望元素存在,所以这是有缺陷的。这一定是Selenium的面包和黄油,不想重新发明轮子……任何人都可以提出其他选择,理想情况下不用自己动手做? 问题答案: 需要等待时,您需要异常调用以忽略。 有关更多信息,请参见FluentWait文档。但是请注意,此条件已经在Exp