pythonのseleniumで要素の取得をする場合は、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以前の場合はドライバー設定の方法が違い上記ではエラーとなります。この場合の使用例については以下などに載せています。
以上がSeleniumで、ある要素の親要素を取得する方法になります。