今回は、PythonでWebページを自動操作する際の手順を紹介します。
ブラウザ自動化のしくみを簡単に解説
「Selenium」とは、ブラウザを自動化するためのフレームワークです。
Pythonのプログラムを実行すると、SeleniumがHTTPリクエストとして受け取ります。Seleniumはフレームワークであり、Pythonのコードに「ブラウザを開く」と書かれていれば、Selenium側でいろいろいい感じに処理してブラウザを開くようにしてくれます。たとえば、
driver = webdriver.Chrome()
と書くだけでChrome用のドライバーがインスタンス化(実際に使える形となる)されます。これがSeleniumフレームワークの役割です。
実際にブラウザを開く際には、「ドライバー」を使います。ドライバーはブラウザごとに用意されており、操作したいブラウザに対応するドライバーが必要となります。
参考:https://www.selenium.dev/ja/documentation/overview/components/
ブラウザ自動化のためにやるべき手順
Webページを自動操作するために必要な手順は以下の通りです。
- Seleniumのインストール
- Webドライバーのインストール
- ブラウザを操作するコードの作成
今回はGoogle Chromeを動かして解説します。なお、自動操作したいブラウザがインストールされていない場合は、以下のリンク先からインストールしてください。
※Windows 10/11 では、Edgeはデフォルトインストールされています
※Windows版Safariは提供が終了しています
Seleniumのインストール
コマンドプロンプトを開き、以下コマンドを実行します。
pip install selenium
色々表示されたあと、以下のように出ていればインストール完了です。
Installing collected packages: selenium
Successfully installed selenium-4.9.1
もし、pipのupgradeが必要と表示された場合は、以下コマンドでpipを更新してから再度実行してください。
pip install --upgrade pip
Webドライバーのインストール
次に、実際にブラウザを操作するために必要なドライバーをインストールします。大枠として、
- 現在のブラウザのバージョンを確認
- ドライバーをインストール
- 適切な場所にインストーラを配置
となります。
現在のブラウザのバージョンを確認
Webドライバーのバージョンは、ブラウザのバージョンと合わせる必要があります。以下の手順にて、現在のバージョンを確認してください。
ブラウザ | 現在のバージョン確認手順 |
---|---|
Google Chrome | 3点マークを押下>ヘルプ>「Google Chromeについて」を押す |
Firefox | 「≡」マークを押下>ヘルプ>「Firefoxについて」を押す |
Microsoft Edge | 3点マークを押下>設定>「Microsoft Edgeについて」を押す |
テスト環境や組織のアカウントなど、意図的にバージョンを指定している以外は最新バージョンになっているかと思います。その場合はWebドライバーも最新のものをインストールすればOKです。
対応するバージョンの調べ方
ブラウザが過去のバージョンになっている場合は、そのバージョンに合わせてWebドライバーをインストールする必要があります。
ブラウザ | 対応するバージョン確認手順 |
---|---|
Google Chrome | ブラウザのバージョン番号に対応 (ブラウザが114.0.xxxなら、ドライバーは114.0.xxx) |
Firefox | ダウンロードページのリリースノート内に記載あり 例)Note that the minimum required Firefox version is 113.0. |
Microsoft Edge | ブラウザのバージョン番号に対応 |
ドライバーのインストール
Chrome Driverのインストール
ChromeDriverのインストール方法は、以下記事にて解説しています。
2種類の方法を解説していますが、初心者の方は「【その2】chromedriver-binaryを使う場合」でインストールを行うことをおすすめします。chromedriver-binaryでインストールした場合は、以降の「適切な場所にインストーラを配置」の手順は不要です。
Firefox Driverのインストール
https://github.com/mozilla/geckodriver/releases を開きます。ご自身の環境に対応したインストーラを選択します。筆者のPCはWin11/64bitなので「geckodriver-v0.33.0-win64.zip」をインストールします。
マシン情報は、スタート(Windowsのアイコン)>設定(右下の歯車)>バージョン情報 で調べることができます。
Microsoft Edge WebDriverのインストール
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/を開きます。ご自身の環境に対応したインストーラを選択します。筆者のPCはWin11/64bitなので「Version: 114.0.1791.0 x64」をインストールします。
マシン情報は、スタート(Windowsのアイコン)>設定(右下の歯車)>バージョン情報 で調べることができます。
適切な場所にインストーラを配置
インストールしたドライバーを、適切な場所に配置します。(chromedriver-binaryでインストールした場合はこの手順は不要です)
システム全体で同じバージョンを使う場合
PythonからSeleniumでドライバーを起動する際、パスが通っている場所に格納すればコード内でパスを明記する必要はありません。
システムのPATH環境変数に含まれる場所は、「C:\Windows\system32」「C:\Windows」「C:\Windows\System32\Wbem」のいずれかです。
プロジェクトごとにドライバーのバージョンを変えたい場合
Pythonのプロジェクトと同じ場所に格納してもOKです。この場合、別のプロジェクトでドライバを使うにはコード内でパスを指定する必要があります。
詳しくはこちらの記事にて解説しています。よく分からない・とりあえず動けば良いという場合は、Pythonプロジェクト内に配置すればOKです。
ブラウザを操作するコードの作成
最後に、ブラウザを操作するコードを作成します。PyCharmやVisual StudioなどのIDEか、VSCodeなどのエディタを使って開発していきます。なお、サンプルコードは「指定したブラウザでGoogleを開いて3秒後に閉じる」という内容です。
Chromeを自動操作する場合
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.google.com/?hl=ja')
time.sleep(3)
driver.close()
chromedriver-binaryでインストールした場合は、冒頭の部分を以下のようにしてください。
from selenium import webdriver
import chromedriver_binary # これを追加
import time
Firefoxを自動操作する場合
Firefoxを自動操作する場合、driverのインスタンス化の部分を
driver = webdriver.Firefox()
に変更すればOKです。
Edgeを自動操作する場合
Edgeを自動操作する場合、driverのインスタンス化の部分を
driver = webdriver.Edge()
に変更すればOKです。
実際に動かしてみる
では、作成したプログラムを実際に動かしてみます。
上記はVisual Studio Codeの画面です。IDEやエディタによって実行手順は異なります。
だいたいは、
- 編集エリア内で右クリック>「実行」「Run」をクリック
- 上部メニューから「実行」「デバッグなしで実行」等をクリック
- 画面上にある再生ボタン(▷マーク)をクリック
のいずれかで実行できるはずです。
Seleniumでブラウザを開いた場合、デフォルトではログアウト状態で起動し、「Chromeは自動テスト ソフトウェアによって制御されています。」と表示されます。
Seleniumでよく使うメソッド一覧
以下記事にて、Seleniumでよく使うメソッドを一覧でまとめています。
ボタンのクリック、要素の取得、キャプチャの撮り方など、ブラウザ操作に関しておさえておくと便利なものを厳選して紹介していますので、是非参考にしてみてください。
まとめ
今回は、PythonでWebページを自動操作する際の手順を紹介しました。どのブラウザを自動操作するにせよ、「Seleniumのインストール ⇒ Webドライバーのインストール ⇒ プログラムの作成・実行」という手順は共通しています。
最近ではPower AutomateなどのRPAツールで自動化を行うケースも増えていますが、テスト自動化や、他者に配布する場合はSeleniumが適しています。
私自身、Power Automate・Seleniumどちらも利用する機会がありますので、また機会があれば記事にして共有したいと思います。
コメント