2012-03-11 31 views
2

我試圖使用DOM檢查器來查找this page底部的「更多」按鈕的ID,以顯示更多結果。使用DOM檢查器查找按鈕的編號

我試圖做這樣的事情例如:

require 'watir-webdriver' 

b = Watir::Browser.new 
b.goto 'svpply.com/editors_pick' 

#count products 
puts b.elements(:xpath => '//li[@data-class="Product"]').count 
#=> 30 

#Now click button 
show_all = b.button(:id => "btn_all") 
show_all.click 
sleep 4 

#count products again 
puts b.elements(:xpath => '//li[@data-class="Product"]').count 
#=>60 

但是,我對如何搜索DOM結構中的特定ID不清楚。有人可以解釋屬性,元素,ID和節點之間的區別嗎?

回答

2

使用DOM督察更多按鈕:

  1. 打開DOM查看器(按Ctrl + Shift + I)
  2. 點擊[詳細]按鈕你想檢查
  3. 在DOM Inspector欄的右邊,點擊[HTML]按鈕
  4. 這應該顯示該頁面的HTML,其中將包含[More]控件的詳細信息。你會注意到這個元素實際上是一個DIV而不是一個按鈕。此外,ID的格式爲「_more」。

- >這應該顯示頁面的HTML,它將顯示[More]控件的詳細信息。你會注意到這個元素實際上是一個DIV而不是一個按鈕。此外,ID的格式爲「_more」。

所以做的Quora的網頁你的榜樣,你會做這樣的事情:

require 'watir-webdriver' 

class QuoraPage 
    def initialize(browser) 
     @browser = browser 
    end 

    def goto() 
     @browser.goto 'http://www.quora.com/Startups/best_questions' 
     wait_questions_loaded 
    end 

    def click_more() 
     @browser.div(:id, /_more/).click 
     wait_questions_loaded 
    end 

    def questions_count() 
     @browser.links(:class, 'question_link').count{ |x| x.visible? } 
    end 

    def wait_questions_loaded() 
     begin 
      questions_start_count = questions_count() 
      sleep(2) 
     end while questions_start_count != questions_count() 
    end 
end 

page = QuoraPage.new(Watir::Browser.new :chrome) 
page.goto 
puts page.questions_count 
page.click_more 
puts page.questions_count 

注意,我不得不把睡在像提到anonygoose否則的webdriver掛起。我嘗試了不同的wait_untils,但沒有設法找到有用的東西(除了睡眠不穩定外)。

關於你關於節點,元素等問題,我認爲你最好看看http://www.w3schools.com/dom/default.asp

+0

嗨,謝謝這真的很有幫助。我想知道 - 你是否能夠與睡覺一起工作?我的請求超時,我試着加大睡眠,但我不確定這是否實際上是機器間變量。 – 2012-03-13 03:53:04

+0

奇數。劇本昨天運行良好。我現在也遇到了腳本掛起的問題。我想知道這是否與頁面大小有關。 – 2012-03-13 16:00:39

+0

我很確定超時是由於使用這麼大的頁面。唯一的解決辦法是使用Chrome(通常工作)或切換到Watir(似乎總是工作)。我還更新瞭解決方案,以包含比睡眠更穩定的等待方法。 – 2012-03-13 18:59:04

1

,只要按下svpply您可以使用簡單的

b.button(:text => "Show All").click 

計算所有出現在頁面上的產品按鈕可能與

b.lis(:class => "grab large").count 

這是所有的svpply網站來完成。我無法讓quora自動化,它只能無限期地阻止我的watir-webdriver。

您還需要等待,然後再對產品進行計數。這是可以做到的:

b.wait_until{b.lis(:class => "grab large").count > 30}