2011-07-25 9 views
0

私はPythonのmechanizeモジュールを使ってHTML POSTフォームリクエストを送信しようとしています。これを行うには、<から>要素を選択する必要がありますが、そのオプションはJavascriptによって動的に読み込まれます。提起機械化、しかしJavascriptがロードされたWebページをスクラップする<select>オプション

browser.find_control(name="formName", kind="list").value = ["optionValue"] 

:私は、私が使用したい<選択>オプションを知っているので

は、私のような何かをやって、未ロードされたオプションの値を使用してフォーム要求を構築しようとしましたItemNotFoundErrorは、値が無効であると判断するためです。また、私はlistvalueに追加しようとするオプション値は、私はそれを設定したいが、これも動作しません。任意のアイデアどのようにこの問題を解決し、Javascriptのロードされた値にコントロールを設定する?

+0

コードを見ると、コントロールにはリストである '.items'プロパティがあります。どのタイプのオブジェクトがそこに入る必要があるかを検討する必要があります。 https://github.com/jjlee/mechanize/blob/master/mechanize/_form.py#L1576。または、必要な値がすべて分かっている場合は、フォームの機械化をスキップしてPOSTリクエストを直接作成します。 –

答えて

0

おそらくあなたはすでにこれをしなかったが、あなたは<select>リストにオプションを追加しようとすると、常に完全に動作しません。代わりにinnerHMTL=...のJavaScriptから面倒document.createElementparentNode.appendChild方法、jQueryのhtml(..)やjQueryの$('<..>..</..>')を使用しますか、正しく(例えばあなたの場合はおそらく)。

オプションを動的に読み込むと、ポストに含める必要があるフォームの非表示フィールドにトークン(例:csrf)を挿入することもできます。その場合は、投稿を作成する前にオプションの読み込みを開始するか待機する必要があります。

関連する問題