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"]