如何使用selenium获取div类中a-tag的元素



我最近在做一个项目,我必须从一个特定的网站上获得元素。

我想得到下面的文本元素。

<div class="block-content">
<div class="block-heading">
<a href="https://www~~~~~~">  
<i class="fa fa-map">
::before
</i>
"Text I want to get"
</a>
</div>
</div>

我已经试着解决这个问题有一段时间了,但我找不到任何好的方法。

如果你能帮助我,我会很乐意的。

谢谢。

根据您提供的信息,您要查找的文本位于a元素内部,因此该元素的xpath类似于:
//a[contains(@href,'https://www')]
但由于其中还有i元素,从a元素获取文本将同时提供a本身中包含的文本和i内部的文本
因此,您应该从i获取文本,该文本在此处看起来只是(空格(,并将其从a接收的文本中减少
如果您想对包含hrefi元素的所有a元素执行此操作,您可以使用以下xpath
//a[@href and ./i]
如果您要查找的元素有更具体的定义-我提到的xpath应该相应地更新

根据您的评论,我理解您希望提取该文本。这是为您提供的代码,它可以提取您想要的文本。

Selenium::WebDriver::Wait
.new(timeout: 60)
.until { !driver.find_element(xpath: "//i[@class='fa fa-map-marker']/..").text.empty? }
p driver.find_element(xpath: "//i[@class='fa fa-map-marker']/..").text[/(?<=before ")w+ w+ w+ w+ w+/]

输出

"Text I want to get"

我无法直接获得我想要的元素,所以我做了以下操作。只是我确实用一些方法修改了元素。

def seller_name
shop_info_elements = @driver.find_elements(:class_name, "block-content")
shop_info_text= shop_info_elements.first.text
shop_info_text_array = shop_info_text.lines
seller_name = shop_info_text_array.first.chomp
seller_name
end

它并不漂亮,但它可以用于同一网站上的任何其他页面。

最新更新