Django Girls and Boys 備忘録

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

【Python Selenium】要素の親要素を取得する方法(SeleniumVer4.6以降)

 

pythonseleniumで要素の取得をする場合は、find_element、またはfind_elementsで取得できます。

find_elementの場合は、たとえば以下のようになります。

 

element = driver.find_element(By.NAME, "tagname")

 

このようにして取得した要素elementから1階層上の要素(親要素)を取得したいような場合があるかと思います。

そのような場合にはxpathを使用して以下のようにします。

 

element.find_element(By.XPATH, "..")

 

同様に、2階層上の要素を取得するような場合には以下のようにします。

 

element.find_element(By.XPATH, "../..")

 

以下にChromeの場合の例を載せておきます。

 

SeeleniumではバージョンによってWebドラーバーの設定方法が異なりますが、例として載せている内容はSelenium ver.4.6以降の場合の例となります。

 

Selenium ver.4.6以降の場合)

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

 # ドライバー指定でChromeブラウザを開く
driver = webdriver.Chrome()  
driver.get('https://**********.***/')
#子要素の名前を「abcdef」とした場合の指定例 child_element = driver.find_element(By.NAME, "abcdef")

#1階層上の親要素を指定して要素取得
parent_element = element.find_element(By.XPATH, "..")

# タブを閉じる driver.close() driver.quit()

 

同様にEdgeの場合は以下になります。

4行目のWebドライバーの設定の箇所が違うだけです。

 

(Selenium ver.4.6以降の場合)

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

 # ドライバー指定でChromeブラウザを開く
driver = webdriver.Edge()
driver.get('https://**********.***/')
#子要素の名前を「abcdef」とした場合の指定例
child_element = driver.find_element(By.NAME, "abcdef")

#1階層上の親要素を指定して要素取得
parent_element = element.find_element(By.XPATH, "..")

# タブを閉じる driver.close() driver.quit()

 

上記例では、

 

2行目までで必要なライブラリのインポートを行っています。

 

4行目はChrome用またはEdge用のドライバー設定となります。

 

このdriverを使用して、5行目でdriver.getの後にオープンしたいURLを指定することで画面を開いています。

 

その後、7行目で要素の名前が「abcdef」という子要素を探索して「child_element」に設定しています。

 

9行目で1階層上の親要素を指定して要素取得し「parent_element」に設定しています。

 

11、12行目で開いたウインドウを閉じて終了させています。

 

尚、SeleniumVer4.6以前の場合はドライバー設定の方法が違い上記ではエラーとなります。この場合の使用例については以下などに載せています。

 

kuku81kuku81.hatenablog.com

 

 

以上がSeleniumで、ある要素の親要素を取得する方法になります。