私は watir-webdriver を使用していくつかの日常タスクを自動化していますが、最近、完璧に動作するスクリプトが最初に中止されました。browser.goto "webpage" を使用すると、ページの下部にカウンターがあり、カウンター サービスが一時的にダウンしているように見えるため、Web ページが完全に読み込まれません。読み込まれることもあれば、読み込まれないこともあります。そうしないと、必要なすべての html 要素が読み込まれて表示されますが、ページを完全に読み込むことができないため、30 秒後に常にタイムアウト エラーが発生し、Ruby スクリプトが次のエラー メッセージで終了します。
/opt/ruby1.8/lib/ruby/1.8/timeout.rb:64:in `rbuf_fill': execution expired (Timeout::Error)
from /opt/ruby1.8/lib/ruby/1.8/net/protocol.rb:134:in `rbuf_fill'
from /opt/ruby1.8/lib/ruby/1.8/net/protocol.rb:116:in `readuntil'
from /opt/ruby1.8/lib/ruby/1.8/net/protocol.rb:126:in `readline'
from /opt/ruby1.8/lib/ruby/1.8/net/http.rb:2028:in `read_status_line'
from /opt/ruby1.8/lib/ruby/1.8/net/http.rb:2017:in `read_new'
from /opt/ruby1.8/lib/ruby/1.8/net/http.rb:1051:in `request'
from /opt/ruby1.8/lib/ruby/1.8/net/http.rb:1037:in `request'
from /opt/ruby1.8/lib/ruby/1.8/net/http.rb:543:in `start'
from /opt/ruby1.8/lib/ruby/1.8/net/http.rb:1035:in `request'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:82:in `response_for'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:38:in `request'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:598:in `raw_execute'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:576:in `execute'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:99:in `get'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/common/navigation.rb:14:in `to'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/watir-webdriver-0.6.1/lib/watir-webdriver/browser.rb:63:in `goto'
プログラムの終了を回避し、不完全にロードされたページで作業する方法はありますか? 可能であれば、タイムアウト例外処理を意味します。最も重要なのは、Ruby スクリプトが終了せずに続行することです。私はこれを試しましたが、3日間しかRubyプログラマーではないため、うまくいきませんでした:
begin
browser.goto "http://example.com"
rescue Watir::Exception::NavigationException => e #catch the Exception
puts "Page did not load: #{e}"
# program continues from here
end