LoginSignup
0
3

More than 1 year has passed since last update.

省略形だとfind_elementできないXpathをfindしたい(Selenium)

Last updated at Posted at 2021-07-09

Seleniumにおいて、idなどがない要素を選ぶ時、Xpathを使うことが多いと思います。
Xpathは省略しない絶対パス(/html/body/div[2]/div[2]/...とつらつら書いてく書き方)で書けば、一意的に要素を指定できますが、推奨されていません(web製作者が少しでも階層の変更をしてしまうと、機能しなくなるためだそうです。)

classやnameなど、複数の属性の組合せで要素を特定できればいいのですが、例えばGoogleトレンドのcsvダウンロードボタンのように、class属性しかなく、かつ同名のclassが何回も使われているような要素はどうやって省略形のXpathで指定すればいいんだろうと迷ったのでメモしておきます。

GoogleトレンドのCSVダウンロードボタンの要素
<i class="material-icons-extended gray">file_download</i>
<!-- "material-icons-extended gray"というクラスはこの後も何回も使われています。-->

こういうときは、find_element_by_xpathではなく、find_element”s”_by_xpath
というように、一旦全ての要素をリストで取得します(↓pythonのコード)。

Seleniumで要素を取得するコード。find_element_by_xpathではなく、find_element"s"_by_xpath
dl_button=driver.find_elements_by_xpath('//i[@class="material-icons-extended gray"]') 

そのあと、リストから番号を指定して、欲しい要素を取り出せばOK。

dl_button[6].click()

この例の"6"という数字はどうわかったかといいますと、次の画像にまとめています。

配列番号の確認:スクリーンショット 2021-07-09 12.40.27.png

リスト(配列)は0スタートなので、コマンドFで調べた「出現順番」から-1することを忘れずに。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3