使用COM + IE自动化在JavaScript回发后保存文本文件
我想自动化处理这个页面上的数据归档,并把它上传到数据库里。这个页面的链接是 http://energywatch.natgrid.co.uk/EDP-PublicUI/Public/InstantaneousFlowsIntoNTS.aspx。
我之前在其他页面上使用Python和win32com来实现这个功能,但因为我在公司网络环境下,不能直接上网,所以我用IE浏览器来操作。我的问题是,有没有办法提取并保存点击页面底部“点击这里下载数据”链接时返回的CSV数据?这个链接是一个JavaScript的回调,提取数据会比把整个页面格式化成CSV简单得多。
当然,如果有更简单的替代方案,我也不一定非要用Python。
谢谢!
1 个回答
1
这里有个更好的方法,使用 mechanize 这个库。
import mechanize
b = mechanize.Browser()
b.set_proxies({'http': 'yourproxy.corporation.com:3128' })
b.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')]
b.open("http://energywatch.natgrid.co.uk/EDP-PublicUI/Public/InstantaneousFlowsIntoNTS.aspx")
b.select_form(name="form1")
b.form.find_control(name='__EVENTTARGET').readonly = False
b.form['__EVENTTARGET'] = 'a1'
print b.submit().read()
注意,你可以指定 mechanize 使用一个代理服务器(用普通的 urllib
也可以做到)。还要注意,ASP.NET 的 JavaScript 回发是如何被模拟的。
编辑:
如果你的代理服务器使用 NTLM 认证,那可能就是问题所在。根据我所知,urllib2 不支持 NTLM 认证。你可以试试 NTLM 授权代理服务器。在 说明文件中提到:
什么是 'NTLM 授权代理服务器'?
'NTLM 授权代理服务器' 是一种类似代理的软件,它会使用微软专有的 NTLM 认证方法,在微软的代理服务器和网页服务器(特别是 ISS)上对你进行认证,并且它可以修改你客户端请求头中的一些值,让这些请求看起来像是由微软的 IE 浏览器发出的。这个软件是用 Python 语言编写的。你可以查看 www.python.org。