Selenium でブラウザ操作の自動化
Python の Selenium パッケージを使って、WEBブラウザ操作の自動化をできるようにしてみました。Webアプリ開発のテストの自動化などに役立てそうです。動作環境はmacOSで、Selenium を PyCharm の venv環境で使用していきます。
PyCharmで新しいプロジェクトを作成
- PyCharmを起動し、「New Project」を選択します。
- プロジェクト名を入力し、Python interpreterの設定で「New environment using Virtualenv」を選択します。
- 「Create」をクリックします。
venv環境にSeleniumをインストール
PyCharmでターミナルを開き、以下のコマンドを実行してSeleniumをインストールします。
bash
pip install selenium
ChromeDriverのダウンロードと設定
Chrome for Testing availability
- ChromeDriverの最新版を公式サイトからダウンロードします。
- ダウンロードしたzipファイルを解凍し、適当なディレクトリに保存します(例:/usr/local/bin)。
- ターミナルを開き、以下のコマンドでChromeDriverのパスを通します。
bash
sudo mv chromedriver /usr/local/bin/
sudo chmod +x /usr/local/bin/chromedriver
PyCharmでSeleniumのサンプルコードを実行
- PyCharmで新しいPythonファイル(例:test_selenium.py)を作成します。
- 以下のサンプルコードをファイルに貼り付けます。
python
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# ChromeDriverのパス
driver_path = '/usr/local/bin/chromedriver'
# サービスオブジェクトを作成(詳細ログを有効にする)
service = Service(driver_path)
options = webdriver.ChromeOptions()
options.add_argument('--log-level=ALL')
# ChromeDriverの設定
driver = webdriver.Chrome(service=service, options=options)
# 任意のページにアクセス
driver.get('http://127.0.0.1:8700')
try:
# ページ上のすべての要素が読み込まれるまで待機
WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located
)
print("test1 start")
# JavaScriptを使ってクリック
driver.execute_script("document.querySelectorAll('a')[0].click();")
time.sleep(0.5)
print("test1 done")
driver.execute_script("window.history.back();")
time.sleep(0.5)
print("test2 start")
# JavaScriptを使ってクリック
driver.execute_script("document.querySelectorAll('a')[1].click();")
time.sleep(0.5)
print("test2 done")
driver.execute_script("window.history.back();")
time.sleep(0.5)
except Exception as e:
print(f"Error: {e}")
time.sleep(1)
# ブラウザを閉じる
driver.quit()
PyCharmでファイルを右クリックし、「Run 'test_selenium'」を選択して実行します。
以上で、Seleniumを使用してJavaScriptを実行するまでの環境構築とサンプルコードの実行が完了です。
ボタンイベントなどを実行する方法はいろいろありますが、上のソースコードのようにJavaScriptで実行させるのが、わかりやすいかなと思いました。