はじめに
Selenium(python)を使って要素を取得しようとしているときに
NoSuchElementException: An element could not be located on the page using the given search parameters.
というメッセージが表示されました。
作っていたプログラムではWindowsを自動化するときに使用していましたが、おそらくこのメッセージはWebクローラーやスクレイピングでも発生すると思います。
原因
表示されているメッセージは
NoSuchElementException: An element could not be located on the page using the given search parameters.
「与えられたキーワード(クラス名やIDなど)に合致する要素はページ内にありません」と言ってます。
解決方法
解決方法として2点注意する事があります。
まず1つ目ですが、find_elementなどで「取得しようとした要素の名称が誤っていないか」どうかを確認。
Webスクレイピングなら例えばGoogle ChromeのF12を押してディベロッパーツールで要素を確認。
(Windowsの自動化ならinspect.exeで指定した要素の名前があっているか)
2つ目としては要素があるのに取得できていない場合。
この場合は取得時に「Web画面やアプリがきちんと描画(表示)出来ているか」確認してみて下さい。
Webページでも重たいページなどでは少し待たないと要素が取れない場合があります。
Seleniumで描画するまで待つ「implicitly_wait」等いくつかのライブラリがありますのでそちらで対応するか、Sleepなどを入れて一定時間待つ処理を入れてみてください。
実際、このエラーメッセージが出る時はこちらのケースが多いです。
また、Webページ遷移やWindowアプリの場合に新しいウインドウを開く時は、少し待ち時間を入れた方がいいです。
僕が遭遇したこのエラーケースはWindowアプリがVPN接続を行うのに10秒ほど待たないと行けなかったのですが、Waitする時間に余裕を持たせておらずエラーが発生していました。
おわりに
今回はSeleniumでのエラーメッセージについてでした。
このエラーメッセージはよく出会うかもしれません。
少し待ち時間を入れてあげるのがポイントかと思います。
最後までお読みいただきありがとうございました。
この記事がお役に立ったのならば嬉しいです。