我最近在做一个项目,我必须从一个特定的网站上获得元素。
我想得到下面的文本元素。
<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
接收的文本中减少
如果您想对包含href
和i
元素的所有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
它并不漂亮,但它可以用于同一网站上的任何其他页面。