Ruby Watir Gem 不会看到更新 Div

Ruby Watir Gem Won't See Updated Div

我在 JS 驱动的 HTML 页面上有一个刮擦,该页面更新了在同一页面上找到的产品。我想抓取产品并将它们解析出来。然后我想转到下一页,我已经使用 Watir 管理了该页面。问题是 Watir 看不到第一页的项目。每个项目的格式都在下面的 HTML 中。这是我的代码,然后是结果:

## HTML
<div data-jplist-item="" class="itemSpace">
  <div class="itemContainer">
    <a href="/en/Products/All/Tipless Chine" target="_blank" title="Click here to learn more about this product">
    <div class="name itemName">(1711) Red Chine, Tips Removed<span style="display:none;">boat part, DELTAUPDATE</span></div>
    <div class="saleDiscount" style="display:none;">25.575</div>
    <div class="itemNo" style="display:none;">1711</div>
    <div class="saleNote">SALE</div></a>
  </div>
</div>


## code
##### a is the browser
item = a.div(class: "itemSpace")
ap item.inspect
puts item.class
puts
item2 = a.div(class: "itemContainer")
ap item2.inspect
puts item2.class


## result
"#<Watir::Div: located: false; {:class=>\"itemSpace\", :tag_name=>\"div\"}>"
Watir::Div

"#<Watir::Div: located: false; {:class=>\"itemContainer\", :tag_name=>\"div\"}>"
Watir::Div

如您所见,未找到 div。我的印象是 Watir 管理 JS returns,所以我不知道为什么它不可见。

有人知道我做错了什么吗?需要使用不同的gem(Ferrum)?

located: false 并不意味着 Watir 看不到该元素或该元素不存在。这只是意味着 Watir 尚未尝试找到该元素。对元素执行操作后,它将是 located: true.

例如,如果您检查了 class 属性(而不是对象的 class),:located 将更改为 true

item = a.div(class: "itemSpace")
p item.inspect
#=> "#<Watir::Div: located: false; {:class=>\"itemSpace\", :tag_name=>\"div\"}>"
p item.class_name   # note that this is #class_name not #class
#=> "itemSpace"
p item.inspect
#=> "#<Watir::Div: located: true; {:class=>\"itemSpace\", :tag_name=>\"div\"}>"

至于为什么 Watir 不再看到第一页结果,这取决于他们在加载第二页结果时发生了什么。如果结果的第一页从页面中删除(即用户无法再看到它们),那么 Watir 也将无法看到它。在转到下一页之前,您需要捕获结果的第一页。