0

我编写了一个 ruby​​ 代码,浏览器对象在其中找到所有链接,然后如果它们与特定的正则表达式匹配,我将它们一个一个地存储在一个数组中。

@browser.links.collect(&:href).each do |link|
  matches = regex.match(link)
  array_of_multimedia << matches[:multimedia_id] if matches
end

我正在尝试创建一个过滤器,我只遍历那些链接,其中第二个子 div 内的 span 包含 aria-label 作为Multimedia

附件是 HTML 结构的屏幕截图。HTML结构

我尝试了一些方法,例如查找所有跨度,然后自下而上到跨度的父级父级,但它没有给我href。

@browser.spans(aria_label: "Multimedia").each do |span|
 span.parent.parent.a.hreflang #Didn't work
 span.parent.parent.a.link.href #Didn't work
 span.parent.parent.href.text #Didn't work
 element.tag_name #This shows "a" which is correct though
end

我还尝试了一种自上而下的方法

@browser.links.collect(&:href).each do |link|
  link_element = @browser.link(href: link)
  link_element.children.following_sibling(aria_label: "Multimedia").present? #Didn't work
end

到目前为止,获得实际的hrefs没有运气。将不胜感激任何帮助!

4

1 回答 1

1

因为跨度在链接标签内,所以自下而上会更容易

尽可能多地使用 Watir 定位器而不是多个循环。父方法接受参数:

@browser.spans(aria_label: 'Multimedia').map {|span| span.parent(tag_name: 'a').href }

至于你尝试了什么:

# parent.parent is the link, so calling `#a` is looking for a link nested inside the link
span.parent.parent.a.hreflang
span.parent.parent.a.link.href 

# href should give you a String, you shouldn't need to call #text method on it
span.parent.parent.href.text 

# element isn't defined here, but try just element.href 
element.tag_name

另请注意,Element#href方法本质上是Element#attribute_value('href').

于 2021-03-03T01:22:39.830 回答