作为提高Python技能的一部分,我现在正在尝试登录一个我经常访问的网站并给自己发送一条私信,然后退出。目前为止,我已经成功登录(使用urllib、cookiejar和urllib2)。但是,我无法弄清楚如何填写所需的表单以发送消息。
该表单位于/messages.php?action=send。发送消息需要填写三个文本字段,分别是name、title和message。此外,还有一个提交按钮(名为“submit”)。
我应该如何填写这个表单并发送它?
作为提高Python技能的一部分,我现在正在尝试登录一个我经常访问的网站并给自己发送一条私信,然后退出。目前为止,我已经成功登录(使用urllib、cookiejar和urllib2)。但是,我无法弄清楚如何填写所需的表单以发送消息。
该表单位于/messages.php?action=send。发送消息需要填写三个文本字段,分别是name、title和message。此外,还有一个提交按钮(名为“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,并且您只需要针对一个网站执行此操作,请查看页面的源代码并查找。
<form method="POST" action="some_address.php">
将此地址作为urllib2.urlopen
的参数。
您必须意识到submit
按钮的作用。
它只是向表单中定义的action
URL发送一个Http
请求。
因此,您要做的就是使用urllib2
模拟这个请求。
您可以使用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()