Python selenium ライブラリ
Selenium は Web ブラウザ操作を自動化するための強力なツールであり、Web アプリケーションのテスト、Web ページのデータ収集、タスクの自動化などのシナリオで広く使用されています。
Selenium はさまざまなプログラミング言語向けに API を提供しており、テストに使用されます。現在の公式 API ドキュメントは C#、JavaScript、Java、Python、Ruby に対応しています。
Selenium チュートリアル:https://www.example.com/selenium/
Selenium と WebDriver のインストール
Selenium のインストール
Selenium を使い始めるには、まず selenium ライブラリをインストールし、お使いのブラウザに対応する WebDriver をダウンロードする必要があります。
pip を使用して Selenium をインストールします:
pip install selenium
インストールが完了したら、以下のコマンドで selenium のバージョン情報を確認できます:
pip show selenium
Python コードを使用して確認することもできます:
import selenium print(selenium.__version__)
WebDriver のダウンロード
Selenium はブラウザとやり取りするために WebDriver が必要です。
ブラウザによって必要な WebDriver は異なります。たとえば、Chrome ブラウザには ChromeDriver が必要です。使用しているブラウザに応じて対応する WebDriver をダウンロードし、それがシステムの PATH に含まれていることを確認してください。
- Chrome: ChromeDriver
- Firefox: GeckoDriver
- Edge: EdgeDriver
- Safari: SafariDriver
ブラウザを選択し、WebDriver を初期化します:
例
# Chrome ブラウザを使用
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
# または Firefox ブラウザを使用
# driver = webdriver.Firefox(executable_path='/path/to/geckodriver')
# または Edge ブラウザを使用
# driver = webdriver.Edge(executable_path='/path/to/msedgedriver')
Selenium 4 以降、ブラウザドライバの管理方法が変更されました。Selenium 4 はシステムにインストールされているブラウザのバージョンを自動検出し、対応するドライバをダウンロードしようとします。つまり、特定のバージョンのドライバが必要でない限り、ユーザーは手動でドライバをダウンロードしてパスを設定する必要がなくなります。
例
driver = webdriver.Chrome() # 他のブラウザ(Firefox など)を使用する場合は、それに応じて変更する必要があります
国内のネットワーク環境では、自動検出によるドライバのダウンロードには別のネットワーク環境が必要となるため、手動でドライバをダウンロードし、ドライバのパスを指定することをお勧めします。
Selenium 4 では、webdriver.Chrome で直接ドライバのパスを設定するのではなく、Service オブジェクトを導入して設定します。これにより、非推奨の警告を回避し、ドライバが正しく読み込まれることを確認できます。例:
例
from selenium.webdriver.chrome.service import Service as ChromeService
service = ChromeService(executable_path="PATH_TO_DRIVER")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
次のコードは、ドライバファイルのパスを指定して Web ページのタイトルを取得します:
例
from selenium.webdriver.chrome.service import Service as ChromeService
# 正しいドライバのパスを設定
service = ChromeService(executable_path="/サンプル/Downloads/chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ウェブサイトを開く
driver.get("https://cn.bing.com")
# ページタイトルを取得
print(driver.title)
# ブラウザを閉じる
driver.quit()
基本的な使い方
WebDriver の初期化
ブラウザを選択し、WebDriver を初期化します:
例
# Chrome ブラウザを使用
driver = webdriver.Chrome()
# または Firefox ブラウザを使用
# driver = webdriver.Firefox()
# または Edge ブラウザを使用
# driver = webdriver.Edge()
Webページを開く
get() メソッドを使用して Web ページを開きます:
driver.get("https://www.baidu.com")
ページ要素を検索する
ページ要素は、ID、クラス名、タグ名などを使用するなど、さまざまな方法で検索できます:
例
search_box = driver.find_element("id", "kw")
# クラス名で要素を検索
search_button = driver.find_element("class name", "s_ipt")
# タグ名で要素を検索
links = driver.find_elements("tag name", "a")
ユーザー操作をシミュレートする
Selenium は、クリックやテキスト入力など、ブラウザでのユーザー操作をシミュレートできます:
例
search_box.send_keys("Selenium Python")
# 検索ボタンをクリック
search_button.click()
要素の属性とテキストを取得する
ページ要素の属性値やテキスト内容を取得できます:
例
element_text = search_box.text
# 要素の属性値を取得
element_attribute = search_box.get_attribute("placeholder")
待機
ページの読み込みに時間がかかる場合があります。その場合は、明示的待機または暗黙的待機を使用して、要素が操作可能であることを確認できます:
例
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 明示的待機
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "kw"))
)
# 暗黙的待機
driver.implicitly_wait(10)
ブラウザを閉じる
操作が完了したら、ブラウザを閉じることを忘れないでください:
driver.quit()
簡単なWeb自動化
以下は、キーワード検索を自動化し、結果ページのタイトルを取得する簡単な Selenium プロジェクトの例です。
例
from selenium.webdriver.common.by import By # By モジュールをインポート
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# ドライバのパスを設定し、ブラウザを起動
service = ChromeService(executable_path="/サンプル/Downloads/chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
try:
# 百度のホームページを開く
driver.get("https://www.baidu.com")
# 検索ボックスの要素を検索
search_box = driver.find_element(By.ID, "kw")
# 検索内容を入力
search_box.send_keys("Selenium Python")
# 検索フォームを送信
search_box.send_keys(Keys.RETURN)
# 検索結果の読み込みを待機
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "content_left"))
)
# ページタイトルを表示
print("ページタイトルは:", driver.title)
finally:
# ブラウザを閉じる
driver.quit()
selenium のよく使うメソッド
次の表に、selenium ライブラリのよく使うメソッドを示します:
| メソッド | 説明 | サンプルコード |
|---|---|---|
webdriver.Chrome() | Chrome ブラウザインスタンスを初期化します。 | driver = webdriver.Chrome() |
driver.get(url) | 指定された URL アドレスにアクセスします。 | driver.get("https://example.com") |
driver.find_element(By, value) | 最初に一致する要素を検索します。 | element = driver.find_element(By.ID, "id") |
driver.find_elements(By, value) | 一致するすべての要素を検索します。 | elements = driver.find_elements(By.CLASS_NAME, "class") |
element.click() | 要素をクリックします。 | element.click() |
element.send_keys(value) | 入力ボックスにキーボード入力を送信します。 | element.send_keys("text") |
element.text | 要素のテキスト内容を取得します。 | text = element.text |
driver.back() | ブラウザを戻る。 | driver.back() |
driver.forward() | ブラウザを進む。 | driver.forward() |
driver.refresh() | 現在のページを再読み込みします。 | driver.refresh() |
driver.execute_script(script, *args) | JavaScript スクリプトを実行します。 | driver.execute_script("alert('Hello!')") |
driver.switch_to.frame(frame_reference) | 指定された iframe に切り替えます。 | driver.switch_to.frame("frame_id") |
driver.switch_to.default_content() | メインドキュメントに戻ります。 | driver.switch_to.default_content() |
driver.quit() | ブラウザを閉じてドライバを終了します。 | driver.quit() |
driver.close() | 現在のウィンドウを閉じます。 | driver.close() |