15

Webページをスクロールして、ページがスクロールされたときに遅延ロードされるコンテンツを見つけてクリックしようとしています。次のコマンドを使用しています

require 'watir-webdriver'

@browser = Watir::new :firefox
@browser.send_keys :space

FirefoxでWebドライバーを使用していて、ubuntuを使用していますが、機能していません。次のrubyコードでは、:idを持つ要素が見つからなくなるまで、ページを下にスクロールしようとしています。要素は遅延してロードされています。数秒後にタイムアウトが発生します。次のコードの何が問題になっているのでしょうか。

When /^deal (\d+) is loaded$/ do |id|
  (0..5).each do |click|    
    @browser.send_keys :space
  end
end

watir-driverを使用してページをスクロールする最良の方法は何ですか?

4

7 に答える 7

22

JavaScriptを有効にしている場合は、基になるドライバーにアクセスし、JavaScriptを実行してページをスクロールできます。

@browser.driver.executeScript("window.scrollBy(0,200)")

y軸に沿ってページを200ピクセル下にスクロールします。

メソッドのドキュメントについては、こちらを参照してください。

http://www.w3schools.com/jsref/met_win_scrollby.asp

于 2012-11-28T16:06:49.223 に答える
7

私はこれを支援するために「watir-scroll」と呼ばれる宝石を使用しています。通常はスクロールする場所が必要ですが、座標にもスクロールします。

https://github.com/p0deje/watir-scrollWatirv6.16 のgemwatir-scrollがにマージされてからwatir

特定の要素までスクロールできます

button1 = @browser.input(:class => "mileage_rate")
@browser.scroll.to button1

または、上部中央または中央までスクロールします

@browser.scroll.to :top
@browser.scroll.to :center
@browser.scroll.to :bottom

または座標までスクロールします

browser.scroll.to [0, 200]
于 2015-01-07T22:46:22.147 に答える
4

これは私にたくさんの時間を節約しました:

browser.div(:id => 'start-date-holder').wd.location_once_scrolled_into_view 
于 2016-08-04T16:46:36.103 に答える
2

申し訳ありませんが、私はここで新しく、まだ十分な担当者がいないため、最後の回答にコメントできませんでした。新しい回答を作成しました。とにかく、誰かが複数回スクロールすることに問題がある場合は、これを試してください(ループを追加してスリープします):

maximum_times_needed = max # of times you need the page to scroll down

maximum_times_needed.each do
@browser.driver.executeScript("window.scrollBy(0,200)")
sleep 0.15
end

0.15ページの読み込みにかかる時間によって異なる場合があります。 0.15は0.15秒なので、必要に応じて調整して、ページが読み込まれるのに十分な時間を確保します。200は、より大きなピクセル量に調整する必要がある場合もあります。

于 2015-01-06T18:39:50.947 に答える
1
    300.times do
      @browser.driver.execute_script("window.scrollBy(0,200)")
      sleep 0.05
    end
于 2020-03-20T07:47:21.987 に答える
0

基盤となるドライバーにアクセスして、JavaScriptを実行できます。たとえば、ページの一番下までスクロールしたい場合は、

@browser.driver.execute_script( "window.scrollBy(0,document.body.scrollHeight)" )  

これは、y軸でページの一番下までスクロールします。

于 2017-04-17T00:17:53.230 に答える
0

できます

evaluate_script("document.getElementsByTagName('body')[0].scrollTop=0;")
于 2017-06-07T07:59:46.393 に答える