Watir:是否检索与属性匹配的所有动态HTML元素?

时间:2018-06-21 16:23:28

标签: ruby web-scraping watir

我试图用Watir抓取动态内容,但我被卡住了。

基本上,我知道我可以使用

  

browser.element(css:“ .some_class”)。wait_until_present

为了仅在加载“ some_class”时进行抓取。

问题在于,它只是给我第一个具有此类名称的元素,而我想要所有这些。


我也知道我可以使用

  

browser.spans(css:“ .some_class”)

为了收集所有具有该名称的类,问题是我无法将其与“ wait_until_present”结合使用(这给我一个错误)。而且由于内容尚未加载,页面正在使用javascript

,因此无法自行跨越

有没有办法将两者结合起来?这意味着等待class_name加载并选择与该类名匹配的所有元素,而不仅仅是第一个?

我已经坚持了很长时间...

非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

Watir中目前没有什么可等待元素集合的(尽管我最近一直在考虑添加一些东西)。现在,您只需要手动等待元素出现然后获取集合即可。

最简单的方法是同时调用两条线路:

browser.element(css: ".some_class").wait_until_present
browser.spans(css: ".some_class")

如果您想单线书写,可以使用#tap

browser.spans(css: ".some_class").tap { |c| c[0].wait_until_present }
#=> Watir::SpanCollection

请注意,如果仅检查类名,则可能要避免编写CSS选择器。没有它不仅更容易阅读,而且性能不佳。

browser.spans(class: "some_class").tap { |c| c[0].wait_until_present }