我正在使用Capybara(Selenium驅動程序)訪問一些網站上的網頁。我只需點擊數組中的每個項目並點擊返回按鈕。它很好,但每次經過幾次迭代後都會發生。 這裏是代碼:/usr/lib/ruby/1.9.1/net/protocol.rb:146:in`rescue in rbuf_fill':Timeout :: Error(Timeout :: Error)
all(:xpath, '//table[@class="griglia_bordata"]//tr[td]/td/a[1]').each do |a|
a_js_functions << a[:href]
end
a_js_functions.each do |js_for_model|
puts js_for_model
page.execute_script js_for_model
find(:xpath, "//a[text()='Check availability']").click
puts find(".testo_grande_blu_B").text
puts "--------------------------------------------"
find(:xpath, "//a[text()='Back']").click
end
我有輸出:
的javascript:selectModel( '130254')風格:RB2132 -------------- ------------------------------ javascript:selectModel('309257')風格:RB2140 -------- ------------------------------------ javascript:selectModel('68238')風格:RB3016 - ------------------------------------------ javascript:selectModel('68248')風格:RB3025 -------------------------------------------- javascript: selectModel('68293')風格:RB3026 -------------------------------------------- javascript:selectModel(' 68320')風格:RB3044 ------------------------------------------- - javascript:selectModel('68460') /usr/lib/ruby/1.9.1/net/protocol.rb:146:in
rescue in rbuf_fill': Timeout::Error (Timeout::Error) from /usr/lib/ruby/1.9.1/net/protocol.rb:140:in
rbuf_fill'from /usr/lib/ruby/1.9.1/net/protocol。 rb:122:inreaduntil' from /usr/lib/ruby/1.9.1/net/protocol.rb:132:in
readline'from /usr/lib/ruby/1.9.1/net/http.rb:2562:inread_status_line' from /usr/lib/ruby/1.9.1/net/http.rb:2551:in
read_new'from /usr/lib/ruby/1.9.1/net/http。 rb:1319:在block in transport_request' from /usr/lib/ruby/1.9.1/net/http.rb:1316:in
catch'from /usr/lib/ruby/1.9.1/net/http.rb:1316:intransport_request' from /usr/lib/ruby/1.9.1/net/http.rb:1293:in
請求'from /usr/lib/ruby/1.9.1/net/http。 rb:1286:在block in request' from /usr/lib/ruby/1.9.1/net/http.rb:745:in
開始'從 /usr/lib/ruby/1.9.1/net /http.rb:1284:inrequest' from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:82:in
response_for'from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:38:在request' from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:40:in
呼叫從 '從 /var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:598:inraw_execute' from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:576:in
執行'/ var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:554:infind_elements_by' from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/common/search_context.rb:62:in
find_elements'from /var/lib/gems/1.9。 1/gems/capybara-1.1.2/lib/capybara/selenium/driver.rb:52:infind' from /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:158:in
find_in_base'from /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/水豚/節點/ finders.rb:137:在 每個 '從 /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:136:in在查找first' from /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:27:in
塊' 從 的/ var/lib中block in first' from /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:136:in
/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/base.rb:46:inwait_until' from /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:27:in
find'from(eval):2:infind' from /var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/dsl.rb:161:in
find'from /home/biske /工作區/ ScrapingGlasses/lib中/ luxottica.rb:39:在block in scrape' from /home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:36:in
每個「從/home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:36:inscrape' from /home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:12:in
圍棋 從/家/ biske /工作區/ ScrapingGlasses /lib/luxottica.rb:48:in `'
這不是第一例,因爲我不使用這些寶石。 我會嘗試第二種解決方案。 –
我已將Selenium的代碼樣本更新爲Capybara。 Typhoues,Excon&Faraday與WebMock&FakeWeb有一些相似之處。你在使用這些嗎? – tgf
有人指出,重新同步的東西是沒有必要的,可能會導致問題取決於您正在運行的版本。 https://github.com/jnicklas/capybara/issues/717 – tgf