我的一位客户需要定期从网络服务中提取客户数据。数据本身通过javascript回发提供为CSV文件,与服务网站中的大部分导航一样。
目前,整个系统中最严重的瓶颈是需要人员登录网页,导航到下载页面,并手动将下载的文件添加到系统的其余部分。
通过回发下载文件的过程可以自动化吗? (比如说通过可以通过cron运行的shell脚本?)
如果是这样,你会建议哪种方式最适合这样做?
答案 0 :(得分:4)
如果有人再次遇到这个问题,我找到了解决方案:
诀窍是在适当的网页上使用Mechanize和一系列Browser.submit()
来电。
其他人可能会遇到的一个问题是ASP.NET页面(根据我的经验,基于回发的导航的最大来源)在表单中也需要一个名为__EVENTTARGET
的隐藏参数,它不会当你使用机械化时存在。
这些页面上的__doPostBack('foo')
函数通过每个链接上的javascript onclick事件为__EVENTTARGET
提供相关值,但由于mechanize不使用javascript,因此您需要设置这些值自己。
我编写了一个快速的小实用程序函数,可以在我的脚本中使用:
def add_event_target(form, target):
#Creates a new __EVENTTARGET control and adds the value specified
#.NET doesn't generate this in mechanize for some reason -- suspect maybe is
#normally generated by javascript or some useragent thing?
form.new_control('hidden','__EVENTTARGET',attrs = dict(name='__EVENTTARGET'))
form.set_all_readonly(False)
form["__EVENTTARGET"] = target
我希望这对后来可能会遇到这个问题的人有所帮助。
答案 1 :(得分:-1)
您可以使用AJAX计时器。查看asp.net/ajax网站。