假设,我需要在特定网站上执行一组程序,例如填写一些表格,单击提交按钮,将数据发送回服务器,接收响应,再次根据响应做一些事情并将数据发送回服务器的网站。我知道 python 中有一个 webbrowser 模块,但我想在不调用任何 web 浏览器的情况下执行此操作。它必须是一个纯脚本。
python中是否有可用的模块,可以帮助我做到这一点?
谢谢
假设,我需要在特定网站上执行一组程序,例如填写一些表格,单击提交按钮,将数据发送回服务器,接收响应,再次根据响应做一些事情并将数据发送回服务器的网站。我知道 python 中有一个 webbrowser 模块,但我想在不调用任何 web 浏览器的情况下执行此操作。它必须是一个纯脚本。
python中是否有可用的模块,可以帮助我做到这一点?
谢谢
selenium 会做你想要的,它处理 javascript
你也可以看看mechanize。它旨在处理“有状态的程序化网页浏览”(根据他们的网站)。
所有的答案都是旧的,我推荐,我是请求的忠实粉丝
从主页:
Python 的标准 urllib2 模块提供了您需要的大部分 HTTP 功能,但 API 被彻底破坏了。它是为不同的时间和不同的网络而构建的。执行最简单的任务需要大量工作(甚至方法覆盖)。
事情不应该是这样的。不是在 Python 中。
我认为最好的解决方案是requests和BeautifulSoup的组合,我只是想更新问题,以便它可以保持更新。
Selenium http://www.seleniumhq.org/对我来说是最好的解决方案。您可以使用 python、java 或任何您喜欢的编程语言轻松对其进行编码。和转换成程序的简单模拟。
有很多内置的 python 模块可以帮助解决这个问题。例如urllib和htmllib。
如果你改变你接近它的方式,问题会更简单。您说您要“填写一些表格,单击提交按钮,将数据发送回服务器,接收响应”,这听起来像是一个四个阶段的过程。
实际上,您需要做的是将一些数据发布到网络服务器并获得响应。
这很简单:
>>> import urllib
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params)
>>> print f.read()
(示例取自 urllib 文档)。
您对响应的处理取决于 HTML 的复杂程度以及您想要对其执行的操作。您可能会使用一两个正则表达式来解析它,或者您可以使用 htmllib.HTMLParser 类,或者可能是更高级的更灵活的解析器,例如Beautiful Soup。
不要忘记zope.testbrowser它是mechanize的包装器。
zope.testbrowser 提供了一个易于使用的可编程网络浏览器,特别注重测试。
我发现iMacros Firefox 插件(它是免费的)运行良好。
它可以通过 Python 使用 Windows COM 对象接口实现自动化。这是来自http://wiki.imacros.net/Python的一些示例代码。它需要Python Windows 扩展:
import win32com.client
def Hello():
w=win32com.client.Dispatch("imacros")
w.iimInit("", 1)
w.iimPlay("Demo\\FillForm")
if __name__=='__main__':
Hello()
我发现(并且目前正在实施)的最佳解决方案是: - 使用 selenium webdriver 在 python 中的脚本 - PhantomJS 无头浏览器(如果使用 firefox,您将有一个 GUI,并且会更慢)
您可能需要urllib2。它可以处理诸如 HTTPS、cookie 和身份验证之类的事情。您可能还希望BeautifulSoup帮助解析 HTML 页面。
你可以看看上一个意大利语 pycon (pdf) 中的这些幻灯片:作者列出了大部分用于在 python 中进行抓取和自动浏览的库。所以你可以看看它。
我非常喜欢斜纹布(已经有人建议了),它是由鼻子的一位作者开发的,专门用于测试网站。
特定于 Internet Explorer,但相当不错:
与 urllib/BeautifulSoup 相比的优势在于它也执行 Javascript,因为它使用 IE。
httplib2 + 美丽的汤
使用 firefox + firebug + httpreplay 查看 javascript 从网站传入和传出浏览器的内容。使用 httplib2 你基本上可以通过 post 和 get 做同样的事情
对于自动化,你肯定想看看
网络机器人
它基于 selenium,并提供更多功能,只需很少的代码,例如自动查找元素以执行 click 等操作,根据您的参数键入。
它甚至适用于类名和 id 动态变化的站点。