我的朋友写了一个脚本,它使用ruby的机制来在登录后从页面上获取cookie。
这个剧本似乎适合他,但不适合我。我已尝试以交互方式进行此操作,并且我注意到我从Mechanize返回的页面标题不同于我的浏览器。当我登录时,页面标题是“SSL VPN - Home”,但当我查看我返回的提交对象上的title属性时,我得到“Please wait ...”
irb(main):084:0> intermediate.title
=> "Please wait..."
irb(main):085:0> intermediate.iframes
=> [#<Mechanize::Page::Frame nil "/dana-na/html/blank.html">
Mechanize可能没有等待足够长的时间来获取目标页面吗? “请稍候......”似乎暗示某个中间页面会被刷新或重定向到Mechanize会话未到达的位置。无论哪种方式,我都没有获得相同的标题值。
=> #<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}>}>
答案 0 :(得分:0)
它正在为您提供另一个登录表单,因此我的猜测是第一次登录由于某种原因无效。
答案 1 :(得分:0)
我不知道为什么这对你的朋友起作用而不适合你......从你发布的输出看起来似乎通常不起作用。
根据URL,您尝试访问的页面似乎是基于瞻博网络的VPN设备/服务器的登录页面,我知道这些内容的登录页面会将您重定向到所有地方:/ < / p>
无论如何,根据您的输出,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在登录后必须访问的很多页面上执行此操作...这将是蹩脚的。 :)