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の場合の例を載せておきます。
以下の例の中では、os.getcwd()はカレントディレクトリを表しています。
実行する場合には、chromedriver.exeを同じディレクトリ内(カレントディレクトリ)に入れた状態で実行してください。
from selenium import webdriver selenium.webdriver.common.by import By from selenium.webdriver.chrome import service as fs
import os
path_driver = os.getcwd()+'\chromedriver.exe'
# ドライバー指定でChromeブラウザを開く
chrome_service = fs.Service(executable_path=path_driver)
driver = webdriver.Chrome(service=chrome_service)
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の場合は以下になります。
5~8行目のWebドライバーの設定の箇所が違うだけです。
from selenium import webdriver selenium.webdriver.common.by import By from selenium.webdriver.chrome import service as fs
import os
path_driver = os.getcwd()+'\msedgedriver.exe'
# ドライバー指定でEdgeブラウザを開く
edge_service = fs.Service(executable_path=path_driver)
driver = webdriver.Edge(service=edge_service)
driver.get('https://**********.***/')
#子要素の名前を「abcdef」とした場合の指定例
child_element = driver.find_element(By.NAME, "abcdef")
#1階層上の親要素を指定して要素取得
parent_element = element.find_element(By.XPATH, "..")
# タブを閉じる driver.close() driver.quit()
上記例では、
4行目までで必要なライブラリのインポートを行っています。
5~8行目はChrome用またはEdge用のドライバー設定となります。
このdriverを使用して、9行目でdriver.getの後にオープンしたいURLを指定することで画面を開いています。
その後、11行目で要素の名前が「abcdef」という子要素を探索して「child_element」に設定しています。
13行目で1階層上の親要素を指定して要素取得し「parent_element」に設定しています。
15、16行目で開いたウインドウを閉じて終了させています。
以上がSeleniumで、ある要素の親要素を取得する方法になります。