SeleniumはWebアプリケーションの自動テストやWebスクレイピングに使用されるツールであり、PythonのSeleniumを使用することで、Webページを自動的に制御し、テストやデータの収集を行うことができます。
インストール
まず最初に、PythonのSeleniumをインストールする必要があります。以下のコマンドを使用して、Seleniumをインストールすることができます。
pip install selenium
WebDriver
Seleniumでは、WebDriverと呼ばれるドライバーを使用して、Webブラウザを自動的に制御します。 WebDriverにはChrome、Firefox、SafariなどのWebブラウザを制御するためのドライバーがあります。それぞれのドライバーには異なる方法で設定する必要があります。ここでは、Chromeを使用する例を紹介します。
Chromeの場合、ChromeDriverをダウンロードして、適切な場所に配置する必要があります。Windowsの場合はexeファイルをダウンロードし、環境変数にパスを追加します。macOSの場合は、ターミナルで以下のコマンドを実行して、ダウンロードして展開します。
brew install chromedriver
ChromeDriverのバージョンによって、対応しているChromeのバージョンが異なります。実行時にエラーが発生したら、ChromeまたはChromeDriveのバージョンを合わせるようにして下さい
基本的な使い方
以下のコードを使用して、Googleのトップページを開くことができます。
from selenium import webdriver
# WebDriverのパスを設定
driver_path = 'chromedriverのパス'
# WebDriverを設定
driver = webdriver.Chrome(executable_path=driver_path)
# Googleのトップページを開く
driver.get('https://www.google.com')
これで、Googleのトップページが開かれます。
次に、検索ボックスに「Python」と入力し、検索ボタンをクリックして、検索結果を表示する方法を紹介します。
pythonのプロセス終了後、ブラウザが閉じないようにos,signalモジュールをimportしています
import os,signal
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# WebDriverのパスを設定
driver_path = 'chromedriverのパス'
# WebDriverを設定
driver = webdriver.Chrome(executable_path=driver_path)
try:
# Googleのトップページを開く
driver.get('https://www.google.com')
# 検索ボックスに入力
search_box = driver.find_element(By.CLASS_NAME, "gLFyf")
search_box.send_keys('Python')
# 検索ボタンをクリック
search_box.send_keys(Keys.RETURN)
finally:
os.kill(driver.service.process.pid,signal.SIGTERM)
これで、Googleで「Python」と検索した結果が表示されます。
利用できるオプション
optionは、ブラウザの起動設定をカスタマイズするために使用されます。以下は、PythonのSeleniumで使用される主要なoptionのいくつかです。代表的なものを照会します。
–headless
--headless
optionは、ヘッドレスブラウザを起動するために使用されます。ヘッドレスブラウザとは、グラフィカルユーザーインターフェース(GUI)を持たないWebブラウザのことです。--headless
optionを使用すると、ブラウザウィンドウを表示せずにスクリプトを実行できます。これは、テスト自動化やWebスクレイピングに非常に便利です。
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
–start-maximized
--start-maximized
optionは、ブラウザを起動するときにウィンドウを最大化するために使用されます。
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--start-maximized')
driver = webdriver.Chrome(options=options)
–incognito
--incognito
optionは、プライベートブラウジングモードでブラウザを起動するために使用されます。プライベートブラウジングモードでは、ブラウザが履歴やCookieなどのデータを保存しないため、セキュリティ上のリスクを軽減することができます。
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--incognito')
driver = webdriver.Chrome(options=options)
–disable-notifications
--disable-notifications
optionは、通知を無効にするために使用されます。Webサイトが通知を送信することがあるため、これは便利なoptionです。
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--disable-notifications')
driver = webdriver.Chrome(options=options)
–disable-infobars
--disable-infobars
optionは、ブラウザの情報バーを非表示にするために使用されます。情報バーには、ダウンロードの進行状況やセキュリティ警告などが表示されるたため、自動化テストを行う際には、情報バーを非表示にすることが望ましい場合があります。
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--disable-infobars')
driver = webdriver.Chrome(options=options)
–disable-extensions
--disable-extensions
optionは、ブラウザの拡張機能を無効にするために使用されます。ブラウザの拡張機能は、Webサイトの機能を拡張したり、広告をブロックしたりするために使用されることがあります。しかし、拡張機能がテストの邪魔をする場合やセキュリティ上の問題がある場合には、--disable-extensions
optionを使用して無効化することができます。
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--disable-extensions')
driver = webdriver.Chrome(options=options)
以上が、PythonのSeleniumで使用される主要なoptionの例です。これらのoptionを使用することで、自動化テストやWebスクレイピングをより効率的に実行できます。
要素の取得
Seleniumを使用すると、Webページ上の要素を取得することができます。以下のコードを使用して、Googleの検索結果ページから検索結果のタイトルを取得することができます。
import os
import signal
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# WebDriverのパスを設定
driver_path = '/usr/local/bin/chromedriver'
# chromeのオプション(ヘッドレスブラウザ)
options = webdriver.ChromeOptions()
options.add_argument('--headless')
# WebDriverを設定
driver = webdriver.Chrome(executable_path=driver_path,options=options)
try:
# Googleのトップページを開く
driver.get('https://www.google.com')
# 検索ボックスに入力
search_box = driver.find_element(By.CLASS_NAME, "gLFyf")
search_box.send_keys('Python')
# 検索ボタンをクリック
search_box.send_keys(Keys.RETURN)
# 検索結果を取得
xpath = '//h3[@class="LC20lb MBeuO DKV0Md"]'
search_results = driver.find_elements(By.XPATH, xpath)
for result in search_results:
print(result.text)
finally:
os.kill(driver.service.process.pid, signal.SIGTERM)
上記のコードでは、find_elements
メソッドのを使用して、//h3[@class="LC20lb MBeuO DKV0Md"]
というXPathを指定しています。これは、検索結果のタイトルを表す<h3>
タグの中で、class
属性がLC20lb MBeuO DKV0Md
であるものを取得するという意味です。
ブラウザの操作
Seleniumを使用すると、Webページ上でクリックやスクロールなどの操作を自動的に行うこともできます。以下のコードを使用して、Googleの検索結果ページから3番目の検索結果をクリックし、そのページのタイトルを取得することができます。
import os
import signal
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# WebDriverのパスを設定
driver_path = '/usr/local/bin/chromedriver'
# chromeのオプション(ヘッドレスブラウザ)
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
# WebDriverを設定
driver = webdriver.Chrome(executable_path=driver_path,options=options)
try:
# Googleのトップページを開く
driver.get('https://www.google.com')
# 検索ボックスに入力
search_box = driver.find_element(By.CLASS_NAME, "gLFyf")
search_box.send_keys('Python')
# 検索ボタンをクリック
search_box.send_keys(Keys.RETURN)
# 検索結果の1番目の候補をクリックする
wait = WebDriverWait(driver, 10)
second_candidate_links = wait.until(EC.visibility_of_element_located((By.XPATH, "//h3")))
actions = ActionChains(driver)
actions.move_to_element(second_candidate_links).click().perform()
# 遷移先のページタイトルを取得して表示する
wait.until(EC.title_contains('Python'))
print(driver.title)
finally:
os.kill(driver.service.process.pid, signal.SIGTERM)
# ブラウザを閉じる
driver.quit()
上記のコードでは、ActionChains
クラスを使用して、move_to_element
メソッドとclick
メソッドを連続して呼び出して、1番目の検索結果をクリックしています。また、title
属性を使用して、クリック後のページのタイトルを取得しています。
まとめ
以上が、PythonのSeleniumの基本的な使い方の紹介です。Seleniumは非常に便利なツールであり、Webアプリケーションの自動テストやWebスクレイピングなどに広く使われています。ただし、Webサイトのアクセス頻度に制限がある場合や、Webサイトの利用規約に違反する場合は、使用に注意が必要です。また、Webスクレイピングにおいては、データ利用の観点から、利用するWebサイトの利用規約やrobots.txtを必ず確認しましょう。