1

SOやその他のソースで見つかったいくつかの簡単な例に基づいて、Python urllib/urllib2を使用して次の方法でフォームを送信しようとしています。

>>> import urllib, urllib2
>>> url = 'http://example.com'
>>> r_params = {'a':'test','b':'hooray'}
>>> e_params = urllib.urlencode(r_params)
>>> user_agent = 'some browser and such'
>>> headers = {'User-Agent': user_agent}
>>> req = urllib2.Request(url, e_params, headers)
>>> response = urllib2.urlopen(req)
>>> data = response.read()

私はこれを機能させることができましたが、私が探している特定のフォームには、「送信」タイプの2つのボタンがあります。例えば:

<b><input type="submit" name="ButtonA" value="SUBMIT"></b>
<b><input type="submit" name="ButtonB" value="LINK"></b>

私が抱えている問題は、現在のコードが間違ったコードを選択した結果だと思います。ButtonAではなくButtonBを送信して応答を得るにはどうすればよいですか?私が読んだもののいくつかは、私が機械化を使用してみることができることを示しているようですが、私は機械化を読んで学ぶ必要なしにこれを単純に保つことを望んでいました。これを行う簡単な方法はありますか、それとも私はそれを吸い上げて実際に時間をかけて自分がしていることを学び、理解する必要がありますか?

4

2 に答える 2

2

その場合、それはかなり単純なはずです-あなたは自分が何をしているのかを正確に調べる必要があります。具体的には、通常はフォーム要素自体によって提供されるデータを使用してPOSTリクエストを送信します(データ引数が指定されている場合、urllib2.urlopenはPOSTリクエストを自動的に送信します)。複数の「送信」入力の場合、アクティブ化された送信入力の名前と値が残りのフォームデータとともに送信されます。

だから、あなたがしなければならないのはそれだけです-データとして「ButtonB」:「LINK」を含めてください。

HTMLがすべてのことをどのように行うかを確認できるクイックリファレンス: http ://www.w3.org/TR/html401/interact/forms.html#submit-format

于 2012-12-07T21:21:24.367 に答える
2

Firefox用のTamperDataのようなツールを使用して、サイトのPOSTがどのように形成されているかを正確に検出することをお勧めします。ボタンの1つをクリックする準備ができる直前に、TamperDataをアクティブにします。起動したら、先に進んで1つをクリックします。POSTはTamperDataに記録されます。それを見つけてクリックします。

下のPOSTDATA行を見つけて、ダブルクリックします。「デコード」ラジオボタンを選択して、HTMLエスケープを削除します。これで、「r_params」ディクショナリを作成するときにコピーする必要がある1:1の参照ができました。たとえば、POSTDATAが次のようになっている場合:

Name        | Value
--------------------
QueryString | test
Page        |
Search      | blah

次に、次のように辞書を作成します。

r_params = {'QueryString': 'test',
            'Page': '',
            'Search':, 'blah'}

個別の送信イベントごとにPOSTDATAがどのように表示されるかを確認すると、送信する適切なディクショナリを作成する方法がわかります。また、正しいURLに投稿していることを確認してください。幸運を!

于 2012-12-07T21:25:46.917 に答える