1. 技術的な基礎
フォームの入力と送信
フォーム作業は、ユーザー登録、アンケート記入、データ収集などでよく必要になります。数百ものフォームを手動で記入するのは、スイカをストローで食べようとするようなものです。でも、Seleniumというスーパーツールを使えば、数秒で片付けられます。
まず、フォームにテキストを入力して送信する方法を説明します。典型的なログインフォームを例に、基本的なステップを学びましょう:
from selenium import webdriver
# ドライバーの設定 (例: ChromeDriver)
driver = webdriver.Chrome()
try:
# ウェブページを開く
driver.get("https://example.com/login")
# ユーザー名入力フィールドを探してテキストを入力
username_input = driver.find_element_by_name("username")
username_input.send_keys("私のログイン名")
# パスワード入力フィールドを探してテキストを入力
password_input = driver.find_element_by_name("password")
password_input.send_keys("私のパスワード")
# フォーム送信ボタンを探してクリック
submit_button = driver.find_element_by_name("submit")
submit_button.click()
finally:
# ドライバーを閉じる
driver.quit()
バリデーションとエラー処理
プログラマーの一日を台無しにするもの、それは必要のない瞬間に飛び出すエラーです。だからこそ、エラーを事前に処理します。try/exceptを使ってエラーをキャッチし、ログを残して問題の原因を追跡します。
try:
username_input = driver.find_element_by_name("username")
username_input.send_keys("私のログイン名")
except Exception as e:
print(f"ユーザー名入力時のエラー: {e}")
logging.error("ユーザー名入力時のエラー", exc_info=True)
2. チェックボックス (Checkboxes)
ボタンをクリックする方法を学んだら、今度はリストからいくつかのオプションを選択してみましょう。チェックボックスをオン・オフするには、click()メソッドを使います。チェックされているか確認するには、is_selected()属性を使用します。
checkbox = driver.find_element_by_id("checkbox_id")
if not checkbox.is_selected():
checkbox.click()
3. ラジオボタン (Radio Buttons)
ラジオボタンは、複数の選択肢から1つだけ選べるものです。チェックボックスと同じように、click()メソッドで選択し、is_selected()で状態を確認します。
radio_button = driver.find_element_by_id("radio_button_id")
if not radio_button.is_selected():
radio_button.click()
4. ドロップダウン (Dropdowns)
ドロップダウンリストにはいくつかの選択肢が含まれています。SeleniumにはSelectクラスがあり、これを使うと操作が簡単です。
from selenium.webdriver.support.ui import Select
dropdown = Select(driver.find_element_by_id("dropdown_id"))
dropdown.select_by_visible_text("オプション1")
また、select_by_index()やselect_by_value()を使って選択することもできます。
5. テキストエリア (Text Areas)
テキストエリアはテキストフィールドに似ていますが、大量のテキスト入力に使われます。操作はテキストフィールドと同じです。
text_area = driver.find_element_by_id("textarea_id")
text_area.send_keys("このテキストエリア用のサンプルテキストです。")
6. カレンダー (Date Picker)
カレンダー入力フィールドでは、日付を選択できます。通常のテキストフィールドの場合、send_keys()でフォーマットに合わせた値を入力できます。
date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25") # サイトによって日付のフォーマットが異なる場合があります
ただし、一部のカレンダー入力は、ポップアップを開いて日付を選ぶ必要がある場合があります。
7. ファイルフィールド (File Upload)
これらのフィールドでは、サーバーにファイルをアップロードできます。ローカルコンピュータ内のファイルパスを指定して、send_keys()で操作します。
file_input = driver.find_element_by_id("file_upload_id")
file_input.send_keys("/path/to/file.txt")
8. 隠しフィールド (Hidden Fields)
隠しフィールドはページ上に表示されませんが、フォーム送信のために必要な情報を保持する場合があります。それらの値を確認または変更するには、get_attribute("value")を使います。
hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("隠しフィールドの値:", value)
9. 操作の成功確認
操作の結果を確認することはとても重要です。例えばフォームを送信した後に、申請が成功したかどうかを確認する方法:
># サイトでのログイン成功確認
if "ようこそ" in driver.page_source:
print("ログイン成功!")
else:
print("ログイン中にエラーが発生しました。")
10. 問題と解決策
問題
- 作業の不安定性: ウェブページは頻繁に変化します。ページ構造の変更によりスクリプトが故障することがありますので、コードの定期的な確認が必要です。
- ネットワーク速度への依存: ページや要素のロード時間が異なる場合があります。遅延を処理するために明示的ウェイト(explicit waits)を使用してください。
解決策
- ログ記録: 全ての操作をログに記録することで、問題の原因を特定しやすくなります。
loggingライブラリを使うことで簡単にログ記録が可能です。 - コードのモジュール化: 複雑な操作を関数やモジュールに分けることで、変更やテストがしやすくなります。
GO TO FULL VERSION