2016-11-28 11 views
0

PythonのバージョンのSeleniumを使用して要素選択オプションを反復処理しています。ウェブサイト上ではうまく動作しますが、別のエラーでエラーが発生します。Message: stale element reference: element is not attached to the page document私はもちろんそれを見ましたが、私が見つけた回答はうまくいかなかったのです。私はtime.sleep()を使用してページが読み込まれるのを待っています。ブラウザにロードされているのがわかります。私はそれをどうすればいいのか分かりません。Selenium:古い要素の参照:要素がPythonのページ文書に添付されていません

は、それがコードにどのように見えるか:それは正常に動作します

options = Select(driver.find_element_by_xpath("my_element's_xpath")).options 
for option in options: 
    option.click() 
    sleep(5) 

最初の実行は、セカンドランは、私はエラーを取得します。ここで

はクロムでの開発ツールで選択要素です: screenshot 私はそれが最初の選択オプションは、その周りに<option>タグを持っていないと何かをする必要がある場合があります信じていますが、私はDOMからそれを削除するかどうかはわかりません。

+0

前(from time import sleepから取られた)sleep(2)を追加するには十分だったが、選択項目がリロードするページが発生することはありませんが、よろしいですか?その場合、 'options'変数に格納されたDOM要素はもはや利用できなくなります。はい、新しいページには(おそらく)同じ要素がありますが、別の要素になります。 – J0HN

+0

ああ、ネットワークをチェックして、はい、ページをリロードします。その周りに道がありますか?編集:オプション名を1つの方法で保存してから、この名前を新しいオプションセットに適用すると思いますか? –

+0

はい、実行するたびに、選択(...)を更新する必要があります。オプションのリストよりも有効です。 – J0HN

答えて

0

私のプログラムのコードは、私が示したものより少し大きいです、そして、J0HNが指摘したように、それはブラウザをリフレッシュさせました。私はそれを一種のハックで解決し、参照リストに各オプション値を格納し、それを反復処理しました。コードは単語よりも優れているので、以下を見てください。

for option in options: 
    options_reference.append(option.text) 

for option in options_reference: 
    option_element = driver.find_element_by_xpath(
      "//*[contains(text(), '" + option + "')]") 
    option_element.click() 

これは、XPathをオプションタグのみに絞り込むことでさらに改善できます。

関連する問題