2017-11-15 10 views
1

私はWatirとChrome Headlessを使ってHTMLページからテキストを取り出すレールアプリを書いています。これまでのすべての良い!.gotoを非ブロック化する方法を教えてください。

この問題は、ロード時間が長いページを要求して、私がそれらを必要としないにもかかわらず、すべて要素を完全にロードするように要求したときに始まります。私が使用

現在のコード:

browser = Watir::Browser.new :chrome, headless: true 

browser.goto(url) 

.goto関数呼び出しは、しかし、ブロックはすべての要素までロードされています。それは私が必要とするものではありません - 私が必要なのは、単にページを取得してから、コードを実行し続けることです。必要なテキストが存在するまで待ってからフェッチします。

アイデア?

答えて

1

ページ移動時間が60秒を超えると、ジャンプがエラーをスローします。また、Watir.default_timeoutはGotoのページの読み込みとは関係ありません。ワチールはその

のための任意のsystax以下のコードを書いて、あなたが望むものを達成できるを提供していないので、私は以下の行ったようにあなたが直接呼び出しセレンドライバによって行うことができますPage_Loadのためのタイミングを設定する必要が

begin 
    b.driver.manage.timeouts.page_load=5 
    b=Watir::Browser.new 
    b.goto(url) 
rescue   #I have written the rescue block here because goto will the error for you If page is not loaded within a given time 
end 

、あなたはここにコードのあなたの残りの部分を書くことができTHEN、例えば、

puts b.span(text: 'something').text 

。ここで何が起こる、後藤はその後5秒間後藤続くコードの実行をブロックし、なりますレスキューブロックに入るので、progra mは期待通りに次の行を実行し続けます。

1

新しいw3c webdriver仕様では、ページ読み込み戦略を「なし」に設定できます。 https://w3c.github.io/webdriver/webdriver-spec.html#navigation

FirefoxとIEのみがこれを既に実装している可能性があります。

+1

あなたの答えは明らかに正しいものですが、悲しいことにクロムドライバはこれをまだサポートしていません。 Rajの回避策は明らかにベストプラクティスではありませんが、Chromeを使いながら達成したいことを達成することができます。うまくいけば、Chromiumチームは今後これを解決し、よりクリーンな負荷戦略オプションを使用できます。 –

関連する問題