1.我首先用 firefox 的 firebug 的 export cookies for this site 功能导出校内网站的 cookies 到一个文本文件。
2.mechanize 有个 load_cookiestxt 的方法,好像是专门可以读入 firefox 导出的 cookies(我参考了这篇博文:http://samsam.iteye.com/blog/474170)
3.据此我写了如下的程序
#encoding: utf-8
require 'mechanize'
agent = Mechanize.new
agent.cookie_jar.load_cookiestxt('C:\Users\pc\Desktop\cookies.txt')
page = agent.get(''http://www.renren.com')
但是 page 中返回的仍然是 renren 登陆前的页面,不会返回登陆后的页面。 我的目的是登陆上使用 mechanize 这个包用 cookies 登陆人人。本人小白,初学编程。。实在不知道怎么办,希望各位高手指导、
官方文档说 cookie 的格式是Mozilla cookies.txt-style
你找 firefox 插件导出的格式是netscape cookie file format
也可以,以前测试过是兼容的
https://addons.mozilla.org/en-us/firefox/addon/export-cookies/
#4 楼 @xingbuxing 可以先去了解什么是 cookie http://en.wikipedia.org/wiki/HTTP_cookie
你需要把 domain 为renren.com
的 cookie 都提取出来,放到 Mechanize 里
多尝试,会成功的
#encoding: utf-8
require 'mechanize'
email = '*********'#账号密码
password = '*********'
agent = Mechanize.new
agent.user_agent_alias = 'Windows Mozilla'
page = agent.get('http://www.renren.com')
page.encoding = 'utf-8'
# 填表登陆人人,登陆后的页面存放到login_page
form = page.forms.first
form.field_with(:name => 'email').value = email
form.field_with(:type => 'password').value = password
login_page = form.click_button
我编写了如上的程序,今天确实能登陆上去,但是昨天就登陆不上去。 所以还是很想学习如何使用如何使用 cookies 登陆网站。 再比如这个网站http://www.microbell.com/, ruby mechanize 根本就找不到登陆框的那个 from,不能填表
#13 楼 @small_fish__ 请问具体应该怎么做呢?能不能给出简单的实例?我不是很清楚如何使用 mechanize 中的 cookie 和 cookiejar。谢谢!
@huacnlee 有个问题想问你,按照你所说:“模拟表单填写帐号密码,然后提交表单就可以了呀,不用 hack Cookie 的”,意思是说,只要用 machanize 在目标网站登录一次了,以后的每个页面的请求都不用再次登录了?比如说,有个目标网站,我访问前 3 个页面的时候不需要我登录,但是第四个的时候就把我 redirect 到了登录页面,这个时候我用 machanize 登录,目标网站的 server 端记住了我的 session 并在浏览器中设置了 session_id 的一个 cookie 那我在以后的页面访问的时候,都是自动带着这个 cookie 的?如果是这样的话,machanize 是怎那样抓取到 cookie 并在下次的 request 中带着这个 cookie 的?
@huacnlee 谢谢指点,经过验证,确实是,而且是存储在当前的 agent 对象的。在使用中还遇到一个问题就是,在某些页面中的登录框是 js 生成的一个 popup,对于这样的页面内容,machanize 应该是抓取不到的,这种情况要用什么处理?capybara 么?