PythonでSeleniumを利用してウインドウアクセスする場合には、まずは、対象のウインドウを表示させるところからはじまります。
それについては、過去記事で記載しました.
また、その後必要になってくるウインドウ内の要素取得とその操作についても過去記事で説明しました。
ただし、その時の内容は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用にて記載しています。
(Chrome用のドライバーchromedriver.exeは同じフォルダに入れた状態で実行)
from selenium import webdriver from selenium.webdriver.chrome import service as fs import os from selenium.webdriver.common.by import By ###################################################################### path_driver = os.getcwd()+'\chromedriver.exe' # ドライバー指定でChromeブラウザを開く chrome_service = fs.Service(executable_path=path_driver) driver = webdriver.Chrome(service=chrome_service) ###################################################################### driver.get("https://www.google.co.jp") elements = driver.find_elements(By.NAME, "q") print(elements)
driver.close() driver.quit()
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属性と同様です。
以上が、PythonでSeleniumを使用しての複数(すべての)要素を取得する方法と実施例となります。
【Python】おすすめ学習本ランキング8選 - Django Girls and Boys 備忘録
【Python】キーボード、キー入力判定方法 - Django Girls and Boys 備忘録
【Python】keyboardライブラリでのキー入力検出に使用可能なキーの種類 - Django Girls and Boys 備忘録
【Python】Python、Selenium関連情報一覧(ダウンロード、インストール手順、各種やり方、使い方など) - Django Girls and Boys 備忘録
【Python Selenium】各ブラウザ用のドライバーを自動アップデートする方法 - Django Girls and Boys 備忘録
【PythonからWeb操作】seleniumのインストール手順 - Django Girls and Boys 備忘録
【PythonによるExcelファイルの読み書き】PythonのダウンロードからExcelファイルの読み書きまでの一通りすべての方法 - Django Girls and Boys 備忘録
【Python Selenium】ウインドウ表示時などでのWaitの方法、待機方法 - Django Girls and Boys 備忘録
【Python Selenium】要素の属性名から属性値を取得する方法 - Django Girls and Boys 備忘録
【Python Selenium】スクレイピングのためのWebサイトアクセス例(Google検索キーワード入力など) - Django Girls and Boys 備忘録
【Python Selenium】サイトアクセス例(Google検索、スクレイピング、Excel書き込み) - Django Girls and Boys 備忘録