Saya mencoba mencetak konten teks dari setiap div kelas tertentu: "results_row". Saya akan menemukan setiap div dengan pencari lain seperti judul dan id jika saya hanya memerlukan teks dari dua div ini, tetapi div tersebut adalah hasil pencarian untuk nomor seri dari sebuah array. Saya ingin dapat mencetak teks dari setiap div setelah mencari sehingga saya dapat mengulangi serangkaian serial.
Ini HTML saya:
<div class="bodytag" style="padding-bottom:30px; overflow:visible">
<h2>Search Results for "serialnum3"</h2>
<div id="results_banner">
Products
<span>Showing 1 to 2 of 2 results</span>
</div>
<div class="pg_dir"></div>
<div class="results_row">
<a href="/id/products/fuji/" title="Fuji, Inc.">FUJI</a>
<a href="/id/products/fuji/50mm lens/" title="Fuji, Inc.">50mm lens</a>
<div class="results_subrow">
<p>more product info</p>
</div>
</div>
<div class="results_row">
<a href="/id/products/fuji/" title="Fuji, Inc. 2">FUJI</a>
<a href="/id/products/fuji/50mm lens/" title="Fuji, Inc.">50mm lens</a>
<div class="results_subrow">
<p>more product info 2</p>
</div>
</div>
<div class="pg_dir"></div>
</div>
Dan ini kode saya:
SERIALS = ["s1","s2","s3"]
SERIALS.each do |item|
browser.span(:id => "search").click
browser.send_keys [:control, 'a']
browser.send_keys :delete
browser.send_keys "#{item}"
browser.send_keys :return
puts "sleeping 3"
sleep(3)
#Scrape text from results_row divs
results_row = browser.div(:class => "results_row")
puts results_row.text
end
Saya perlu memanggil semua div kelas itu ketika saya mendefinisikan metode result_row sebelum mencetak sehingga tidak hanya mengambil div pertama kelas itu di halaman dan melanjutkan ke serial berikutnya. Saya merasa ada solusi sederhana seperti menjadikan div jamak saat mendefinisikan metode result_row results_row = browser.divs(:class => "results_row")
tetapi hal itu membuat metode tersebut tidak terdefinisi.
Mungkin ada cara untuk mengulangi setiap div di div "bodytag" seolah-olah mereka adalah lis di ul. Untuk itu saya sedang mempertimbangkan sesuatu seperti ini:
BodyTag = browser.div(:class => "bodytag")
BodyTag.divs.each_with_index do |e|
results_row = browser.div(:class => "results_row")
puts results_row.text
end
browser.divs(:class => "results_row")
?#divs
adalah waktu yang tepat untuk mendapatkan koleksi div yang cocok. Saya telah menulis beberapa hal tentang menemukan elemen vs koleksi di buku jika itu membantu. - person Justin Ko   schedule 11.09.2018divs
secara langsung, tetapi apa yang Anda lakukan dengannya? Kodenya harus sepertiputs browser.divs(class: 'results_row').map(&:text)
- person Justin Ko   schedule 11.09.2018block in <main>': undefined method
text' untuk #‹Watir::DivCollection:0x00000005193160› (NoMethodError). Saya pikir itu adalah metode result_row. Terima kasih banyak. - person djangodev   schedule 11.09.2018search_results = browser.divs(class: 'results_row', 'results_subrow').map(&:text) csv << search_results
- person djangodev   schedule 11.09.2018#divs
membuat kumpulan elemen yang dapat Anda ulangi melalui pemeriksaan. Misalnya, mendapatkan div turunan adalah:browser.divs(class: 'results_row').map { |parent_div| parent_div.div(class: 'results_subrow').text }
. Hal serupa dapat dilakukan untuk mendapatkan tautan. - person Justin Ko   schedule 11.09.2018