gaggitのブログ

コーディング、ガジェット、TIPS関連、FX

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文字ぐらいあるんです。