SeleniumはPythonを含む多くのプログラミング言語で使用されるオープンソースのWebアプリケーションテストフレームワーク、自動化ツールです。ここでは、PythonとSeleniumを使用して、特定のページへのアクセス、フォームへの入力、ボタンの押下など一連のブラウザ操作を自動化する方法について説明します。これによって提携業務を自動化したり、Webアプリケーションのテストを自動化することが可能です。
環境の準備
はじめに、必要なツールの準備を行います。インストール済みの場合は、スキップして下さい。
Seleniumのインストール
まずSeleniumをインストールする必要があります。コマンドプロンプト(Macの場合はターミナル)を開き、以下のコマンドを入力します。
pip install selenium
ブラウザドライバーのインストール
Seleniumを使用するためには、使用するブラウザに合わせたドライバーをインストールする必要があります。たとえば、Google Chromeを使用する場合は、ChromeDriverをインストールする必要があります。ChromeDriverのインストール方法については、以下の公式サイトなどを参照してください。
https://sites.google.com/a/chromium.org/chromedriver/downloads
ブラウザ操作の実行
環境の準備が完了したら、実際にSeleniumでブラウザ操作の自動化を実装していきます。まずは、コードのはじめに先ほど準備したSeleniumのライブラリをインポートし、インストールしたドライバのパスを指定します。実際のコードでは/path/to/chromedriver
の部分を実際の環境のパスに置き換えて下さい。
from selenium import webdriver # Chromeドライバーのパスを指定 driver = webdriver.Chrome('/path/to/chromedriver')
ここからはGoogleの検索ページを開き、検索ボックスにキーワードを入力し、検索結果を取得するというユーザケースを例に実際の自動化操作を解説していきます。
URLをしてしてページを開く
この行は、WebDriverのget()
メソッドを使用して引数に指定したURLのページを開きます。ここでは、Googleのホームページを開いています。
# Googleのページを開く driver.get('https://www.google.com')
フォームにテキストを入力する
ここでは、Googleの検索ボックスを見つけて、'Python自動化'というキーワードを入力します。
# 検索ボックスにキーワードを入力する search_box = driver.find_element_by_name('q') search_box.send_keys('Python自動化')
find_element_by_name()
メソッドは、HTML要素の中から指定した名前属性(ここでは 'q')に一致する要素を見つけます。Googleの検索ボックスの名前属性が "q" であるため、ここではdriver.find_element_by_name('q')
と実装します。。
次に、 search_box
オブジェクト(検索ボックス要素)に対して、send_keys()
メソッドを使用してテキストを送信します。send_keys()
メソッドの引数が検索ワードになるため、「Python自動化」と検索する場合は search_box.send_keys('Python自動化')
と実装します。
フォームの送信
submit()
メソッドは、対象のフォームを送信します。この場合、検索ボックスが入力された後にsubmit()メソッドが呼び出されることで、Googleの検索が実行されます。
# 検索ボタンをクリックする
search_box.submit()
この操作により、検索フォーム内でエンターキーを押した場合と同じ挙動を再現できます。
ブラウザを閉じる
最後に、ブラウザを閉じてWebDriverセッションを終了します。これにより、スクリプトの実行が終了します。quit()
は、WebDriverを終了してブラウザを閉じるためのメソッドです。 このメソッドは、ブラウザを開いているWebDriverセッションを正しくクリーンアップし、リソースを解放する役割を果たします。
# ブラウザを閉じる
driver.quit()
自動化のプログラムが終了してもブラウザが残っているとアクセス対象のサイトやSeleniumを実行しているPC、サーバのリソースの浪費することに繋がります。 特に本番の環境でのテスト、自動化では迷惑を書けないように、セッションの終了を忘れないように中止して下さい。
- セッションのクリーンアップ
WebDriverを使用する際には、ブラウザとの間で通信するセッションが確立されます。quit()
を呼び出すことで、このセッションが適切にクローズされ、リソースの解放やメモリの開放が行われます。これにより、メモリリークやプロセスの残留などの問題を回避します。
- リソース管理
ウェブドライバーを使用してブラウザを制御する場合、ブラウザを開くたびにリソース(メモリ、CPUなど)が消費されます。driver.quit()
を呼び出すことで、プログラムが終了した際にこれらのリソースが解放され、システム全体のパフォーマンスに悪影響を与えるのを防ぎます。
退屈なことはPythonにやらせよう 第2版 ノンプログラマーにもできる自動化処理プログラミング [ AI Sweigart ]
完成したコードの全体
これまでのコードをまとまると下記の様になります。
from selenium import webdriver # Chromeドライバーのパスを指定 driver = webdriver.Chrome('/path/to/chromedriver') # Googleのホームページを開く driver.get('https://www.google.com') # 検索ボックスにキーワードを入力する search_box = driver.find_element_by_name('q') search_box.send_keys('Python自動化') # 検索ボタンをクリックする search_box.submit() # ブラウザを閉じる driver.quit()
さらに便利に使うためのTips
ここまで説明した基本的な操作に加え、さらに便利に使うためのTipsを紹介します。
要素の検索と操作
Seleniumを使用してブラウザを自動化する場合、Webページ上の要素を検索して操作する必要があります。たとえば、前の例では、Google検索ボックスを検索して、キーワードを入力し、検索ボタンをクリックしました。以下の例では、Google検索結果のリストからリンクをクリックする方法を示します。
要素を検索するには、find_element_by_
メソッドを使用します。たとえば、find_element_by_name
を使用して、名前がq
の検索ボックスを検索できます。以下の例では、Google検索結果のリストから最初のリンクをクリックする方法を示します。
from selenium import webdriver # Chromeドライバーのパスを指定 driver = webdriver.Chrome('/path/to/chromedriver') # Googleのホームページを開く driver.get('https://www.google.com') # 検索ボックスにキーワードを入力する search_box = driver.find_element_by_name('q') search_box.send_keys('Python自動化') # 検索ボタンをクリックする search_box.submit() # 検索結果の最初のリンクをクリックする first_result = driver.find_element_by_css_selector('div#search div.srg div.g:nth-of-type(1) a') first_result.click() # ブラウザを閉じる driver.quit()
この例では、find_element_by_css_selector
を使用して、検索結果の最初のリンクを検索しています。リンクをクリックするには、click
メソッドを使用します。注意点として、CSSセレクターを使用して要素を検索する場合は、適切なセレクターを使用する必要があります。
ページの待機
自動化スクリプトを実行すると、ページがまだ完全に読み込まれていない可能性があります。そのため、要素を検索する前に、ページが完全に読み込まれるまで待機する必要があります。以下のコードを使用して、ページが読み込まれるまで待機する方法を示します。
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 # Chromeドライバーのパスを指定 driver = webdriver.Chrome('/path/to/chromedriver') # Googleのホームページを開く driver.get('https://www.google.com') # 検索ボックスにキーワードを入力する search_box = driver.find_element_by_name('q') search_box.send_keys('Python自動化') # 検索ボタンをクリックする search_box.submit() # 検索結果の最初のリンクをクリックする first_result = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'div#search div.srg div.g:nth-of-type(1) a')) ) first_result.click() # ブラウザを閉じる driver.quit()
この例では、WebDriverWait
を使用して、最大で10秒間ページが読み込まれるのを待ちます。
まとめ
以上で、PythonとSeleniumを使用して、ブラウザ操作を自動化する方法について説明しました。Seleniumを使用することで、Webページ上のさまざまな操作を自動化できるため、自動テストやWebスクレイピングなどのさまざまな用途に役立ちます。最後にPythonの学習に利用できるUdemy のサイトを紹介します。ぜひ活用ください。
[PR]