プログラミング

【Python】Seleniumでブラウザのゆっくりスクロール【自動化】

テストやスクレイピングの際にSeleniumを利用しています。

しかし、画像の遅延ロードをおこなっている場合に画像を読み込みされるように画像の位置までスクロールする必要がありました。

そのためにSeleniumでブラウザをスクロールさせる方法を調べると南さんという方が公開されていました。

スクロール速度を変更できるように変更したので、コードを共有します。

実装コード

def scroll_down(self, speed):
    # ページの高さを取得
    height = self.browser.execute_script("return document.body.scrollHeight")

    # ループ処理で少しづつ移動
    for i in range(1, height, speed):
        self.browser.execute_script("window.scrollTo(0, " + str(i) + ");")

説明

execute_scriptでJavaScriptを実行することが可能です。

まず、ページの高さを取得します。

# ページの高さを取得
height = self.browser.execute_script("return document.body.scrollHeight")

次にページの高さに到達するまでwindow.scrollToでスクロールを繰り返します。

1回あたりのスクロール量は引数のspeedで設定しています。

speedの数値が大きいほどスクロール速度が早くなります。

# ループ処理で少しづつ移動
    for i in range(1, height, speed):
        self.browser.execute_script("window.scrollTo(0, " + str(i) + ");")

まとめ

Python + Selenium は本当に便利ですね。

以上、ありがとうございました。

POSTED COMMENT

  1. shine より:

    初めまして、こんにちは!有益な情報をありがとうございます。当方はPythonを少しかじった程度の知識しかないのですが、実際にこの記事でスクロールを実装することができました。
    が、しかし1点分からないことがありコメントさせていただきました。
    スクロールする終点の「” + str(i) + “」が何を言ってるのか←(失礼)分からないのですが、これはPythonのエッセンスですかね?

    • ゆゆう より:

      ありがとうござます。
      「” + str(i) + “」の部分はループ中の変数 i を str() で文字列にしてから、
      “window.scrollTo(0, “ と結合しています。
      よって、 i の値が10 だった場合の文字列は
      window.scrollTo(0, 19);
      となります。

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA