2011-12-19 56 views
14

作爲我追求更好的Python的一部分,我現在嘗試登錄到我經常訪問的網站,發送自己的私人消息,然後簽名出。到目前爲止,我已經設法登錄(使用urllib,cookiejar和urllib2)。但是,我無法解決如何填寫所需表格來發送消息。使用Python登錄網站,填寫表格,然後退出

表單位於/messages.php?action=send。要發送消息需要填寫三件事情:名稱,標題和消息的三個文本字段。此外,還有一個提交按鈕(名爲「提交」)。

如何填寫此表格併發送?

+0

([經由Python腳本(未測試)在網頁中填寫表單值]的可能重複http://stackoverflow.com/questions/1555234/fill-form-values-in-a-web -page-via-python-script-not-testing) – ravi404 2014-01-23 08:26:14

回答

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:如果URL是你的表格所在的URL,你只是需要一個網站做到這一點,看網頁的源代碼,並找到

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

,並把這個地址作爲參數urllib2.urlopen

的d你必須意識到按鈕所做的是submit。 它只是發送一個Http請求到action在表單中定義的url。 所以你要做的是模擬這個請求與urllib2

+0

吶喊,對不起。這是表單所在的頁面。 (在下一個評論中繼續感謝我的愚蠢的iPod) – Matthew 2011-12-19 12:04:10

+0

(續)謝謝!這看起來會起作用。我會在早上嘗試 - 也會提交表格,還是必須在「提交」數據列表中加入一些內容? – Matthew 2011-12-19 12:05:24

+0

我回答了編輯答案 – 2011-12-19 12:09:22

7

你想mechanize庫。這可讓您輕鬆自動瀏覽網站並提交表單/以下鏈接。我所鏈接的網站有很好的例子和文檔。

+0

:D我現在已經安裝好了,我會玩一玩!感謝:D – Matthew 2011-12-20 02:32:23

1

嘗試確定所做的請求(例如,使用Chrome網絡開發者工具或Firefox/Firebug)並模擬包含所需表單數據的POST請求。

除了由安德魯提到的偉大的機械庫,如果我還建議你使用BeautifulSoup解析HTML。

如果你不想使用機械化,但仍然想要一個簡單,乾淨的解決方案來創建HTTP請求,我推薦excellend 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()