官网:http://mechanize.rubyforge.org
登录
require 'rubygems'
require 'mechanize'
require 'logger'
# Mechanize.log = Logger.new(STDOUT)
agent = Mechanize.new
# pp agent.methods.sort.grep(/agent/)
agent.user_agent_alias = 'Mac Safari'
# pp agent.user_agent
page = agent.get('https://passport.baidu.com/?login')
跑出异常:
/Users/holin/.rvm/gems/ruby-1.8.7-p299@rails2/gems/mechanize-1.0.0/lib/mechanize/chain/body_decoding_handler.rb:39:in `handle': Unsupported content encoding (RuntimeError)
from /Users/holin/.rvm/gems/ruby-1.8.7-p299@rails2/gems/mechanize-1.0.0/lib/mechanize/chain.rb:29:in `pass'
from /Users/holin/.rvm/gems/ruby-1.8.7-p299@rails2/gems/mechanize-1.0.0/lib/mechanize/chain/handler.rb:6:in `handle'
from /Users/holin/.rvm/gems/ruby-1.8.7-p299@rails2/gems/mechanize-1.0.0/lib/mechanize/chain/response_reader.rb:35:in `handle'
from /Users/holin/.rvm/gems/ruby-1.8.7-p299@rails2/gems/mechanize-1.0.0/lib/mechanize/chain.rb:24:in `handle'
from /Users/holin/.rvm/gems/ruby-1.8.7-p299@rails2/gems/mechanize-1.0.0/lib/mechanize.rb:543:in `fetch_page'
from /Users/holin/.rvm/rubies/ruby-1.8.7-p299/lib/ruby/1.8/net/http.rb:1054:in `request'
from /Users/holin/.rvm/rubies/ruby-1.8.7-p299/lib/ruby/1.8/net/http.rb:2144:in `reading_body'
from /Users/holin/.rvm/rubies/ruby-1.8.7-p299/lib/ruby/1.8/net/http.rb:1053:in `request'
from /Users/holin/.rvm/gems/ruby-1.8.7-p299@rails2/gems/mechanize-1.0.0/lib/mechanize.rb:538:in `fetch_page'
from /Users/holin/.rvm/gems/ruby-1.8.7-p299@rails2/gems/mechanize-1.0.0/lib/mechanize.rb:259:in `get'
from hi_baidu.rb:13
主要是百度返回的response['Content-Encoding']是none,于是修改mechanize/chain/body_decoding_handler.rb,34行:
when 'x-gzip', 'none'
通过!!
继续:
equire 'rubygems'
require 'mechanize'
require 'logger'
# Mechanize.log = Logger.new(STDOUT)
agent = Mechanize.new
# pp agent.methods.sort.grep(/agent/)
agent.user_agent_alias = 'Mac Safari'
# pp agent.user_agent
page = agent.get('https://passport.baidu.com/?login')
# pp page
login_form = page.forms.first
# pp login_form
login_form.username = "我爱游记"
login_form.password = "mypassword"
page = agent.submit(login_form)
page = agent.get("http://hi.baidu.com/%E6%88%91%E7%88%B1%E6%B8%B8%E8%AE%B0/creat/blog/")
form = page.form("form1")
pp form.methods.sort
form.spBlogTitle = "我最爱游记了,呵呵"
form.spBlogText = "我会发很多游记的,呵呵"
page = agent.submit(form)
运行后抛异常:
/Users/holin/.rvm/gems/ruby-1.8.7-p299@rails2/gems/mechanize-1.0.0/lib/mechanize/form.rb:136:in `method_missing': undefined method `spBlogText=' for #<Mechanize::Form:0x10188b7b8> (NoMethodError)
from hi_baidu.rb:31
spBlogText 文本框是js生成的,怎么办?
想办法生成这个文本框!
......
form.add_field!("spBlogText") #自己增加Field
form.spBlogTitle = "我最爱游记了,呵呵"
form.spBlogText = "我会发很多游记的,呵呵"
....
成功了,哈哈。
可以访问地址:http://hi.baidu.com/%CE%D2%B0%AE%D3%CE%BC%C7/blog/item/de9e0b4aa2facf07b2de051a.html
首发:http://www.holin.info/posts/4c7b6a2aff1f015018000001
:)