Ruby 为什么用 Mechanize 在 QQ 登录页面抓不到它的 loginform ?

1fuyi · 2013年03月31日 · 最后由 as181920 回复于 2013年04月09日 · 3885 次阅读

准备用 Mechanize 在网页上登录自己的 QQ,批量去除平时和自己没有互动的好友。

刚学了 Mechanize 的例子,在自己写的网站都能用帐号正常登录,取数据, 可以到了 QQ 的登录网页,在源代码中有一个登录表单:loginform 可是,Mechanize 的居然抓不到这个 form, 请高手测试,指点

require 'rubygems'
require 'mechanize'
require 'logger'
# 登陆网站
url = 'http://id.qq.com/login/ptlogin.html'
agent = Mechanize.new
agent.user_agent_alias = 'Windows IE 7'
page = agent.get(url)
form = page.form('loginform')
puts form # 这里是空白

puts page.forms.size # =0 表示一个 from 都没有

嵌在 iframe 裏面的 這種情況用瀏覽器看看源碼就明白了

兄弟,还是找不到,不知他们用了什么技术, => #<:page url:http:>} {meta_refresh} {title "我的 QQ 中心"} {iframes #<:page::frame nil>} {frames} {links #<:page::link> #<:page::link>} {forms}>

iframes[0] 中, 没有 from,连 froms 属性都没有 抓到的 frames 为 [] 抓到的 forms 为 [] 找不到它的 loginform 在那儿,请高手帮助解决一下!!!

它的 iframe 的 src 写在 js 里的。你 setURL 里找 iframe 地址。


puts page.content

function setURL(){
   ....
}

试试 phatomjs

可能是 JS 动态生成的吧。遇到此类情况,可以试试,用 watir (http://watir.com/), 先把网页全部 Load 进来,然后再用 mechanize 抓取。

mechanize 默认不会运行 js 文件,有些页面 dom 是 js 生成的,mechanize 就找不到了。 mechanize 官网有说不支持 js 运行,毕竟要运行 js 就要加 js 解析库又引入很大一套东西。

要页面并 js 的除了楼上的 watir,也可以看看 selenium 的 ruby 调用,以前一直用。

qq 防护肯定做的很好,看你想干嘛,要快速批量处理腾讯网页上的东西我估计难

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册