自动化web交互类库Mechanize

   闲时学习了一下Mechanize库。这是一个用于Web自动交互的lib。可以自动存储cookie,重定向,提交表单等等。详细信息参见http://mechanize.rubyforge.org/mechanize/。

    作为学习成果,写一个关于开心网组件《大师》的小外挂。闲话少说,献上代码,以抛砖引玉。

 

登录:

require 'rubygems'
require 'mechanize'
require 'json/pure'

agent=WWW::Mechanize.new
login=agent.get("http://www.kaixin001.com")
f=login.forms.first
f.email="youremail@website.com"
f.password="yourpwd"
f.submit

 

跳到大师首页,获取可以比武的好友:

pk = agent.get("http://www.kaixin001.com/!pker/index.php?t=50")
div = pk.search("dl/div")[0]
avs = div.search("dd").select {|d|
  d.search("div/img")[1][:src].include?("icon_blank.gif")  #匹配没有“满”或“师”标记的行
}

 

和每个好友比武:

#获得每个好友比武的链接
links = avs.collect { |a|
  WWW::Mechanize::Page::Link.new(a.search("div/a")[0], agent, pk)
}
current_kungfu = nil #current_kungfu用于存储你的当前武功类别

links.collect {|link| 
  link.href.to_s.scan(/(\d+)/)[0][0] 
}.each {|fid|  
  
#current_kungfu选择你当前最高的武功类别,选择最强的武功自然胜算高嘛:)
  if current_kungfu.nil?
    selkungfu = agent.get("http://www.kaixin001.com/!pker/!selkungfu.php?fuid=#{fid}")
    #    f = selkungfu.form("form1")
    current_kungfu = selkungfu.body.scan(/value=\"\d+\"/).collect { |input|
      input.split("=")[1][1..-2].to_i
    }.sort.[](-1)    
  end

  #get pkid 获得一次pk的id参数
  pkid_page = agent.post("http://www.kaixin001.com/!pker/!startpk.php",:fuid => fid)
  pkid= ::JSON.parse(pkid_page.body)["pkid"]
  #
  agent.get("http://www.kaixin001.com/!pker/!dopk.php?fuid=#{fid}&pkid=#{pkid}&flag=0&kfid=#{current_kungfu}")

}

 

退出:

agent.get("http://www.kaixin001.com/login/logout.php")
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值