更新:2024/01/01

python seleniumのtips

1. 目次

2. selenium

seleniumはバージョンによってメソッドが全く違うことがあるため、気を付けましょう。

2.1. インストール

4系のみ:

pip install selenium

4系と3系両方を使いたい場合:

pip install selenium==4.0.0

注意

3系のメソッドを使うと警告が出ることがあります。

3. ドライバーの起動

Seleniumを使用するためには、対象のWebブラウザーに対応するWebドライバーを使用して起動する必要があります。以下は、PythonでSeleniumを使用する場合に、ChromeブラウザーをWebドライバーで起動する例です。

from selenium import webdriver

# Chrome用のWebドライバーを指定 
driver = webdriver.Chrome('/path/to/chromedriver')

3.1. webdriver_manager

chromedriverのパスの指定がめんどくさい場合はwebdriver_managerを使うことをお勧めします。webdriver_managerはPythonのパッケージで、様々なブラウザーのWebドライバーを自動でダウンロードしてインストールすることができます。webdriver_managerを使用するための方法を示します。

まず、webdriver_managerパッケージをインストールします。

pip install webdriver_manager

webdriver_managerパッケージには、ChromeDriverManager、FirefoxDriverManager、IeDriverManagerなど、様々なブラウザーに対応するWebドライバーを自動でダウンロードするためのクラスが用意されています。使用するWebドライバーに応じて、適切なクラスをインポートしてください。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
# Webドライバーを使用してWebブラウザーを起動する
driver = webdriver.Chrome(ChromeDriverManager().install())

4. ページの移動

Seleniumのget()は、指定されたURLに対してWebドライバーを使用してブラウザを開き、そのURLにアクセスするメソッドです。具体的には、以下のような形式で使用します。

# URLにアクセスする
driver.get("https://math-joy-life.com")

このようにすることで、指定されたURLに対してブラウザを開き、そのページを表示することができます。また、このメソッドを呼び出すことで、自動的にページの読み込みが完了するまで待機します。

5. 要素の探し方

5.1. selenium3系

5.1.1. find_element_by_*(“”)

Selenium 3系では、要素を探すためにfind_element_by_*()メソッドを使用し、以下のようなメソッドが存在します。

find_element_by_id(‘id_name’):id属性を使用して要素を探します。
find_element_by_class_name(‘class_name’):class属性を使用して要素を探します。
find_element_by_tag_name(tag_name’):タグ名を使用して要素を探します。
find_element_by_css_selector(‘selector’):CSSセレクターを使用して要素を探します。
find_element_by_xpath(‘xpath’):XPathを使用して要素を探します。
たとえば、idが『hello』の要素を探す場合は、次のようにコードを書くことができます。

driver.find_element_by_id("hello")

find_elements_by_*(“”)のようにelementをelementsにすることで、複数の要素を探すことができます。

5.2. selenium4系

5.2.1. find_element(By.*,””)

Selenium 4系では、要素を探すためにfind_element(By.*,””)メソッドを使用します。以下によく使用するメソッドを示します。

id属性を指定する場合:find_element(By.ID, ‘id_name’)
class属性を指定する場合:find_element(By.CLASS_NAME, ‘class_name’)
tag名を指定する場合:find_element(By.TAG_NAME, ‘tag_name’)
CSSセレクタを指定する場合:find_element(By.CSS_SELECTOR, ‘selector’)
XPathを指定する場合:find_element(By.XPATH, ‘xpath’)
find_element_by_*(“”)とは異なり、find_element(By.*,””)はByオブジェクトが必要です。
たとえば、idが『hello』の要素を探す場合は、次のようにコードを書くことができます。

from selenium.webdriver.common.by import By
driver.find_element(By.ID, "hello")

5.3. get_attribute

Seleniumのget_attribute()メソッドは、要素の属性値を取得することができます。例えば、aタグの属性であるhrefを指定してURLを取得することができます。

driver.find_element(By.TAG_NAME, 'a').get_attribute("href")

5.4. ShadowRoot

Shadow DOMは、Webコンポーネント技術の一部であり、Webページのドキュメントツリー内にある階層的なWebコンポーネントを表現するための技術です。ShadowRoot内のHTML要素にアクセスするには、shadow_rootを使用します。

# idが"shadow"のWebコンポーネントを取得する
driver.find_element(By.ID,"shadow").shadow_root

注意

私は最新バージョンで試しました。また、seleniumのバージョンが4.0.0では動作しませんでした。

6. 入力・クリック・削除

6.1. click

Seleniumのclick()メソッドを使用すると、要素をクリックすることができます。以下ではaタグをクリックする方法を示します。

driver.find_element(By.TAG_NAME, 'a').click()

6.2. send_keys

Seleniumのsend_keys()メソッドを使用すると、テキストフィールドやテキストエリアなどのフォーム要素に文字列を入力することができます。以下ではinputタグに入力する方法を示します。

driver.find_element(By.TAG_NAME, 'input').send_keys('おはよう こんにちは')

6.3. clear

Seleniumのclear()メソッドを使用すると、テキストフィールドやテキストエリアなどのフォーム要素の現在のテキストをクリア(削除)することができます。以下ではinputタグをクリアする方法を示します。

driver.find_element(By.TAG_NAME, 'input').clear()

7. エラー

seleniumで遭遇する可能性のあるエラーや警告についてまとめておきましたので、こちらもぜひ読んでください。

7.0.1. python selenium error・警告集

PR