🎉

SeleniumとかでCSS指定ではなくテキストの値を条件に要素を取得したい

2021/02/01に公開

例えばこんな要素があったとして、

<div class="hoge">Hello<div>

このdivをCSS指定ではなく「テキストが"Hello"であること」という条件で取得したい。どうすれば良いのかしばらく悩んだ結果、CSS SelectorではなくXPathを使えばできることに気づいた。

div[text()="Hello"]

これでいけます。text()以前の部分では絞り込めるだけ絞り込んでおきましょう。
Selenium Webdriverならこんな感じ。

driver.find_element(By.XPATH, '//div[text()="Hello"]')

生のJSだとquerySelectorがxpathに対応していないため、document.evaluate()を使う必要がある。Puppeteerなら$x。使い方がちょっとややこしいのでMDNを頑張って読みましょう。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Introduction_to_using_XPath_in_JavaScript

参考:
https://stackoverflow.com/questions/1520429/is-there-a-css-selector-for-elements-containing-certain-text
https://kurozumi.github.io/selenium-python/locating-elements.html

Discussion