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