Ruby 中的硒。如何获取 img 标签中 alt 属性中的文本?
Selenium in Ruby. How can I get the text in alt attribute in img tag?
我正在做抓取项目,我面临着无法在“img”标签中获取文本“alt”的大问题。
代码看起来像这样。
<div class="example">
<span class="on">
<img src="https://www.~~~~~~~~" alt="hello">
</span>
<span class="on">
<img src="https://www.~~~~~~~~" alt="goodbye">
</span>
<span class="on">
<img src="https://www.~~~~~~~~" alt="konichiwa">
</span>
</div>
我试过的就是这些
def fetch_text_in_on_class
# @driver.find_elements(:class_name, 'on')[2].text or this ↓
# @driver.find_elements(:css, 'div.pc-only:nth-of-type(3) tr:nth-of-type(3)').first.text
end
还有这样的
def fetch_text_in_on_class
e = @driver.find_elements(:class => 'on').first&.attribute("alt")
e
end
页面中有一堆元素“打开”class,我想获取所有这些元素。
显然我可以使用下面的代码获取“on”class 的元素,但我无法获取 alt.
中的文本
@driver.find_elements(:class => 'on')
如果你能帮助我,我将不胜感激。
谢谢。
问题似乎出在您试图从具有 class on
的元素中获取替代文本。鉴于您发布的 HTML 该元素没有 alt 属性。尝试 CSS 选择器 span.on > img
获取 IMG 标签,然后获取替代文本。用于获取第一个元素文本的代码的更新版本应该可以工作。
e = @driver.find_elements(:css => 'span.on > img').first&.attribute("alt")
如果我的 ruby 语法不正确或者我没有回答您的实际问题,请原谅我——您想要替代文本本身吗?如果您将 class of "on" 的元素标识为数组,然后循环检索相关的替代文本,会怎样?那么,是这样的吗?
elements = @driver.find_elements(:css => 'span.on > img')
elements.each { |element|
altText = element.attribute("alt")
#whatever you want to do with the alt text, or store as an array above etc
}
让我们遍历集合并将文本保存在数组中,然后打印它
elements = driver.find_elements(:css => 'span.on > img').map { |element| element.attribute("alt") }
p elements
输出
["hello", "goodbye", "konichiwa"]
我正在做抓取项目,我面临着无法在“img”标签中获取文本“alt”的大问题。
代码看起来像这样。
<div class="example">
<span class="on">
<img src="https://www.~~~~~~~~" alt="hello">
</span>
<span class="on">
<img src="https://www.~~~~~~~~" alt="goodbye">
</span>
<span class="on">
<img src="https://www.~~~~~~~~" alt="konichiwa">
</span>
</div>
我试过的就是这些
def fetch_text_in_on_class
# @driver.find_elements(:class_name, 'on')[2].text or this ↓
# @driver.find_elements(:css, 'div.pc-only:nth-of-type(3) tr:nth-of-type(3)').first.text
end
还有这样的
def fetch_text_in_on_class
e = @driver.find_elements(:class => 'on').first&.attribute("alt")
e
end
页面中有一堆元素“打开”class,我想获取所有这些元素。
显然我可以使用下面的代码获取“on”class 的元素,但我无法获取 alt.
中的文本@driver.find_elements(:class => 'on')
如果你能帮助我,我将不胜感激。 谢谢。
问题似乎出在您试图从具有 class on
的元素中获取替代文本。鉴于您发布的 HTML 该元素没有 alt 属性。尝试 CSS 选择器 span.on > img
获取 IMG 标签,然后获取替代文本。用于获取第一个元素文本的代码的更新版本应该可以工作。
e = @driver.find_elements(:css => 'span.on > img').first&.attribute("alt")
如果我的 ruby 语法不正确或者我没有回答您的实际问题,请原谅我——您想要替代文本本身吗?如果您将 class of "on" 的元素标识为数组,然后循环检索相关的替代文本,会怎样?那么,是这样的吗?
elements = @driver.find_elements(:css => 'span.on > img')
elements.each { |element|
altText = element.attribute("alt")
#whatever you want to do with the alt text, or store as an array above etc
}
让我们遍历集合并将文本保存在数组中,然后打印它
elements = driver.find_elements(:css => 'span.on > img').map { |element| element.attribute("alt") }
p elements
输出
["hello", "goodbye", "konichiwa"]