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
ただ、ページの指定の場所に一瞬で移動する方法はすぐに見つかるのですが、なかなかゆっくりとスクロールしてくれる処理は見つかりませんでした。
ちなみに、一瞬で移動するコードは下記のコードで実装できます。
1 2 |
#driverはwebdriver.Chrome()などのドライバーです。 driver.execute_script("window.scrollTo(0, 移動したい数字を記入);") |
原理的には、ブラウザ上でJavaScriptを実行して、移動するというものです。
Seleniumでゆっくりスクロールする方法
Photo by Benjamin Smith on Unsplash
一瞬で移動する方法はあるのですが、ゆっくりスクロールする方法が見つからない中色々考えていました。
そこで、ブラウザの高さを取得して、for文を使って下記のコードの「移動したい数字を記入」の部分の数字を動的に変更すれば良いということに気づきました。
1 2 |
#driverはwebdriver.Chrome()などのドライバーです。 driver.execute_script("window.scrollTo(0, 移動したい数字を記入);") |
そこで、実際に使ったコードが下記。
1 2 3 4 5 6 7 8 9 |
def scroll_down( self, driver ): #ページの高さを取得 height = driver.execute_script("return document.body.scrollHeight") #最後までスクロールすると長いので、半分の長さに割る。 height = height // 2 #ループ処理で少しづつ移動 for x in range(1,height): driver.execute_script("window.scrollTo(0, "+str(x)+");") |
コード解説
Photo by Ilya Pavlov on Unsplash
コードの流れとしては、次のような流れになっています。
・ページの高さを取得
・スクロールする長さの調節
・ループ処理で少しづつ移動するようにする。
ページの高さを取得
まずは、ページの全体の高さを取得してループ処理にかけるMaxの値を作成していきます。
ページ全体の高さを取得するには、JavaScriptを使って取得します。
該当箇所は下記のコード。
1 2 |
#ページの高さを取得 height = driver.execute_script("return document.body.scrollHeight") |
スクロールする長さの調節
ページの最後までスクロールすると長いので、長さを半分に割ります。
該当箇所は下記のコード。
1 2 |
#最後までスクロールすると長いので、半分の長さに割る。 height = height // 2 |
ループ処理で少しづつ移動するようにする。
最後に、取得した高さをPythonのfor文のrange部分にセットしてループを回します。
あとは、execute_scriptを使ってJavaScriptのスクロール処理を実行していくことでゆっくりとスクロールするということを実装することができます。
該当箇所は下記のコード。
1 2 3 |
#ループ処理で少しづつ移動 for x in range(1,height): driver.execute_script("window.scrollTo(0, "+str(x)+");") |
スクロールしている時のスピードに関しては、xの値を何かすればおそらく早くできるかもです。
まとめ
今回はPythonとSeleniumを使って、ゆっくりとブラウザ上をスクロールする処理の実装方法を紹介しました。
この記事が僕と同じように、実装方法に悩んでいるあなたの役に立てれば嬉しいです。