【问题标题】:Is it possible to automate postback from the client side?是否可以从客户端自动回发?
【发布时间】:2010-11-04 07:57:17
【问题描述】:

我的一个客户需要定期从网络服务中提取客户数据。数据本身通过 javascript 回发以 CSV 文件的形式提供,服务网站内的大多数导航也是如此。

目前,整个系统中最严重的瓶颈是需要人工登录网页,导航到下载页面,然后手动将下载的文件添加到系统的其余部分。

通过回发下载文件的过程可以自动化吗? (例如通过可以通过 cron 运行的 shell 脚本?)

如果是这样,您会推荐什么作为最合适的工具?

【问题讨论】:

    标签: scripting automation postback


    【解决方案1】:

    如果有人再次遇到这个问题,我已经找到了解决方案:

    诀窍是使用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
    

    我希望这对以后可能遇到此问题的人有所帮助。

    【讨论】:

    • 我了解到默认用户代理(即 Mechanize)不受 ASP.net 的良好支持。将 useragent 更改为“Windows IE 8”或“Windows IE 9”对我有用,表单将显示 __EVENTTARGET 和 __EVENTARGUMENT 的 2 个隐藏字段
    【解决方案2】:

    您可以使用 AJAX 计时器。查看asp.net/ajax 网站。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多