以前、本連載ではSeleniumを使ってブラウザを自動操縦する方法を紹介した。とても便利だがブラウザごとのドライバが必要でセットアップが面倒という側面もあった。しかし最近では自動インストールの方法が確立されて便利になった。そこで改めてブラウザの自動操縦を試してみよう。
Seleniumについて
SeleniumとはWebブラウザを自動操縦するためのライブラリだ。もともとブラウザを使って自動テストを行うためのライブラリだが、今ではWeb巡回(クローリング)からデータ抽出(スクレイピング)までいろいろな自動処理に使われている。
Seleniumで可能なのは次のような処理だ。
- ブラウザを自動操縦して任意のページを表示する
- ページ内の任意の要素を抽出する(id属性やclass属性、CSSセレクタで抽出できる)
- ページのスクリーンショットが取得できる
- 表示中のページに対して、JavaScriptを実行できる
- 任意のリンクやボタンをクリックしたり、文字を書き込んだりできる
つまり、ブラウザの大抵の操作を自動化できるのだ。
これを利用して、本連載の49回目と50回目で、クレジットカードや銀行の明細をダウンロードする方法を紹介した。
ブラウザ用のドライバインストールがとても面倒だった
そんな便利なSeleniumだが弱点もあった。上記の連載でも注意書きを記述しているが、PCにインストールされているブラウザのバージョンとインストールしたSelenium用のドライバが少しでも違うとエラーが出る。そのため、プログラムの実行前に、ブラウザの詳細なバージョンを確認し、それに応じたドライバを探してインストールするという作業が必要だったのだ。
ブラウザは定期的に自動アップデートするものなので、数日前には動いたのに今日は動かないということが多く起きており面倒に感じていた。
webdriver-managerのインストール
このドライバのインストールが面倒という問題に対処するために、「webdriver-manager」というパッケージが登場した。一度、webdriver-managerをインストールしておけば、自動的に利用中のブラウザバージョンを確認して必要なドライバをインストールしてくれる。これは非常に便利だ。
そのため、Seleniumをインストールするときに、webdriver-managerも一緒にインストールしてしまうと良いだろう。ターミナル(WindowsならPowerShell、macOSならターミナル.app)を起動して、次のコマンドを実行するとインストールできる(Windowsの場合は、python3のところをpythonと読み替えてください)。
$ python3 -m pip install -U selenium webdriver-manager
Google検索を自動でためしてみよう
なお、今回はブラウザのGoogle Chromeを利用してみよう。
簡単な利用例として、Googleで「python」を検索してその画面のスクリーンショットを撮影するプログラムを作ってみた。以下のプログラムを「hello_selenium.py」という名前で保存しよう。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
import time, os
# Chromeを起動 --- (*1)
driver = webdriver.Chrome(
service=ChromeService(ChromeDriverManager().install()))
# Google検索を行う--- (*2)
driver.get('https://google.com/search?q=python')
time.sleep(1)
# スクリーンショットを保存 --- (*3)
driver.save_screenshot('test.png')
time.sleep(60)
# ブラウザを閉じる
driver.close()
プログラムを実行するには、ターミナルで以下のコマンドを実行する。
$ python3 hello_selenium.py
すると、次のようにChromeを起動して、Googleで検索を行ってスクリーンショットを撮影する。
プログラムを確認しよう。(*1)の部分では、Chromeを起動する。もしもChromeのためのドライバがインストールされていなければ、ここで自動でドライバをインストールしてから実行してくれる。
(*2)では「python」という語句をGoogle検索を行うページを表示する。
(*3)ではスクリーンショットを撮影してファイル「test.png」に保存する。
ブラウザを自動操縦して画像を丸ごとダウンロードしよう
なお、せっかくブラウザの自動化処理なので、ページ内にある画像を丸ごとダウンロードするプログラムを作ってみよう。以下のプログラムを「download.py」という名前で保存しよう。