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 に含まれていることを確認してください。

ブラウザを選択し、WebDriver を初期化します:

例

from selenium import 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 はシステムにインストールされているブラウザのバージョンを自動検出し、対応するドライバをダウンロードしようとします。つまり、特定のバージョンのドライバが必要でない限り、ユーザーは手動でドライバをダウンロードしてパスを設定する必要がなくなります。

例

from selenium import webdriver

driver = webdriver.Chrome()  # 他のブラウザ(Firefox など)を使用する場合は、それに応じて変更する必要があります

国内のネットワーク環境では、自動検出によるドライバのダウンロードには別のネットワーク環境が必要となるため、手動でドライバをダウンロードし、ドライバのパスを指定することをお勧めします。

Selenium 4 では、webdriver.Chrome で直接ドライバのパスを設定するのではなく、Service オブジェクトを導入して設定します。これにより、非推奨の警告を回避し、ドライバが正しく読み込まれることを確認できます。例:

例

from selenium import webdriver
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 import webdriver
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 を初期化します:

例

from selenium import webdriver

# Chrome ブラウザを使用
driver = webdriver.Chrome()

# または Firefox ブラウザを使用
# driver = webdriver.Firefox()

# または Edge ブラウザを使用
# driver = webdriver.Edge()

Webページを開く

get() メソッドを使用して Web ページを開きます:

driver.get("https://www.baidu.com")

ページ要素を検索する

ページ要素は、ID、クラス名、タグ名などを使用するなど、さまざまな方法で検索できます:

例

# 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.common.by import By
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 import webdriver
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()
その他の拡張