使用Mechanize发布百度空间博客

官网: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

 

:)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值