2012-08-02 23 views
0

我試圖在Chrome瀏覽器中使用watir-webdriver瀏覽一組網站,但我總是在某些網站上遇到錯誤。最近,我遇到了http://adage.com這個問題。直到它到達http://adage.com循環將完全執行,然後它會掛起,直到顯示以下錯誤:使用watir-webdriver循環瀏覽一組網址時跳過較慢的網站

/Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/protocol.rb:146:in `rescue in rbuf_fill': Timeout::Error (Timeout::Error) 
from /Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/protocol.rb:140:in `rbuf_fill' 
from /Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil' 
from /Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/protocol.rb:132:in `readline' 
from /Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line' 
from /Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:2551:in `read_new' 
from /Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:1319:in `block in transport_request' 
from /Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:1316:in `catch' 
from /Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:1316:in `transport_request' 
from /Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:1293:in `request' 
from /Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:1286:in `block in request' 
from /Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:745:in `start' 
from /Users/default/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:1284:in `request' 
from /Users/default/.rvm/gems/ruby-1.9.3-p125/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:82:in `response_for' 
from /Users/default/.rvm/gems/ruby-1.9.3-p125/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:38:in `request' 
from /Users/default/.rvm/gems/ruby-1.9.3-p125/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call' 
from /Users/default/.rvm/gems/ruby-1.9.3-p125/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:598:in `raw_execute' 
from /Users/default/.rvm/gems/ruby-1.9.3-p125/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:576:in `execute' 
from /Users/default/.rvm/gems/ruby-1.9.3-p125/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:536:in `getActiveElement' 
from /Users/default/.rvm/gems/ruby-1.9.3-p125/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/common/target_locator.rb:60:in `active_element' 
from /Users/default/.rvm/gems/ruby-1.9.3-p125/gems/watir-webdriver-0.6.1/lib/watir-webdriver/browser.rb:136:in `send_keys' 
from /Users/default/Dropbox/beta_scripts/loop_test.rb:16:in `rescue in <main>' 
from /Users/default/Dropbox/beta_scripts/loop_test.rb:11:in `<main>' 

我不知道如何來避免這種情況。我試圖設置超時,甚至在救援期間發送ESC鍵以阻止Chrome加載頁面,但沒有取得任何成功。最終,我希望能夠可靠地連續加載500多個網站的陣列,但這似乎是不可能的,因爲其中一個網站可能會掛起。 有什麼辦法可以阻止加載緩慢的頁面並移動到數組中的下一個元素?

下面是我的代碼縮短版來隔離問題:

#!/usr/bin/env ruby 

require 'watir-webdriver' 

b = Watir::Browser.new :chrome 

sites = ["twitter.com", "cars.com", "autotrader.com", "rolex.com", "newyorker.com", "adage.com", "theatlantic.com", "pcmag.com"] 

sites.each do |uri| 
    begin 
    Timeout::timeout(10) do 
     b.goto uri 
    end 
    rescue Timeout::Error => e_time 
    sleep 5 
    b.send_keys :escape 
    p "#{uri} is taking forever to load (#{e_time})" 
    rescue Exception => e_exception 
    p e_exception 
    end 
end 

b.close 
+0

我不明白蟒蛇,但估計這樣的網站加載時間可能不是好主意。我之所以這麼說是因爲一些頁面有複雜的頁面加載Ajax請求,即使主站點已經完成加載,也需要花費時間來完成。可能使用不穩定版本的Firefox功能可能會對您有所幫助。 – iMatoria 2012-08-02 09:08:51

+0

它不是python;它是紅寶石.. – 2012-08-02 09:31:53

+0

增加你的超時時間,並嘗試。 – Santoshsarma 2012-08-02 14:26:39

回答

0

嗯,我能理解你的無奈隊友,因爲我與硒的webdriver打交道時也遇到同樣的。在這裏,您需要做的就是100%確保您的腳本將運行完美無缺,直到500多個網站結束。

sites.each do |uri|  
!30.times { if ((b.goto uri)rescue false)then break else sleep 1; end }  
    end  

上面的代碼將嘗試訪問每個網站最多30秒,然後移動到下一個網站。

+0

你的代碼在執行時似乎會引發錯誤。我清理了它(使'Rescue'小寫,並在'rescue'之前移動了最終的'end'語句),但它似乎仍然不起作用。雖然我在訪問adage.com時沒有得到上述錯誤,但Chrome仍然無限期地掛起,watir-webdriver不會移動到陣列中的下一個項目。有任何想法嗎? – ARP 2012-08-02 15:52:39

+0

我拿回來,我仍然有上面的錯誤。它花費了很多很多時間。 – ARP 2012-08-02 16:02:21

+0

那麼這個代碼是爲硒webdriver工作..我試圖將它轉換爲相當於Watir ..它應該是非常接近的東西.. ..我再試一次.. – 2012-08-03 09:20:06