2011-12-19 19 views
14

私は今、頻繁にウェブサイトにサインインしようとしています。でる。これまでのところ、私はログインすることができました(urllib、cookiejar、urllib2を使用)。しかし、私は自分自身にメッセージを送るために必要な書式を記入する方法を考えることはできません。Pythonを使用してウェブサイトにサインインし、フォームに記入してからサインアウトしてください

フォームは/messages.php?action=sendにあります。メッセージの送信には、名前、タイトル、メッセージという3つのテキストフィールドが必要です。さらに、「送信」という名前の送信ボタンがあります。

このフォームに記入して送信するにはどうすればよいですか? URLはフォームが配置されているURLであれば、あなたはただ1つのウェブサイトのためにこれを実行する必要があります。

+0

[(試験せず)Pythonスクリプトを介してウェブページ内のフォームの値を記入]の可能な重複(http://stackoverflow.com/questions/1555234/fill-form-values-in-a-web -page-via-a-python-script-not-testing) – ravi404

答えて

11
import urllib 
import urllib2 

name = "name field" 
data = { 
     "name" : name 
     } 

encoded_data = urllib.urlencode(data) 
content = urllib2.urlopen("http://www.abc.com/messages.php?action=send", 
     encoded_data) 
print content.readlines() 

自分のフォームはあなたのコメントに

回答を提出されたURLにhttp://www.abc.com/messages.php?action=sendを置き換えます、ページのソースコードを見て、

<form method="POST" action="some_address.php"> 

を見つけ、urllib2.urlopen

アンのためのパラメータとして、このアドレスを置きますd submitボタンが何を実現しなければなりません。 フォームにactionで定義されたURLにHttpリクエストを送信するだけです。 それでは、このリクエストをシミュレーションすることです。urllib2

+0

Whoop、申し訳ありません。フォームが置かれているページです。 (私の愚かなiPodのおかげで次のコメントに続きます) – Matthew

+0

(続き)ありがとう!それはうまくいくように見えます。私は午前中にそれを試してみます - フォームを提出するか、または "提出"のためのデータリストに何かを入れなければなりませんか? – Matthew

+0

答えを編集して返信しました –

7

mechanizeライブラリが必要です。これにより、ウェブサイトをブラウズしたり、フォーム/リンクを送信したりするプロセスを簡単に自動化できます。私がリンクしたサイトには、非常に良い例とドキュメントがあります。

+0

:D今すぐインストールしました。ありがとう – Matthew

1

(Chromeウェブ開発ツールやFirefox/Firebugなどを使用して)リクエストを処理し、希望のフォームデータを含むPOSTリクエストを模倣してください。

Andrewが紹介した素晴らしい機械化ライブラリに加えて、私はBeautifulSoupを使ってHTMLを解析することをお勧めします。

機械化を使用したくない場合でも、HTTPリクエストを作成するための簡単でクリーンなソリューションが必要な場合は、奨励しているrequestsモジュールをお勧めします。

3

機械化を使用すると、これで簡単に作業できます。これにより、フォームの送信作業が楽になります。 HTMLフォームのソースコードを見て、名前、タイトル、メッセージなどのパラメータをチェックすることを忘れないでください。

import mechanize 
br = mechanize.Browser() 
br.open("http://mywebsite.com/messages.php?action=send") 
br.select_form(nr=0) 
br.form['name'] = 'Enter your Name' 
br.form['title'] = 'Enter your Title' 
br.form['message'] = 'Enter your message' 
req = br.submit() 
関連する問題