新手问题 mechanize 如何使用 cookie 登陆网站

xingbuxing · 2012年11月26日 · 最后由 wudixiaotie 回复于 2014年08月28日 · 11927 次阅读

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 登陆人人。本人小白,初学编程。。实在不知道怎么办,希望各位高手指导、

都用 mechanize 你还存 cookie 干嘛,直接到登陆的页面山去写登陆啊

#1 楼 @ywencn 登陆需要验证码呀。。所以不能使用填表登陆。。。谢谢你的回复

官方文档说 cookie 的格式是Mozilla cookies.txt-style 你找 firefox 插件导出的格式是netscape cookie file format也可以,以前测试过是兼容的 https://addons.mozilla.org/en-us/firefox/addon/export-cookies/

#3 楼 @cxh116 嗯啊,谢谢你!我已经用 firefox 的插件成功的导出了 cookies。。但是我不知道怎么用啊。。如何使用导出的 cookies 登陆想要登陆的网站?谢谢!

#4 楼 @xingbuxing 可以先去了解什么是 cookie http://en.wikipedia.org/wiki/HTTP_cookie

你需要把 domain 为renren.com的 cookie 都提取出来,放到 Mechanize 里 多尝试,会成功的

为啥我登陆的时候不要验证码?

#6 楼 @ywencn 这个是很奇怪,登陆人人的时候有的时候需要提交验证码,有的时候不需要。前段时间是不要填验证码的,我已经写好成填表的程序登陆进人人了。但是这几天原来写的程序就登陆不了了。你仔细看人人网源代码的话里面有关于填写验证码的部分

模拟表单填写帐号密码,然后提交表单就可以了呀,不用 hack Cookie 的

#8 楼 @huacnlee #6 楼 @ywencn

#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,不能填表

#9 楼 @xingbuxing 打不开啊大哥。。。 有时候只是 form 隐藏了而已

呵呵,支付宝的 cookie 都可以复用…这个应该可以

你要看看 firefox 导出的 cookie 的格式和 machanize 的格式是否一样,不然 cookie 是不会生效的。

#13 楼 @small_fish__ 请问具体应该怎么做呢?能不能给出简单的实例?我不是很清楚如何使用 mechanize 中的 cookie 和 cookiejar。谢谢!

楼主这个问题解决了吗?我也遇到了这个问题!

楼主你好,我也遇到这个问题,能分享一下吗?谢谢

关注中

懂了嘛大师,给个样例八,我也遇到了这个问题不会解决啊

@huacnlee 有个问题想问你,按照你所说:“模拟表单填写帐号密码,然后提交表单就可以了呀,不用 hack Cookie 的”,意思是说,只要用 machanize 在目标网站登录一次了,以后的每个页面的请求都不用再次登录了?比如说,有个目标网站,我访问前 3 个页面的时候不需要我登录,但是第四个的时候就把我 redirect 到了登录页面,这个时候我用 machanize 登录,目标网站的 server 端记住了我的 session 并在浏览器中设置了 session_id 的一个 cookie 那我在以后的页面访问的时候,都是自动带着这个 cookie 的?如果是这样的话,machanize 是怎那样抓取到 cookie 并在下次的 request 中带着这个 cookie 的?

#20 楼 @lanyatou 是你登录的时候 Cookie 记录在 Machanize 的内存对象里面的

@huacnlee 谢谢指点,经过验证,确实是,而且是存储在当前的 agent 对象的。在使用中还遇到一个问题就是,在某些页面中的登录框是 js 生成的一个 popup,对于这样的页面内容,machanize 应该是抓取不到的,这种情况要用什么处理?capybara 么?

#22 楼 @lanyatou 还是 Cookie 复用这种方式最简单,别去管什么 form 登录了,像百度的 form 就是 javascript 生成的,你怎么办,非要分析 js 么,人家一改你又完了。

#22 楼 @lanyatou 又是你,你们公司到底在做什么阿?

25 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号