2012-05-04 10 views
1

私は機械化したウェブサイトとインターフェースしています。このウェブサイトはjavascriptを使用してカスタムフォームを作成し、それを作成した後に送信します。どのように私は機械化、すなわち:フォームを作成し、サイトのjavascriptと同じ入力要素を追加し、それを提出すると同じことを行うことができますか?python mechanize:フォームを作成して提出する

+0

あなたはこれを読んでいますか?:http://search.cpan.org/~petd/WWW-Mechanize-1.66/lib/WWW/Mechanize/FAQ.pod#JavaScript – sgallen

+2

サイトのjavascriptは、最終的にパラメータとURLを構成します。それを提出して結果を得る。この最終段階を試して、中間のJavaScript段階を模倣するのではなく、ストレートPythonスクリプトでその手順を再構築する方が簡単ではないですか? – gauden

+0

@sgallen彼はjsコードを解析して実行したくないので、彼はその機能を模倣したいと思っています。少なくともそれは私が理解したものです... – jadkik94

答えて

1

これは動作するようです:

br.open(URL) 
res = mechanize._form.ParseString(FORM_HTML, BASE_URL) 
br.form = res[1] 
#continue as if the form was on the page and selected with .select_form() 
br['username'] = 'foo' 
br['password'] = 'bar' 
br.submit() 

URLは、訪問したサイトの完全なURLです。 BASE_URLはURLが入っているディレクトリです。FORM_HTML二つの形式を返しますmechanize._form.ParseString何らかの理由により、form要素を持っている任意のHTML、例えば:

<form method='post' action='/login.aspx'> 
    <input type='text' name='username'> 
    <input type='text' name='password'> 
    <input type='hidden' name='important_js_thing' value='processed_with_python TM'> 
</form> 

です。最初は、入力なしでベースURLへのGET要求です。 2番目は、適切に解析された形式FORM_HTMLです。

+0

ソースコードを見ると、mechanizeは、 '

'タグ内にネストされていない入力に対して常に「グローバルフォーム」を作成します。通常の 'Browser.forms'メソッドは、その最初のインデックスの後のフォームを選択するだけです。 – highvolt

関連する問題