Python

Python+SeleniumでHTML要素をテキストやリンクURLで取得するには?

Python+SeleniumでHTML要素をテキストやリンクURLで取得するには?

「Python + Selenium」には、リンクテキストでアンカーリンクを探す「find_element_by_link_text()」があります。
では、リンクURLの部分一致でアンカーリンクを探すには?
そして、アンカーリンク以外のHTML要素をテキストで探すには?
前に調べた時からさらに調査を進め、ようやくできるようになりました。
その方法をシェアします。

 

リンクURLの部分一致でアンカーリンクを探すには?

XPathの指定方法を工夫します。
具体的には、//a[contains(@href,"")]を使います。

from selenium import webdriver
 
driver = webdriver.Chrome(【chromedriver.exeのパス】)
 
print(driver.find_element_by_xpath('//a[contains(@href,"検索したいリンクURL(部分一致)")]'))

完全一致の場合はcontainsを使いません。

from selenium import webdriver
 
driver = webdriver.Chrome(【chromedriver.exeのパス】)
 
print(driver.find_element_by_xpath('//a[@href="検索したいリンクURL(完全一致)")]'))

 

テキストでアンカーリンク以外のHTML要素を取得するには?

やはり、XPathで「//タグ名[contains(text(),"")]」を使います。

from selenium import webdriver
 
driver = webdriver.Chrome(【chromedriver.exeのパス】)
 
# 仮にDIV要素を探す場合
print(driver.find_element_by_xpath('//div[contains(text(),"検索したいテキスト(部分一致)")]'))
print(driver.find_element_by_xpath('//div[text()="検索したいテキスト(完全一致)")]'))

 

まとめ

「Python + Selenium」ではXPathを工夫することで、リンクURLの部分一致でアンカーリンクを探したり、テキストでアンカーリンク以外のHTML要素を取得したりできます。

ちなみに、今まで使っていた「iMacros」は簡単に取得出来ていました。

// アンカーリンクをリンクURLの部分一致で探す
TAG POS=1 TYPE=A ATTR=HREF:*探したいURL文字列*
 
// テキストが「テスト」のDIV要素を探す
TAG POS=1 TYPE=DIV ATTR=TXT:テスト

ちょっと大変になりましたが、きっちり指定しておいた方がサイトデザインの変更に対応しやすいので、頑張ってパッと使えるレベルまで持っていきたいです。

-Python
-, , , , , , , , , , , ,