与Ruby's Mechanize不同的页面



我的朋友写了一个脚本,它使用ruby的机制在登录后从页面上获取cookie。

  • 开始机械化
  • 通过登录
  • 从表单
  • 传递的页面获取cookie值

这个剧本似乎适合他,但不适合我。我试过这样做的交互,我注意到我得到一个不同的页面标题从Mechanize返回比一个为我的浏览器。当我登录时,页面标题是"SSL VPN - Home",但当我查看我返回的提交对象上的标题属性时,我得到"请等待…"

irb(main):084:0> intermediate.title
=> "Please wait..."
irb(main):085:0> intermediate.iframes
=> [#<Mechanize::Page::Frame nil "/dana-na/html/blank.html">

Mechanize是否可能没有等待足够长的时间来获得目标页面?"Please wait…"似乎暗示着某些中间页面被刷新或重定向,而Mechanize会话没有到达。不管怎样,我都不会得到相同的title值。

=> #<Mechanize::Page
 {url
  #<URI::HTTPS:0x00000002b49338 URL:https://vpn1.example.com/dana/home/starter0.cgi?check=yes>}
 {meta_refresh}
 {title "Please wait..."}
 {iframes #<Mechanize::Page::Frame nil "/dana-na/html/blank.html">}
 {frames}
 {links}
 {forms
  #<Mechanize::Form
   {name "frmGrab"}
   {method "POST"}
   {action "/dana/home/starter0.cgi"}
   {fields
    [hidden:0x15b9860 type: hidden name: xsauth value: a0395604a9f4f531504a7f6b6dc86051]
    [hidden:0x15b94a0 type: hidden name: tz_offset value: ]
    [hidden:0x15b92e8 type: hidden name: clienttime value: ]
    [hidden:0x15b8ff0 type: hidden name: url value: ]
    [hidden:0x15b8ac8 type: hidden name: activex_enabled value: 0]
    [hidden:0x15b8898 type: hidden name: java_enabled value: 0]
    [hidden:0x15b8690 type: hidden name: power_user value: 0]
    [hidden:0x15b84ec type: hidden name: grab value: 1]
    [hidden:0x15b8348 type: hidden name: browserproxy value: ]
    [hidden:0x15b8168 type: hidden name: browsertype value: ]
    [hidden:0x15b7fb0 type: hidden name: browserproxysettings value: ]
    [hidden:0x15b7df8 type: hidden name: check value: yes]
    [hidden:0x15b7c54 type: hidden name: nextpage value: ]
    [hidden:0x15bb8f4 type: hidden name: mid value: ]
    [hidden:0x15bb5d4 type: hidden name: signin value: ]
    [hidden:0x15bb2dc type: hidden name: alias value: ]
    [hidden:0x15bb05c type: hidden name: id value: ]
    [hidden:0x15baeb8 type: hidden name: username value: ]
    [hidden:0x15bacb0 type: hidden name: password value: ]
    [hidden:0x15bab20 type: hidden name: occurrence value: ]}
   {radiobuttons}
   {checkboxes}
   {file_uploads}
   {buttons}>}>

它给了你另一个登录表单,所以我猜是由于某种原因第一次登录失败了

我不知道为什么这对你的朋友有效,而不是对你…从你发布的输出来看,它似乎通常不会工作。

根据URL,似乎你试图访问的页面是一个基于Juniper Networks的VPN设备/服务器的登录页面,我知道这些东西的登录页面将你重定向到所有地方:/

无论如何,根据你的输出,Mechanize返回的页面有一个{meta_refresh},默认情况下Mechanize不会自动跟随元刷新。机械化可能没有花太长时间,但在得到响应后就停止了。

你可以让Mechanize遵循{meta_refresh}两种不同的方式…这里有一些假代码;如果变量与您的实际代码不匹配,请提前道歉。

手动(docs):

agent = Mechanize.new
intermediate = agent.get('http://your_url')
intermediate = intermediate.meta_refresh.first.click # Manually click the meta-refresh

自动(docs):

agent = Mechanize.new
# All requests made using this agent will follow meta refreshes automatically
agent.follow_meta_refresh = true 
intermediate = agent.get('http://your_url')

如果这是我的代码,我可能会手动做事情,除非Juniper在登录后必须访问的许多页面上这样做…那就太逊了。:)

相关内容

  • 没有找到相关文章

最新更新