自动化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="[email protected]"
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")
 

 

 

你可能感兴趣的:(Web,PHP,json,F#,rubygems)