使用 Python 登录网站,填写表格,然后退出

Posted

技术标签:

【中文标题】使用 Python 登录网站,填写表格,然后退出【英文标题】:Using Python to sign into website, fill in a form, then sign out 【发布时间】:2012-01-23 13:28:19 【问题描述】:

为了更好地使用 Python,我现在正尝试登录我经常访问的网站,给自己发送一条私人消息,然后退出。到目前为止,我已经成功登录(使用 urllib、cookiejar 和 urllib2)。但是,我无法弄清楚如何填写所需的表格以向自己发送消息。

该表单位于 /messages.php?action=send。要发送消息,需要填写三项内容:三个文本字段,分别命名为名称、标题和消息。此外,还有一个提交按钮(名为“提交”)。

我如何填写并发送此表格?

【问题讨论】:

Fill form values in a web page via a Python script (not testing)的可能重复 【参考方案1】:

要将数据发布到网页,请使用类似这样的 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”选项告诉 cURL 下一项是要发送到服务器 http://www.example.com/messages.php?action=send 的一些数据

【讨论】:

【参考方案2】:

您可以使用 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()

【讨论】:

【参考方案3】:

尝试计算发出的请求(例如,使用 Chrome Web 开发人员工具或使用 Firefox/Firebug)并模仿包含所需表单数据的 POST 请求。

除了 Andrew 提到的出色的 mechanize 库之外,我还建议您使用 BeautifulSoup 来解析 HTML。

如果您不想使用 mechanize 但仍想要一个简单、干净的解决方案来创建 HTTP 请求,我建议您使用出色的 requests 模块。

【讨论】:

【参考方案4】:
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,而你只需要对一个网站做这个,查看页面的源代码并找到

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

并把这个地址作为urllib2.urlopen的参数

您必须了解submit 按钮的作用。 它只是向表单中action 定义的url 发送Http 请求。 所以你要做的就是用urllib2模拟这个请求

【讨论】:

哎呀,对不起。它是表单所在的页面。 (感谢我愚蠢的 iPod,在下一条评论中继续) (续)谢谢!看起来它会起作用。我会在早上尝试 - 是否也提交表单,还是我必须在数据列表中添加一些内容以供“提交”?【参考方案5】:

您想要mechanize 库。这使您可以轻松地自动化浏览网站和提交表单/以下链接的过程。我链接到的网站有很好的示例和文档。

【讨论】:

:D 我已经安装好了,我会玩一下!谢谢:D 我在尝试导入 mechanize 时收到此错误:Traceback (最近一次调用最后一次): File "", line 1, in import mechanize File "C: \Users\Admin\Desktop\WinPython-64bit-3.6.1.0Qt5\python-3.6.1.amd64\lib\site-packages\mechanize_init_.py",第 119 行,在 from _version import version ModuleNotFoundError: No module named '_version'

以上是关于使用 Python 登录网站,填写表格,然后退出的主要内容,如果未能解决你的问题,请参考以下文章

登录 - 填写表格并提交

怎样登录和退出Linux系统

使用Scrapy Spiders无需下载即可处理图像

使用 casperJS 登录网站

使用BeautifulSoup抓取aspx网站

点击填写表格?