PythonとSeleniumでブラウザを自動操作する方法|入力・クリック・待機処理の基本
毎回同じページを開いたり、入力欄に文字を入れたりする作業は、Pythonから自動化できる場合があります。ブラウザの操作に使える代表的なツールが、Seleniumです。
この記事では、Selenium公式の練習用ページを使い、文字入力・ボタンのクリック・結果の取得を試します。操作の命令だけでなく、ページの準備を待つ方法や、エラーが起きたときの確認点も整理します。
目次
Seleniumでできること
Seleniumは、Webブラウザをプログラムから操作するためのツール群です。PythonからWebDriverを通じて命令を送り、Chromeなどでページを開いたり、入力欄やボタンを操作したりできます。
ただし、どのサイトでも同じコードが使えるわけではありません。入力欄の名前やページの構造はサイトごとに異なるため、操作対象に合わせて指定を変える必要があります。
最初は、操作結果を確認しやすい練習用ページから始めましょう。今回は「入力する→送信する→結果を読む」という一連の流れを作ります。
1.PythonとSeleniumを準備する
Seleniumが対応するPython 3と、Google Chromeを用意します。Pythonのインストール後、ターミナルやコマンドプロンプトで次のコマンドを実行してください。
python --version
Pythonのバージョンが表示されたら、Seleniumをインストールします。別のプロジェクトにもPythonを使っている場合は、この練習用の仮想環境を用意すると、パッケージを分けて管理できます。
python -m pip install --upgrade selenium
環境によっては、pythonの代わりにpython3を使います。その場合は、インストールとプログラムの実行の両方で、同じコマンドを使ってください。
ドライバはSelenium Managerで管理する
現在のSeleniumには、必要なドライバの取得・管理を支援するSelenium Managerが含まれています。通常の環境では、後ほど示すwebdriver.Chrome()から利用でき、別途webdriver-managerを入れることは必須ではありません。
初回など、必要なファイルをダウンロードするときには通信が発生します。会社や学校のネットワークで取得が制限されている場合は、プロキシなどの環境設定を確認する必要があります。
2.入力・クリック・結果取得を試す
次のコードを、selenium_practice.pyという名前で保存してください。文字コードはUTF-8にし、ライブラリ名と衝突しないよう、ファイル名をselenium.pyにはしないでください。
このプログラムは、公式の練習用フォームに文字を入力し、送信後のメッセージを取得します。処理が終わると、起動したブラウザを閉じます。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def main():
driver = webdriver.Chrome()
try:
driver.set_page_load_timeout(30)
driver.get(
"https://www.selenium.dev/selenium/web/web-form.html"
)
wait = WebDriverWait(driver, 10)
text_box = wait.until(
EC.visibility_of_element_located(
(By.NAME, "my-text")
)
)
text_box.clear()
text_box.send_keys("Seleniumの練習")
submit_button = wait.until(
EC.element_to_be_clickable(
(By.CSS_SELECTOR, "button[type='submit']")
)
)
submit_button.click()
wait.until(
EC.text_to_be_present_in_element(
(By.ID, "message"), "Received!"
)
)
message = driver.find_element(By.ID, "message")
print("送信結果:", message.text)
finally:
driver.quit()
if __name__ == "__main__":
main()
保存したフォルダで、次のコマンドを実行します。
python selenium_practice.py
正常に処理が進むと、ターミナルには次の結果が表示されます。
送信結果: Received!
ブラウザが短時間で閉じても、この結果が表示されていれば、最後まで処理が進んだと確認できます。画面が閉じるのは、コードの末尾でdriver.quit()を実行しているためです。
3.コードの流れを理解する
自動操作は、ページを開くだけでは完了しません。対象の入力欄を探し、操作できる状態を待ち、実行後の結果を確認するところまでを組み合わせます。
今回のコードで使った主な処理を整理すると、次のようになります。
| 処理 | 役割 |
|---|---|
webdriver.Chrome() | Chromeの操作を開始する |
driver.get() | 指定したページを開く |
WebDriverWait | 指定した条件を満たすまで待つ |
clear()・send_keys() | 入力欄を空にして文字を入力する |
click() | ボタンなどをクリックする |
要素の.text | 表示されている文字を取得する |
driver.quit() | ブラウザの操作を終了する |
By.NAMEやBy.IDは、操作する要素を探す方法です。今回のmy-textやmessageは練習用ページの属性値なので、別のサイトでは、そのページに合った値へ変更します。
IDやname属性も、サイトの更新によって変わる場合があります。属性の種類だけで判断せず、目的の要素を一意に指定でき、変更されにくい値かを確認することが大切です。
4.固定時間ではなく、必要な状態を待つ
ブラウザがページを開いた後も、JavaScriptによって入力欄やメッセージが追加されることがあります。そのため、ページへの移動が終わった直後に操作すると、対象がまだ見つからない場合があります。
今回のコードでは、WebDriverWait(driver, 10)で条件を確認しています。これは毎回10秒間停止する指定ではなく、条件を満たせば先へ進み、指定した時間内に満たせなければエラーにする仕組みです。
入力前には入力欄の表示を、送信後には結果の文字を待ちます。何秒待つかだけでなく、「何が確認できたら次へ進めるか」を考えると、処理を組み立てやすくなります。
なお、element_to_be_clickableが確認するのは、主に要素が表示され、有効になっていることです。別の要素が覆いかぶさっている場合などは、クリックが失敗することもあります。
今回の例では、待機方法を明示的待機にそろえています。暗黙的待機のimplicitly_wait()を混在させると待ち時間が予想しにくくなるため、安易に追加しないようにしましょう。
5.エラーが出たときの確認点
エラーが起きたら、最後に表示された例外名と、失敗したコードの行を確認します。待ち時間を増やすだけでは、入力欄の指定間違いや、インストール先の違いは解決できません。
よくあるエラーと確認点は、次のとおりです。
| エラー | 主な確認点 |
|---|---|
ModuleNotFoundError | 実行中のPythonにSeleniumをインストールしたか |
NoSuchElementException | 要素の指定、表示タイミング、対象のフレームが正しいか |
TimeoutException | ページの読み込みや、指定した待機条件が時間内に成立したか |
SessionNotCreatedException | ブラウザとドライバの組み合わせ、起動設定に問題がないか |
SyntaxError・IndentationError | コピー時に改行や行頭の空白が崩れていないか |
特にPythonでは、行頭の空白が処理のまとまりを表します。コードを1行につなげたり、tryやfinallyの位置を変えたりすると、実行できなくなるため注意してください。
6.実際の作業へ応用するには
練習用フォームで流れを確認できたら、自分が操作してよいページで、小さな処理から試します。最初はブラウザを表示した状態で、どの入力欄に何が入り、どのボタンを押しているかを確認すると、原因を追いやすくなります。
送信や登録を伴う操作では、クリック後の結果確認も組み込みましょう。応答が遅いという理由だけで再実行すると、同じ内容を重複して送信する可能性があります。
また、対象サービスに目的に合った公式APIがある場合は、そちらも選択肢になります。ブラウザ操作が必要なのか、データの取得や登録だけでよいのかを整理すると、使う方法を選びやすくなります。
Seleniumの練習では、入力・クリック・結果確認を一つずつ確かめながら進めてください。まずは今回のコードの入力文字を変更し、処理の流れを追うところから始めてみましょう。
Learning Tools
記事を検索したい方はここから!
記事を検索
関連記事や、今の内容に近いテーマをすぐに検索できます。
例: AI / 情報Ⅰ / Python / 統計 / 資格 / 学習法