ฉันกำลังพยายามพิมพ์เนื้อหาข้อความของแต่ละ div ของคลาสเฉพาะ: "results_row" ฉันจะค้นหาแต่ละ div ด้วยตัวระบุตำแหน่งอื่นๆ เช่น title และ id หากฉันต้องการข้อความจาก div ทั้งสองนี้ แต่ div นั้นเป็นผลการค้นหาหมายเลขซีเรียลจากอาร์เรย์ ฉันต้องการที่จะพิมพ์ข้อความจากแต่ละ div หลังจากค้นหา เพื่อที่ฉันจะได้วนซ้ำอาร์เรย์ของอนุกรมได้
นี่คือ HTML ของฉัน:
<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="/th/products/fuji/" title="Fuji, Inc.">FUJI</a>
<a href="/th/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="/th/products/fuji/" title="Fuji, Inc. 2">FUJI</a>
<a href="/th/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>
และนี่คือรหัสของฉัน:
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
ฉันจำเป็นต้องเรียก div ทั้งหมดของคลาสนั้นเมื่อฉันกำหนดวิธีการ results_row ก่อนที่จะพิมพ์เพื่อที่จะไม่เพียงแค่คว้า div แรกของคลาสนั้นบนเพจแล้วย้ายไปยังอนุกรมถัดไป ฉันรู้สึกว่ามีวิธีแก้ไขง่ายๆ เช่น การสร้าง div พหูพจน์เมื่อกำหนดวิธีการ results_row results_row = browser.divs(:class => "results_row")
แต่ไม่ได้กำหนดวิธีการไว้
อาจมีวิธีวนซ้ำแต่ละ div ใน div "bodytag" ราวกับว่าพวกมันอยู่ใน ul เพื่อที่ฉันกำลังพิจารณาบางสิ่งเช่นนี้:
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
คือเวลาที่ถูกต้องในการรับคอลเล็กชันของ div ที่ตรงกัน ฉันได้เขียนบางอย่างเกี่ยวกับการค้นหาองค์ประกอบเทียบกับคอลเลกชัน ในหนังสือถ้ามันช่วยได้ - person Justin Ko   schedule 11.09.2018divs
โดยตรง แต่คุณกำลังทำอะไรอยู่ รหัสควรเป็นเช่นputs browser.divs(class: 'results_row').map(&:text)
- person Justin Ko   schedule 11.09.2018block in <main>': undefined method
text' สำหรับ #‹Watir::DivCollection:0x00000005193160› (NoMethodError) ฉันคิดว่ามันเป็นวิธีการ results_row ขอบคุณมาก. - 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
สร้างคอลเลกชันขององค์ประกอบที่คุณสามารถวนซ้ำในการตรวจสอบ ตัวอย่างเช่น การรับ div ลูกจะเป็น:browser.divs(class: 'results_row').map { |parent_div| parent_div.div(class: 'results_subrow').text }
ที่คล้ายกันสามารถทำได้เพื่อรับลิงค์ - person Justin Ko   schedule 11.09.2018