Tengo un rasguño en una página HTML impulsada por JS que actualiza los productos encontrados en la misma página. Quiero tomar los productos y analizarlos. Luego quiero pasar a la página siguiente, que ya he logrado usando Watir . El problema es que Watir no puede ver los elementos de la primera página. Cada elemento tiene el formato HTML siguiente. Aquí está mi código después, luego el resultado:
## 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 Como puede ver, el div no se encuentra. Tengo la impresión de que Watir gestiona las devoluciones de JS , así que no sé por qué no está visible.
¿Alguien sabe qué estoy haciendo mal? ¿Se necesita usar una gema diferente ( Ferrum )?
El located: false no significa que Watir no pueda ver el elemento o que el elemento no exista. Simplemente significa que Watir aún no ha intentado encontrar el elemento. Una vez que realice una acción en el elemento, se located: true .
Por ejemplo, si inspeccionó el atributo de class (en lugar de la clase del objeto), :located cambiará a 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\"}>"En cuanto a por qué Watir ya no ve la primera página de resultados, eso dependería de lo que les suceda al cargar la segunda página de resultados. Si la primera página de resultados se elimina de la página (es decir, el usuario ya no puede verlos), Watir tampoco podrá verlos. Le gustaría capturar la primera página de resultados antes de pasar a la página siguiente.