Selenium ブラウザ操作
Selenium は Web ページの要素を操作するだけでなく、ウィンドウの管理、ポップアップの処理、Cookies の操作、JavaScript の実行など、ブラウザ自体の動作も制御できます。
以下は、Selenium でよく使われるブラウザ操作とその説明です:
| 操作タイプ | メソッド | 説明 |
|---|---|---|
| 新しいウィンドウを開く | execute_script("window.open('URL');") | JavaScript を使用して新しいウィンドウを開きます。 |
| ウィンドウを切り替える | switch_to.window(window_handle) | 指定されたウィンドウハンドルに切り替えます。 |
| ウィンドウを閉じる | close() | 現在のウィンドウを閉じます。 |
| ウィンドウを最大化する | maximize_window() | ブラウザウィンドウを最大化します。 |
| ウィンドウサイズを設定する | set_window_size(width, height) | ブラウザウィンドウのサイズを設定します。 |
| 全画面モード | fullscreen_window() | ブラウザウィンドウを全画面モードに設定します。 |
| Web ページを開く | get(url) | 指定された URL を開きます。 |
| 進むと戻る | back()とforward() | 前のページに戻るか、次のページに進みます。 |
| ページを更新する | refresh() | 現在のページを更新します。 |
| Alert ポップアップを処理する | switch_to.alert組み合わせaccept() 或 dismiss() | Alert ポップアップを処理し、確認またはキャンセルをクリックします。 |
| Confirm ポップアップを処理する | switch_to.alert組み合わせaccept() 或 dismiss() | Confirm ポップアップを処理し、確認またはキャンセルをクリックします。 |
| Prompt ポップアップを処理する | switch_to.alert組み合わせsend_keys()とaccept() 或 dismiss() | Prompt ポップアップを処理し、テキストを入力して確認またはキャンセルをクリックします。 |
| Cookie を追加する | add_cookie(cookie_dict) | 指定された Cookie を追加します。 |
| Cookie を取得する | get_cookie(name) 或 get_cookies() | 指定された Cookie またはすべての Cookies を取得します。 |
| Cookie を削除する | delete_cookie(name) 或 delete_all_cookies() | 指定された Cookie またはすべての Cookies を削除します。 |
| JavaScript を実行する | execute_script(script) | 指定された JavaScript コードを実行します。 |
| JavaScript の戻り値を取得する | execute_script("return ...") | JavaScript を実行し、結果を返します。 |
| iframe に切り替える | switch_to.frame(iframe_element) | 指定された iframe に切り替えます。 |
| メインページに切り戻す | switch_to.default_content() | メインページに切り戻します。 |
1. ブラウザのポップアップを処理する(alert、confirm、prompt)
Web アプリケーションでは、ポップアップ(alert、confirm、prompt など)は一般的なユーザーインタラクションの方法です。Selenium はAlertクラスを提供して、これらのポップアップを処理します。
1.1 alert ポップアップを処理する
alertポップアップは通常、メッセージを表示するために使用され、ユーザーは「OK」ボタンをクリックして閉じることしかできません。
例
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.alert import Alert
# 正しいドライバのパスを設定
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# Web ページを開く
driver.get("https://example.com")
# alert ポップアップをトリガー
driver.execute_script("alert('これは alert ポップアップです');")
# alert ポップアップに切り替え
alert = Alert(driver)
# ポップアップのテキストを取得
print(alert.text)
# 「OK」ボタンをクリックしてポップアップを閉じる
alert.accept()
# ブラウザを閉じる
driver.quit()
1.2 confirm ポップアップを処理する
confirmポップアップは通常、操作の確認に使用され、ユーザーは「OK」または「キャンセル」を選択できます。
例
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.alert import Alert
# 正しいドライバのパスを設定
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# Web ページを開く
driver.get("https://example.com")
# confirm ポップアップをトリガー
driver.execute_script(confirm('これは confirm ダイアログです');)
# confirm ポップアップに切り替え
alert = Alert(driver)
# ポップアップのテキストを取得
print(alert.text)
# 「OK」ボタンをクリック
alert.accept()
# または「キャンセル」ボタンをクリック
# alert.dismiss()
# ブラウザを閉じる
driver.quit()
1.3 prompt ポップアップを処理する
promptポップアップは通常、ユーザー入力の取得に使用され、ユーザーはテキストを入力して「OK」または「キャンセル」を選択できます。
例
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.alert import Alert
# 正しいドライバのパスを設定
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ブラウザを起動
driver = webdriver.Chrome()
# Web ページを開く
driver.get("https://example.com")
# prompt ポップアップをトリガー
driver.execute_script(prompt('これはプロンプトダイアログです');)
# prompt ポップアップに切り替え
alert = Alert(driver)
# ポップアップのテキストを取得
print(alert.text)
# テキストを入力
alert.send_keys("用户输入")
# 「OK」ボタンをクリック
alert.accept()
# または「キャンセル」ボタンをクリック
# alert.dismiss()
# ブラウザを閉じる
driver.quit()
2. ウィンドウとタブを切り替える
Web アプリケーションでは、ユーザーが複数のウィンドウやタブを開くことがあります。Selenium はswitch_to.window()メソッドを提供して、ウィンドウやタブを切り替えます。
2.1 ウィンドウを切り替える
例
from selenium.webdriver.chrome.service import Service as ChromeService
# 正しいドライバのパスを設定
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 最初のウィンドウを開く
driver.get("https://example.com")
# 2 番目のウィンドウを開く
driver.execute_script("window.open('https://example.org');")
# すべてのウィンドウハンドルを取得
window_handles = driver.window_handles
# 2 番目のウィンドウに切り替え
driver.switch_to.window(window_handles[1])
# 2 番目のウィンドウで操作
print(driver.title)
# 最初のウィンドウに切り替え
driver.switch_to.window(window_handles[0])
# ブラウザを閉じる
driver.quit()
2.2 タブを切り替える
タブの切り替えはウィンドウの切り替えと似ています。各タブは独立したウィンドウハンドルであるためです。
例
from selenium.webdriver.chrome.service import Service as ChromeService
# 正しいドライバのパスを設定
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 最初のタブを開く
driver.get("https://example.com")
# 2 番目のタブを開く
driver.execute_script("window.open('https://example.org');")
# すべてのタブハンドルを取得
tab_handles = driver.window_handles
# 2 番目のタブに切り替え
driver.switch_to.window(tab_handles[1])
# 2 番目のタブで操作
print(driver.title)
# 最初のタブに切り替え
driver.switch_to.window(tab_handles[0])
# ブラウザを閉じる
driver.quit()
3. iframe を処理する
iframeiframe は Web ページに埋め込まれた別の Web ページです。Selenium はswitch_to.frame()メソッドを提供して iframe に切り替えます。
3.1 iframe に切り替える
例
from selenium.webdriver.chrome.service import Service as ChromeService
# 正しいドライバのパスを設定
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# Web ページを開く
driver.get("https://example.com")
# iframe に切り替え
iframe = driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)
# iframe 内で操作
print(driver.page_source)
# メインページに切り替え
driver.switch_to.default_content()
# ブラウザを閉じる
driver.quit()
3.2 メインページに切り戻す
iframe 内での操作が完了したら、switch_to.default_content()メソッドを使用してメインページに切り戻すことができます。
例
driver.switch_to.default_content()
4. ブラウザの Cookies 操作
Selenium はget_cookies()、add_cookie()、delete_cookie()などのメソッドを提供して、ブラウザの Cookies を操作します。
4.1 Cookies を取得する
例
from selenium.webdriver.chrome.service import Service as ChromeService
# 正しいドライバのパスを設定
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# Web ページを開く
driver.get("https://example.com")
# すべての Cookies を取得
cookies = driver.get_cookies()
print(cookies)
# ブラウザを閉じる
driver.quit()
4.2 Cookie を追加する
例
from selenium.webdriver.chrome.service import Service as ChromeService
# 正しいドライバーパスを設定する
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ウェブページを開く
driver.get("https://example.com")
# Cookieを追加する
driver.add_cookie({"name": "test", "value": "123"})
# すべてのCookieを取得する
cookies = driver.get_cookies()
print(cookies)
# ブラウザを閉じる
driver.quit()
4.3 Cookie を削除する
例
from selenium.webdriver.chrome.service import Service as ChromeService
# 正しいドライバーパスを設定する
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ウェブページを開く
driver.get("https://example.com")
# Cookieを追加する
driver.add_cookie({"name": "test", "value": "123"})
# Cookieを削除する
driver.delete_cookie("test")
# すべてのCookieを取得する
cookies = driver.get_cookies()
print(cookies)
# ブラウザを閉じる
driver.quit()
5. JavaScript コードを実行する
Selenium は提供しますexecute_script()JavaScriptコードを実行するためのメソッド。
5.1 JavaScript コードを実行する
例
from selenium.webdriver.chrome.service import Service as ChromeService
# 正しいドライバーパスを設定する
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ウェブページを開く
driver.get("https://example.com")
# JavaScriptコードを実行する
driver.execute_script("alert('これは JavaScript ポップアップです');")
# ブラウザを閉じる
driver.quit()
5.2 JavaScript の戻り値を取得する
例
from selenium.webdriver.chrome.service import Service as ChromeService
# 正しいドライバーパスを設定する
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ウェブページを開く
driver.get("https://example.com")
# JavaScriptコードを実行して戻り値を取得する
result = driver.execute_script("return document.title;")
print(result)
# ブラウザを閉じる
driver.quit()
6. 総合サンプル
以下は、複数のブラウザ操作を使用する方法を示す完全な例です:
例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# 正しいドライバーパスを設定する
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ウェブページを開く
driver.get("https://www.example.com")
# ウィンドウを最大化する
driver.maximize_window()
# Cookieを追加する
driver.add_cookie({"name": "test", "value": "123"})
# Cookieを取得する
cookie = driver.get_cookie("test")
print("Cookie:", cookie)
# JavaScriptを実行する
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Alertポップアップを処理する
driver.execute_script("alert('Hello, Selenium!');")
alert = driver.switch_to.alert
print("ポップアップテキスト:", alert.text)
alert.accept()
# iframeに切り替える
iframe = driver.find_element(By.ID, "iframe-id")
driver.switch_to.frame(iframe)
# メインページに戻る
driver.switch_to.default_content()
# ブラウザを閉じる
driver.quit()