私はPythonとSeleniumを使ってウェブサイトを移動しています。Python/Seleniumでトリッキーなドロップダウンオプションを選択
ページでは、一連の5つのドロップダウンボックスを使用して作業を進めています。各ドロップダウンボックスのオプションは、前のドロップダウンから選択した内容に基づいて動的に生成されます。
私はユーザーが状態を選択する必要がある3番目のドロップダウンに固執しています。以下のように...
<select name="state" class="pulldown" id="state" onchange="[javablob]">
<option value="">Select a State</option>
<option value='AK_N'> AK</option>
<option value='AL_N'> AL</option>
<option value='AR_Y'> AR</option>
:ロードされたとき は、検査さHTMLは次のようになります。
これまでの私のコードは次のとおりです。
waitforstate = WebDriverWait(driver,30).until(EC.presence_of_element_located((By.ID,"state")))
driver.implicitly_wait(10) #added because the ID is found but the states aren't loaded yet
state = Select(driver.find_element_by_id('state'))
しかし、私が欲しいの状態が動作しない選択:
:state.select_by_visible_text("TN")
は...
これを行うMessage: Given xpath expression ".//option[normalize-space(.) = "TN"]" is invalid:
WrongDocumentError: Node cannot be used in a document other than the
one in which it was created
を与えます
state.select_by_value("TN_Y")
から状態を選択するためのインデックスがない...
Message: Given css selector expression "option[value ="TN_Y"]" is invalid:
TypeError: can't access dead object
を与えます。
私はオプションがロードされているものを表示するようにしてみてください。
all_options = state.options
for option in all_options:
print("Value is: %s" % option.get_attribute("value"))
...何も印刷ではなく、さらにデフォルトのオプション。エラーなしで実行されて...
state.select_by_visible_text("Select a State")
print "Select a state selected"
state._unsetSelected
print "Now it's unselected"
:しかし、私がこれを使用して、デフォルトのオプションを選択して、選択解除することができます表示されます。
私は、それが処理されたか確認するために、ページを移動するには、FirefoxのセレンIDEを使用し、私が何をしないのですid=state, label=TN.
でそれを選択することができましたか?
ありがとうございました。私はこれらのツールがこのような状況でどのように機能を追加するのか分かりません。私の問題はそれ自体が擦り傷ではなく、ドロップダウンフォームを完成させる必要があるスクレイプページにナビゲートしています。 – Suzanne
私は状態のドロップダウンリストがjavascriptで作成されていると思う。私が言ったように、javascriptのレンダリングされた要素は、セレンとは異なって読み込まれなければなりません。この投稿をチェックしてください:http://stackoverflow.com/a/22739613/5808505 –
ありがとうございます。そのメソッドは、私が使っていたメソッドと同じHTMLを、この特定のインスタンスで生成します。それが判明したので、私のエラーは、javascriptで生成された完全なオプションリストをロードするのに十分長い間待機していませんでした。 'driver.implicitly_wait(10)'は十分に待たずに 'sleep(5)'がしました。 – Suzanne