我试图用Watir抓取动态内容,但我被卡住了。
基本上,我知道我可以使用
browser.element(css:“ .some_class”)。wait_until_present
为了仅在加载“ some_class”时进行抓取。
问题在于,它只是给我第一个具有此类名称的元素,而我想要所有这些。
我也知道我可以使用
browser.spans(css:“ .some_class”)
为了收集所有具有该名称的类,问题是我无法将其与“ wait_until_present”结合使用(这给我一个错误)。而且由于内容尚未加载,页面正在使用javascript
,因此无法自行跨越有没有办法将两者结合起来?这意味着等待class_name加载并选择与该类名匹配的所有元素,而不仅仅是第一个?
我已经坚持了很长时间...
非常感谢您的帮助
答案 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 }