Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Python スクレイピング】find_element、find_elementsにて要素を取得する方法(name、id、class、tagName属性)(SeleniumVer4.6以降)


PythonSeleniumを利用してウインドウアクセスする場合には、まずは、対象のウインドウを表示させるところからはじまります。

 

それについては、過去記事で記載しました.

 

 

kuku81kuku81.hatenablog.com

 

 

 

また、その後必要になってくるウインドウ内の要素取得とその操作についても過去記事で説明しました。

 

 

kuku81kuku81.hatenablog.com

 

 

ただし、その時の内容は1つの要素取得という内容でした。

実際にはname属性、class属性などは同じ名前のものが複数存在する場合もありますので今回の内容はそのような場合の取得方法についてのものになります。

 

簡単な使用例として載せているものは、Chrome用になりますがドライバーの設定以外はEdgeなどでも同様です。

 

 

 

目次

 

ウインドウを開いた後に要素を取得する方法としてはいくつかあります。

 

 

1.属性値から要素を取得する方法(条件にあう要素1つ取得)

 

要素1つ取得については過去記事で説明していますが再掲致します。

条件にあう要素が複数あった場合には先頭の要素が取り出されます。

 

 

1-1.name属性

 

 

driver.find_element(By.NAME, "name_a")

 

要素についているname属性値から要素を取得する場合には、

 

driver.find_element(By.NAME,"name属性値")

 

のような形式で指定します。

 

 

1-2.class属性

 

 

driver.find_element(By.CLASS_NAME, "class_a")

 

要素についているclass属性値から要素を取得する場合には、

 

driver.find_element(By.CLASS_NAME,"class属性値")

 

のような形式で指定します。

 

 

1-3.id属性

 

 

driver.find_element(By.ID, "id_a")

 

要素についているid属性値から要素を取得する場合には、

 

driver.find_element(By.ID,"id属性値")

 

のような形式で指定します。

 

name属性値の場合には、画面内に同じnameが複数存在する場合がありますが、id属性値は1つしか存在しない属性値になるため、対象の要素にid属性値がついていればこちらを指定した方がいいかもしれません。

 

 

1-4.tagName属性

 

 

driver.find_element(By.TAG_NAME, "tagName_a")

 

要素についているtagName属性値から要素を取得する場合には、

 

driver.find_element(By.TAG_NAME,"tagName属性値")

 

のような形式で指定します。

 

 

 

2.属性値から要素を取得する方法(条件にあうすべての要素取得)

 

対象内に同じname属性やclass属性の項目が複数存在した場合には、これまでの要素1つ取得では厳しくなりますので、その場合は条件に合った同じ名称の要素をすべて取得しておいてその中から必要な要素を取得するなどを行っていくことになります。

 

 

2-1.name属性

 

 

driver.find_elements(By.NAME, "name_a")

 

要素についているname属性値から要素を取得する場合には、

 

driver.find_elements(By.NAME,"name属性値")

 

のような形式で指定します。

 

取得した結果はリスト型で返されます。

 

条件に合う要素がなかった場合には空のリストが返されます。

 

Google検索画面でのname属性の要素取得の例としては以下のようになります。

要素取得したものをprint文で印字しています。

ドライバーの設定はChrome用にて記載しています。

 

selenium ver.4.6以降の場合)

from selenium import webdriver
from selenium.webdriver.common.by import By

######################################################################
driver = webdriver.Chrome() ###################################################################### driver.get("https://www.google.co.jp") elements = driver.find_elements(By.NAME, "q") print(elements)
driver.close() driver.quit()

 

(selenium ver.4.6以前の場合)

webdriverの設定程度の違いですがselenium ver.4.6以前の場合は以下の過去記事で紹介しています。

 

kuku81kuku81.hatenablog.com

 

 

2-2.class属性

 

 

driver.find_elements(By.CLASS_NAME, "class_a")

 

条件に合った同じclass属性値の要素をすべて取得する場合には、

 

driver.find_elements(By.CLASS_NAME,"class属性値")

 

のような形式で指定します。

 

以下name属性と同様です。

 

 

2-3.id属性

 

 

driver.find_elements(By.ID, "id_a")

 

要素についているid属性値から要素を取得する場合には、

 

driver.find_elements(By.ID,"id属性値")

 

のような形式で指定します。

 

以下name属性と同様です。

 

 

2-4.tagName属性

 

 

driver.find_elements(By.TAG_NAME, "tagName_a")

 

要素についているtagName属性値から要素を取得する場合には、

 

driver.find_elements(By.TAG_NAME,"tagName属性値")

 

のような形式で指定します。

 

以下name属性と同様です。

 

 

 

以上が、PythonSeleniumを使用しての複数(すべての)要素を取得する方法と実施例となります。

 

 

 

関連記事:

【Python】おすすめ学習本ランキング8選 - Django Girls and Boys 備忘録

 

【Python】キーボード、キー入力判定方法 - Django Girls and Boys 備忘録

 

【Python】keyboardライブラリでのキー入力検出に使用可能なキーの種類 - Django Girls and Boys 備忘録