目次
概要
Seleniumを使って取得したWeb要素(ボタンや入力フォーム)に対して、クリックや文字入力といったユーザー操作を実行する方法を解説します。
「検索ボックスにキーワードを入れて検索ボタンを押す」といった、ブラウザ自動化の核心となるアクションです。
仕様(入出力)
- 入力:
- 操作対象の
WebElementオブジェクト - 入力する文字列(
send_keysの場合)
- 操作対象の
- 出力:
- ブラウザ画面上でのクリック動作、文字入力動作
- 前提:
find_element等で事前に要素を取得できていること。
基本の使い方
入力欄に文字を打ち込み、その後にボタンをクリックする基本的な流れです。
# input_element, button_element は取得済みと仮定
# 1. 文字列を入力する
input_element.send_keys("Python Selenium")
# 2. 要素をクリックする
button_element.click()
コード全文
入力フォームとボタンを持つ簡易的なWebページを生成し、実際に「文字入力」と「クリック」を行う完全な動作サンプルです。
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def operate_elements_demo():
"""
入力欄への文字入力と、ボタンのクリック操作を行うデモ関数。
"""
driver = webdriver.Chrome()
# テスト用のHTMLフォームを作成(入力欄とボタン)
# <input id="my-input" type="text">
# <button id="my-button" onclick="alert('Clicked!')">Click Me</button>
html_content = """
data:text/html;charset=utf-8,
<input id='my-input' type='text' placeholder='Enter text here'>
<button id='my-button' onclick='document.body.style.backgroundColor="yellow"'>Click Change Color</button>
"""
try:
# 1. ページを開く
driver.get(html_content)
# 2. 入力欄(inputタグ)を取得して操作
input_box = driver.find_element(By.ID, "my-input")
print("文字を入力します...")
input_box.send_keys("検索ワード")
time.sleep(2) # 動作確認用
# 3. ボタン(buttonタグ)を取得して操作
btn = driver.find_element(By.ID, "my-button")
print("ボタンをクリックします...")
btn.click()
# クリックの結果を確認(背景色が黄色に変わります)
time.sleep(2)
print("操作完了")
except Exception as e:
print(f"エラーが発生しました: {e}")
finally:
driver.quit()
if __name__ == "__main__":
operate_elements_demo()
カスタムポイント
操作メソッド一覧
WebElementオブジェクトに対して実行できる主要な操作メソッドです。
| メソッド | 処理内容 | 使用例 |
element.click() | 要素をクリックする | リンク、ボタン、チェックボックスの選択など |
element.send_keys("文字列") | 文字列を入力する | 検索ボックス、ログインフォームへの入力 |
element.clear() | 入力内容を消去する | 既に入力されている値をリセットする場合に使用 |
element.submit() | フォームを送信する | エンターキーを押す動作に近い(フォーム内要素のみ有効) |
特殊キーの入力
send_keys は通常の文字だけでなく、EnterキーやTabキーなどの特殊キーも送信できます。
利用するには from selenium.webdriver.common.keys import Keys をインポートします。
from selenium.webdriver.common.keys import Keys
# "Python" と入力した後に Enterキー を押す
element.send_keys("Python")
element.send_keys(Keys.ENTER)
注意点
- 要素が操作可能か(Interactable)
- 要素が見えていても、他の要素(広告やポップアップなど)に重なられている状態で
click()すると、エラー(ElementClickInterceptedException)が発生します。 - その場合、重なっている要素を閉じるか、JavaScriptを使って強制的にクリックさせる回避策が必要です。
- 要素が見えていても、他の要素(広告やポップアップなど)に重なられている状態で
- 入力前のクリア
- 既存のテキストが入っている入力欄に
send_keysすると、文字列が追記されます。 - 確実に入力値を置き換えたい場合は、先に
element.clear()を実行してください。
- 既存のテキストが入っている入力欄に
- 画面外の要素
- 基本的にSeleniumは自動でスクロールして要素を表示してから操作しますが、うまくいかない場合は
driver.execute_script("arguments[0].scrollIntoView();", element)などで明示的にスクロールさせる必要があります。
- 基本的にSeleniumは自動でスクロールして要素を表示してから操作しますが、うまくいかない場合は
応用
検索サイトのトップページで、キーワード入力から検索実行までを一気に行う実用的なパターンです。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
def google_search_demo():
driver = webdriver.Chrome()
driver.get("https://www.google.com")
try:
# 検索ボックスを見つける(name="q" はGoogleの仕様)
search_box = driver.find_element(By.NAME, "q")
# キーワードを入力して、そのままEnterキーを押す
# ボタンをクリックするよりも確実で高速です
print("検索実行中...")
search_box.send_keys("Python Selenium Tutorial")
search_box.send_keys(Keys.ENTER)
time.sleep(3) # 検索結果を見るために待機
print(f"検索結果ページ: {driver.title}")
finally:
driver.quit()
if __name__ == "__main__":
google_search_demo()
まとめ
画面操作の基本は「見つけて(find_element)」から「入力(send_keys)」または「クリック(click)」です。
特にフォーム入力では、既存の値を消す clear() や、決定操作を行う Keys.ENTER を組み合わせることで、人間らしい操作を正確に再現できます。
