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"という数字はどうわかったかといいますと、次の画像にまとめています。
リスト(配列)は0スタートなので、コマンドFで調べた「出現順番」から-1することを忘れずに。