Webアプリケーションのテスト自動化のツールとして、Seleniumがある。これはWebブラウザの操作限定ではあるが、RPAツールのようにブラウザの操作自動化が可能となる。
今回は、Seleniumの導入手順と簡単な自動操作を行うPythonスクリプトを作成したので紹介する。
環境
今回はWindows環境に導入済みのPythonを用いてSeleniumを実行させる。ブラウザはChromeとEdgeの2種類を利用する。
- OS : Windows Server 2022
- Python : 3.10.6
- Chrome : バージョン: 105.0.5195.102(Official Build) (64 ビット)
- Edge : バージョン 105.0.1343.33 (公式ビルド) (64 ビット)
Selenium導入手順
1. pip
にてSeleniumを導入
作業はすべてPowerShellのコンソールにて実施する。Seleniumはpip
にてすぐにインストールできる。
PS> pip install selenium
Collecting selenium
Downloading selenium-4.4.0-py3-none-any.whl (985 kB)
---------------------------------------- 985.8/985.8 kB 20.8 MB/s eta 0:00:00
Collecting urllib3[secure,socks]~=1.26
Downloading urllib3-1.26.11-py2.py3-none-any.whl (139 kB)
---------------------------------------- 139.9/139.9 kB ? eta 0:00:00
~(中略)~
Collecting h11<1,>=0.9.0
Downloading h11-0.13.0-py3-none-any.whl (58 kB)
---------------------------------------- 58.2/58.2 kB ? eta 0:00:00
Installing collected packages: sortedcontainers, urllib3, sniffio, PySocks, pycparser, idna, h11, certifi, attrs, async-generator, wsproto, outcome, cffi, trio, cryptography, trio-websocket, pyOpenSSL, selenium
Successfully installed PySocks-1.7.1 async-generator-1.10 attrs-22.1.0 certifi-2022.6.15 cffi-1.15.1 cryptography-37.0.4 h11-0.13.0 idna-3.3 outcome-1.2.0 pyOpenSSL-22.0.0 pycparser-2.21 selenium-4.4.0 sniffio-1.2.0 sortedcontainers-2.4.0 trio-0.21.0 trio-websocket-0.9.2 urllib3-1.26.11 wsproto-1.1.0
2. ブラウザ操作用のWebDriverのプログラムをダウンロード
Seleniumはブラウザに対してWebDriverと呼ばれるプログラムを経由して操作を行う。WebDriverはブラウザごとに異なるプログラムが提供されている。今回はChromeとEdgeの2パターンで試すことにする。
ChromeとEdgeのWebDriverは以下URLからダウンロードできる。操作対象のブラウザとWebDriverのバージョンは一致したものをダウンロードしよう。あまりにもバージョンの差異があると実行に失敗するようだ。
操作対象ブラウザ | ダウンロードURL | ダウンロードファイル名 | WebDriverファイル名 |
---|---|---|---|
Chrome | ChromeDriver - WebDriver for Chrome - Downloads | chromedriver_win32.zip |
chromedriver.exe |
Edge | Microsoft Edge WebDriver - Microsoft Edge Developer | edgedriver_win64.zip |
msedgedriver.exe |
ブラウザのバージョン確認はPowerShellなどでも確認可能だが、GUIから確認した方が手っ取り早い。Chromeであれば「ヘルプ」の「Google Chromeについて」から確認できる。
図021
また、ダウンロードしたWebDriverのバージョンはファイルのプロパティから確認することができるが、都度確認するのも面倒なのでバージョンがすぐに判別できるようファイル名を変更しておくのもよいだろう(例:chromedriver.exe
→chromedriver_105.exe
)。
3. Selenium実行用Pythonスクリプトを作成
今回は例として、Chromeにて以下操作を実行するPythonスクリプトを作成した。
- ブラウザをシークレットモードで起動しGoogleを表示
- ウィンドウを最大化
- 「Selenium」を検索
- 検索結果の1つ目のURLに遷移
- 画面キャプチャ取得
- ブラウザを閉じる
以下に実際のスクリプト(selenium_google.py
)を記載する。いくつかポイントを記載する。
- 今回はChromeで実行できるよう作成したが、Edgeで実行する場合は、「Chromeの場合」の個所をコメントアウトし、「Edgeの場合」の個所をアンコメントすれば動作する。
- ブラウザで操作する要素を検索するため、XPath (XML Path Language)と呼ばれる表記方法を用いてる。スクリプトに記述するXPathの調査方法については後述する。
- 画面遷移が完了するよりも前にスクリプトの検索が動作する場合、対象の要素が見つからずに処理が失敗することがある。そのため、要素が見つからない場合でも各処理ごとに待機するよう
driver.implicitly_wait(10)
を設定する。これによって要素が見つかるまで、最大10秒間待機することができる。
import time
from selenium import webdriver
# Chromeの場合
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
# Edgeの場合
# from selenium.webdriver.edge.service import Service
# from selenium.webdriver.edge.options import Options
# 接続先URL
url = "https://www.google.co.jp/"
# 1. ブラウザをシークレットモードで起動しGoogleを表示
options = Options()
# Chromeの場合
options.add_argument('--incognito')
driver = webdriver.Edge(service=Service('chromedriver_105.exe'), options=options) # Chrome Driver
# Edgeの場合
# options.add_argument('--inprivate')
# driver = webdriver.Edge(service=Service('msedgedriver.exe'), options=options) # Edge Driver
driver.implicitly_wait(10) # 待機時間の設定(秒)
driver.get(url) # URLを開く
# 2. ウィンドウを最大化
driver.maximize_window()
# 3. 「Selenium」を検索
driver.find_element("xpath", '/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input').send_keys("Selenium") # 検索ワードを入力
driver.find_element("xpath", '/html/body/div[1]/div[3]/form/div[1]/div[1]/div[3]/center/input[1]').click() # [Google検索]ボタンをクリック
# 4. 検索結果の1つ目のURLに遷移
driver.find_element("xpath", '//*[@id="rso"]/div[1]/div/div/div[1]/div/a/h3').click() # 検索結果の1つ目をクリック
# 5. 画面キャプチャ取得
driver.save_screenshot("c:\\work\\selenium_google.png")
# 6. ブラウザを閉じる
driver.quit()
4. Selenuimを実行
先ほど作成したPythonスクリプトとWebDriverの実行ファイルを同一フォルダに配置し以下コマンドにて実行すれば、自動でブラウザが起動し操作が実行される。
PS> python.exe .\selenium_google.py
なお、Seleniumで実行した場合、「Chromeは自動テスト ソフトウェアによって制御されています。」と画面上部に表示される。
以上で、Seleniumの導入手順とスクリプトの説明は完了となる。
XPathの調査方法
Seleniumで操作対象の要素を検索する際に利用するXPathの調査方法を以下に記載する。
1. ブラウザの開発者ツールを起動
ChromeやEdgeにて操作対象のURLを開き、「F12」キーを押して開発者ツールを起動する。
2. 操作対象の要素を特定
Chromeの場合は、操作対象の要素(今回はGoogleの検索キーワードを入力欄)を右クリックし、「検証」をクリックする。Edgeの場合は、「開発者ツールで調査する」をクリックする。すると、開発者ツールにて対象の要素がハイライトされる。
3. 開発者ツールでXPathをコピー
開発者ツールで特定した要素を右クリックし「Copy」→「Copy XPath」を選択すると、クリップボードにXPathの内容がコピーされる。
以上で、XPathの調査方法の説明は完了となる。
更新履歴
- 2022/10/8 待機処理を
driver.implicitly_wait(10)
の処理に変更
0 件のコメント:
コメントを投稿