Selenium で最近ハマった3つのエラー
Seleniumを使用して、Webを3階層、再帰的にクローリングするプログラムを書いたのですが、3つぐらいハマった個所があったので、ブログに書きとめておきます。
現象1:ページを戻るとfind_elementしたelementがもうないよと言われる
エラーメッセージ:The element is no longer attached to the DOM.
原因:ページを戻ると、html内のinputタグのクラス名が動的に変わっていた。
対応方法:戻ったのち、変わったクラス名で新たにfind_element()を行う。
$driver->go->back()で戻ると、DOMが壊れるので新たに$driver->get_page_sourceから。。。
現象2:ページを戻って、send_keys()で文字を送信しても、inputタグのvalueの値が変更されない。
エラーメッセージ:なし
対応方法:$element->send_keys(文字列)で送信する前に該当のelementを
$element->clear()であらかじめ、クリアしておく。
現象3:3つの数字をsend_keys()で送信すると、2つの数字しか表示されず、ログに出力したget_value()では3つの数字が入っている
エラーメッセージ:入力できない文字があります。
原因:ブラウザー内で入力した文字列のバリデーションチェックで数字3桁であるかどうかチェックしています。で、エラーとなっているのですが、原因は保存したキャラクター形式が間違っていました。
対応方法:正しいフォーマットで入力ファイルを修正した
正しいデータのフォーマットはUTF(BOMなし)形式
間違ってたデータのフォーマットはUTF(BOMあり)形式
最初は、タイミングかなと思っていたのですが、set_implicit_wait_timeoutを使用しているし、成功している入力ファイルがあるので、タイミングでないことに気が付きました。
idは変わらないので、idでfindしてみましたが、取得できませんでした。
言い訳になるかもしれないですが、クラス名が似たような文字列で50文字ぐらいあるんです。