kakashi-blog・カカシブログ・

Python備忘録を書きドローンやバイクなど好きな事で生きて行こうとしているブログ

Python

Seleniumの使い方入門|ブラウザを開いてスクロールする

投稿日:2019年11月25日 更新日:

Pythonでウェブブラウザを動かしてみたいと思い、Seleniumというライブラリを使ってみました。この記事では、Chromeを自動で開いて、ページを一番下までスクロールし、また一番上に戻るところまでやってみます。

結論から言うと、pip install selenium でインストールし、webdriver.Chrome() でブラウザを開き、ページに Keys.END を送るとスクロール できます。

要点

  • インストールは pip install selenium だけです
  • Selenium 4.6以降は、ChromeDriverを自分でダウンロードしなくても自動で用意してくれます
  • ページの html に Keys.END を送ると一番下へ、Keys.HOME で一番上へ移動します
  • 動きが速すぎて見えないので、time.sleep() で止めると確認しやすいです

1. Seleniumをインストールする

pip install selenium

2. ブラウザのドライバを用意する

Seleniumでブラウザを動かすには、ブラウザごとの「ドライバ」が必要です。今回は、ふだん使い慣れているChromeを使います。

当時(2019年)は、自分のChromeのバージョンを確認して、合うChromeDriverをダウンロードする必要がありました。今は、Selenium 4.6以降に入っている「Selenium Manager」が自動でドライバを用意してくれるので、この手順はいりません。

3. ブラウザを開く

動作確認もかねて、ブラウザを開いてみます。

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.google.com/')

この3行を動かすと、Chromeが立ち上がります。

Seleniumで起動したChrome。「Chromeは自動テストソフトウェアによって制御されています」の表示

よく見ると「Chromeは自動テスト ソフトウェアによって制御されています。」と書いてあります。人の手で立ち上げたときは、この文字は出ません。これだけで、なんだかワクワクしてくるのは私だけでしょうか。

4. 画面をスクロールしてみる

いよいよ操作します。わかりやすいように、ウィキペディアのページを開いてスクロールしてみます。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()
browser.get('https://ja.wikipedia.org/wiki/メインページ')
time.sleep(10)

elem = browser.find_element(By.TAG_NAME, 'html')
elem.send_keys(Keys.END)
time.sleep(5)
elem.send_keys(Keys.HOME)

流れは次のとおりです。

  1. ページを開いてから10秒待つ(time.sleep(10))
  2. ページ全体(html)を選んで、Keys.END で一番下までスクロール
  3. 5秒待ってから、Keys.HOME で一番上に戻る

最初は time.sleep() を入れずに動かしたので、「あれ?スクロールした?」と思いました。速すぎて見えなかっただけです(冗談ではありません)。止める時間を入れると、動きがわかりやすくなります。

このコードは、当時のコードを今のSeleniumの書き方に直したもので、まだ動作を確かめていません。

JavaScriptでスクロールする方法

キーを送る代わりに、JavaScriptでスクロールさせる方法もあります。

browser.execute_script('window.scrollTo(0, document.body.scrollHeight);')  # 一番下へ
browser.execute_script('window.scrollTo(0, 0);')  # 一番上へ

ページによっては、キーを送ってもスクロールしないことがあるので、そのときはこちらを試してみてください。

当時のコードでエラーが出るとき

当時は find_element_by_tag_name('html') と書いていましたが、Selenium 4.3以降ではこの書き方は削除されました。AttributeError が出たら、上のコードのように find_element(By.TAG_NAME, 'html') に直してください。

まとめ

  • pip install selenium でインストールし、webdriver.Chrome() でブラウザを開きます
  • Selenium 4.6以降は、ChromeDriverを自動で用意してくれます
  • html に Keys.END を送ると一番下へ、Keys.HOME で一番上へ移動します
  • キーでスクロールしないときは、execute_script でJavaScriptを使います

次は、ログイン画面にIDとパスワードを自動で入力します。Seleniumで自動ログインする方法に続きます。


退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

-Python
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

関連記事

計算カードをPythonで自作|子供のズル対策アプリ(Tkinter)

うちの小学1年生の子の宿題に「計算カード」があります。学校からは「時間を計ってやりなさい」と言われているようです。 ところが、もちろん計算なんかせず、どれだけ早くめくれるかが目的になってしまっていまし …

PythonでFizzBuzz問題を書く|3通りの書き方と1行コード

プログラミングの入門でよく出てくる「FizzBuzz問題」を、Pythonで書いてみました。 結論から言うと、3で割り切れるか、5で割り切れるか、両方か、を if で分けるだけ です。この記事では、私 …

Tkinterのメッセージボックスで出る謎ウインドウの消し方

Pythonのtkinterでメッセージボックスだけを出したいのに、何もない小さなウインドウ(謎ウインドウ)が一緒に出てきて、処理が止まってしまうことがあります。 結論から言うと、謎ウインドウの正体は …

PythonのPillowで画像処理|切り抜き・回転・リサイズの基本

画像処理というと大げさですが、PythonのPillow(ピロー)を使って、画像を少し操作してみました。 結論から言うと、Image.open() で読み込めば、crop() で切り抜き、rotate …

Python Tkinter入門|ウインドウ・ラベル・入力欄・ボタンの基本

PythonのTkinter(ティーケーインター)を使うと、ボタンや入力欄のある画面(GUI)を作れます。この記事では、ウインドウを開いて、ラベル、テキストの入力欄、ボタンを付けるまでの基本をまとめま …