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退貨,所以我不知道為什么它不可見。
有人知道我在做什么錯嗎?Ferrum需要使用不同的gem( )?
uj5u.com熱心網友回復:
這located: false并不意味著 Watir 看不到該元素或該元素不存在。這只是意味著 Watir 還沒有嘗試找到元素。對元素執行操作后,它將是located: true.
例如,如果您檢查了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 也將無法看到它。您希望在轉到下一頁之前捕獲結果的第一頁。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426765.html
標籤:javascript 红宝石 瓦提尔
