2022年10月8日土曜日

Seleniumを導入してChromeとEdgeを自動操作する

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.exechromedriver_105.exe)。

3. Selenium実行用Pythonスクリプトを作成

今回は例として、Chromeにて以下操作を実行するPythonスクリプトを作成した。

  1. ブラウザをシークレットモードで起動しGoogleを表示
  2. ウィンドウを最大化
  3. 「Selenium」を検索
  4. 検索結果の1つ目のURLに遷移
  5. 画面キャプチャ取得
  6. ブラウザを閉じる

以下に実際のスクリプト(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 件のコメント:

コメントを投稿

人気の投稿