SeleniumとPythonでゆっくりブラウザのスクロール処理を実装する方法



Photo by Sai Kiran Anagani on Unsplash
こんにちは!
個人開発をしている南です!

今回はPythonとSeleniumを使って、自作のWordPressテーマ「GuildPress」の自動テストでゆっくりとスクロール処理を入れることがあったので、その方法をシェア致します。

ゆっくりのスクロール処理を入れたかった理由


Photo by Meg Nielson on Unsplash

そもそも、スクロールを入れたかった理由については下記の通りです。

ページに鍵をかける処理をしていたけど、ちゃんと鍵が掛かっているかどうかを確認したかったから。

そこで、「selenium python scroll slowly」とかで検索をかけてググって、次のような記事を発見しました。

How can I scroll a web page using selenium webdriver in python?
Slow scrolling down the page using Selenium

ただ、ページの指定の場所に一瞬で移動する方法はすぐに見つかるのですが、なかなかゆっくりとスクロールしてくれる処理は見つかりませんでした。

ちなみに、一瞬で移動するコードは下記のコードで実装できます。

原理的には、ブラウザ上でJavaScriptを実行して、移動するというものです。

Seleniumでゆっくりスクロールする方法



Photo by Benjamin Smith on Unsplash

一瞬で移動する方法はあるのですが、ゆっくりスクロールする方法が見つからない中色々考えていました。

そこで、ブラウザの高さを取得して、for文を使って下記のコードの「移動したい数字を記入」の部分の数字を動的に変更すれば良いということに気づきました。

そこで、実際に使ったコードが下記。

コード解説


Photo by Ilya Pavlov on Unsplash

コードの流れとしては、次のような流れになっています。

・ページの高さを取得
・スクロールする長さの調節
・ループ処理で少しづつ移動するようにする。

ページの高さを取得

まずは、ページの全体の高さを取得してループ処理にかけるMaxの値を作成していきます。

ページ全体の高さを取得するには、JavaScriptを使って取得します。

該当箇所は下記のコード。

スクロールする長さの調節

ページの最後までスクロールすると長いので、長さを半分に割ります。

該当箇所は下記のコード。

ループ処理で少しづつ移動するようにする。

最後に、取得した高さをPythonのfor文のrange部分にセットしてループを回します。

あとは、execute_scriptを使ってJavaScriptのスクロール処理を実行していくことでゆっくりとスクロールするということを実装することができます。

該当箇所は下記のコード。

スクロールしている時のスピードに関しては、xの値を何かすればおそらく早くできるかもです。

まとめ

今回はPythonとSeleniumを使って、ゆっくりとブラウザ上をスクロールする処理の実装方法を紹介しました。

この記事が僕と同じように、実装方法に悩んでいるあなたの役に立てれば嬉しいです。

この記事を書いた人

南 健太郎

1991年生まれ。都内でエンジニアをしています。
このブログでは、個人開発や日々の技術に関する情報などを発信していきます。