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 也将无法看到它。在转到下一页之前,您需要捕获结果的第一页。
我在 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 也将无法看到它。在转到下一页之前,您需要捕获结果的第一页。