CodeGym /コース /Python SELF JA /ウェブページ上のフォームやボタンを自動化してデータを収集する

ウェブページ上のフォームやボタンを自動化してデータを収集する

Python SELF JA
レベル 37 , レッスン 3
使用可能

1. 技術的な基礎

フォームの入力と送信

フォーム作業は、ユーザー登録、アンケート記入、データ収集などでよく必要になります。数百ものフォームを手動で記入するのは、スイカをストローで食べようとするようなものです。でも、Seleniumというスーパーツールを使えば、数秒で片付けられます。

まず、フォームにテキストを入力して送信する方法を説明します。典型的なログインフォームを例に、基本的なステップを学びましょう:

Python

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を使ってエラーをキャッチし、ログを残して問題の原因を追跡します。

Python

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()属性を使用します。

Python

checkbox = driver.find_element_by_id("checkbox_id")
if not checkbox.is_selected():
    checkbox.click()
    

3. ラジオボタン (Radio Buttons)

ラジオボタンは、複数の選択肢から1つだけ選べるものです。チェックボックスと同じように、click()メソッドで選択し、is_selected()で状態を確認します。

Python

radio_button = driver.find_element_by_id("radio_button_id")
if not radio_button.is_selected():
    radio_button.click()
    

4. ドロップダウン (Dropdowns)

ドロップダウンリストにはいくつかの選択肢が含まれています。SeleniumにはSelectクラスがあり、これを使うと操作が簡単です。

Python

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)

テキストエリアはテキストフィールドに似ていますが、大量のテキスト入力に使われます。操作はテキストフィールドと同じです。

Python

text_area = driver.find_element_by_id("textarea_id")
text_area.send_keys("このテキストエリア用のサンプルテキストです。")
    

6. カレンダー (Date Picker)

カレンダー入力フィールドでは、日付を選択できます。通常のテキストフィールドの場合、send_keys()でフォーマットに合わせた値を入力できます。

Python

date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25")  # サイトによって日付のフォーマットが異なる場合があります
    

ただし、一部のカレンダー入力は、ポップアップを開いて日付を選ぶ必要がある場合があります。

7. ファイルフィールド (File Upload)

これらのフィールドでは、サーバーにファイルをアップロードできます。ローカルコンピュータ内のファイルパスを指定して、send_keys()で操作します。

Python

file_input = driver.find_element_by_id("file_upload_id")
file_input.send_keys("/path/to/file.txt")
    

8. 隠しフィールド (Hidden Fields)

隠しフィールドはページ上に表示されませんが、フォーム送信のために必要な情報を保持する場合があります。それらの値を確認または変更するには、get_attribute("value")を使います。

Python

hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("隠しフィールドの値:", value)
    

9. 操作の成功確認

操作の結果を確認することはとても重要です。例えばフォームを送信した後に、申請が成功したかどうかを確認する方法:

Python

># サイトでのログイン成功確認
if "ようこそ" in driver.page_source:
    print("ログイン成功!")
else:
    print("ログイン中にエラーが発生しました。")
    

10. 問題と解決策

問題

  • 作業の不安定性: ウェブページは頻繁に変化します。ページ構造の変更によりスクリプトが故障することがありますので、コードの定期的な確認が必要です。
  • ネットワーク速度への依存: ページや要素のロード時間が異なる場合があります。遅延を処理するために明示的ウェイト(explicit waits)を使用してください。

解決策

  • ログ記録: 全ての操作をログに記録することで、問題の原因を特定しやすくなります。loggingライブラリを使うことで簡単にログ記録が可能です。
  • コードのモジュール化: 複雑な操作を関数やモジュールに分けることで、変更やテストがしやすくなります。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION