web-dev-qa-db-ja.com

Pythonを使用してWebサイトにサインインし、フォームに入力してからサインアウトする

Pythonで良くなるための私の探求の一環として、私は頻繁に自分のウェブサイトにサインインし、プライベートメッセージを送信し、サインアウトしようとしています。 (urllib、cookiejar、urllib2を使用して)サインインしますが、メッセージを送信するために必要なフォームに入力する方法がわかりません。

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

このフォームに記入して送信するにはどうすればよいですか?

20
Matthew
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でこのリクエストをシミュレートすることです

14
Jan Vorcak

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

11

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()
8
Prashant Dey

行われたリクエストを解決してみて(例:Chrome Web開発者ツールを使用するか、Firefox/Firebugを使用)、希望するフォームを含むPOSTリクエストを模倣するデータ。

Andrewが言及した優れた機械化ライブラリに加えて、HTMLを解析するために BeautifulSoup を使用することをお勧めします。

Mechanizeを使用したくないが、HTTP要求を作成するための簡単でクリーンなソリューションが必要な場合は、excellend requests モジュールをお勧めします。

2
Danilo Bargen

ウェブページにデータを投稿するには、次のような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に伝えます

2
Smshrimant