Pythonで良くなるための私の探求の一環として、私は頻繁に自分のウェブサイトにサインインし、プライベートメッセージを送信し、サインアウトしようとしています。 (urllib、cookiejar、urllib2を使用して)サインインしますが、メッセージを送信するために必要なフォームに入力する方法がわかりません。
フォームは/messages.php?action=sendにあります。メッセージを送信するために入力する必要があるのは、name、title、messageという3つのテキストフィールドです。さらに、送信ボタン(「submit」という名前)があります。
このフォームに記入して送信するにはどうすればよいですか?
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()
http://www.abc.com/messages.php?action=send
をフォームが送信されるURLに置き換えるだけです
コメントへの返信:URLがフォームのあるURLであり、1つのWebサイトだけでこれを行う必要がある場合は、ページのソースコードを調べて見つけます
<form method="POST" action="some_address.php">
このアドレスをurllib2.urlopen
のパラメーターとして配置します
そして、submit
ボタンが何をするのかを理解する必要があります。 Http
リクエストをフォームのaction
で定義されたURLに送信するだけです。したがって、あなたはurllib2
でこのリクエストをシミュレートすることです
mechanize ライブラリが必要です。これにより、Webサイトの閲覧やフォームの送信/リンクのフォローを簡単に自動化できます。私がリンクしたサイトには、非常に良い例とドキュメントがあります。
Mechanizeを使用して、これを簡単に操作できます。これにより、フォームを送信する作業が容易になります。 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()
行われたリクエストを解決してみて(例:Chrome Web開発者ツールを使用するか、Firefox/Firebugを使用)、希望するフォームを含むPOSTリクエストを模倣するデータ。
Andrewが言及した優れた機械化ライブラリに加えて、HTMLを解析するために BeautifulSoup を使用することをお勧めします。
Mechanizeを使用したくないが、HTTP要求を作成するための簡単でクリーンなソリューションが必要な場合は、excellend requests モジュールをお勧めします。
ウェブページにデータを投稿するには、次のようなcURLを使用します。
curl -d Name="Shrimant" -d title="Hello world" -d message="Hello, how are you" -d Form_Submit="Send" http://www.example.com/messages.php?action=send
「-d」オプションは、次の項目が http://www.example.com/messages.php?action=send でサーバーに送信されるデータであることをcURLに伝えます