最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【记录】给BlogsToWordPress中的人人网添加登陆时验证码功能的支持

Python crifan 4964浏览 0评论

对于BlogsToWordpress,根据sidong网友的反映,现在登陆人人网,需要输入验证码。

自己去测试了下,自己的账号,没有此问题。试了其提供的他自己的账号,的确有此问题。

而且加上之前添加支持人人网的时候,也偶尔遇到必须输入验证码的问题,因此,索性直接给给人人网中登陆时添加验证码的功能,以彻底解决此问题。

1. 然后就去用IE9的F12去调试,然后相对很容易的找到了对应的url

先是

http://www.renren.com/ajax/ShowCaptcha

再去登陆:

http://www.renren.com/ajaxLogin/login

2.但是后来发现,提供了正确的验证码后,登陆还是错误。

然后就找是否缺少了信息,结果发现一个在提供post data的时候,没有提供_rtk,所以就去找_rtk,最后发现是,访问:

http://www.renren.com/

然后可以从:

XN = {get_check:”,get_check_x:’c5f17df8′,env:{domain:’renren.com’,shortSiteName:’人人’,siteName:’人人网’}};

的字段中提取对应的get_check_x,即为后续所需的_rtk。

3.但是最后还是无法正确登陆,因为本身此处通过

http://www.renren.com/ajax/ShowCaptcha

所返回的内容,和IE9调试过程中所看到的一样,都只是个字符“1”,而不是所期望的验证码的图片数据。

所以,也就无法正常的登陆了。

4.然后就继续用IE9去调试,结果始终无法找到是何种原理。

后来无意间换用Chrome调试的时候,对着网页中的验证码右击,选择查看元素:

check element

然后找到了对应的的url地址:

http://icode.renren.com/getcode.do?t=web_login&rnd=Math.random()

icode url

其实此地址,之前在IE9中对着验证码图片右击,也看到了,但是却没去细想。

而此时,在Chrome中,找到了此url的返回内容,就是我要的验证码的图片。

接着回到IE9中的F12,也看到了对应的内容:

ie9 icode url return pic

 

5.然后接着就容易看懂具体的逻辑了:

(1)先是去访问主页:

http://www.renren.com/

其中可以获得get_check_x,即后续的_rtk

(2)接着直接去访问:

http://icode.renren.com/getcode.do?t=web_login&rnd=Math.random()

获得对应的验证码图片。其中,没有向服务器提供任何的cookie和post data。

(3)然后如果你点击了密码输入框的话,就会去调用:

http://www.renren.com/ajax/ShowCaptcha

去显示对应的验证码图片。

其同时会想服务器提供对应的相关post data数据,此post data,除了没有密码和验证码,其他都是一样的。

(4)最后点击登录时,才真正访问:

http://www.renren.com/ajaxLogin/login

去登陆人人网,同时此处当然必须提供对应的密码,以及上述的验证码。

 

其中,此处的验证码,目前还没有实现,或者说没能力实现程序破解,所以只能通过调用PIL图形库显示出来,让用户手动输入的方式,来获得验证码。

 

【总结】

人人网的获取验证码的思路,和其他网站很不同。因为一般网站都是对应的getCaptcha或者类似于此处的ShowCaptcha去获得对应的图片的,而人人网是登陆主页时就已获得验证码图片,后来使用ShowCaptcha网址,的确只是Show(显示)此验证码。所以,也算是折腾了一下,才搞清楚其思路。

 

相关的源码,感兴趣的去这里下载:BlogsToWordpress

转载请注明:在路上 » 【记录】给BlogsToWordPress中的人人网添加登陆时验证码功能的支持

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (21)

  1. 原下载地址现在已经不能下载了,博主能给个新下载地址么?谢谢!!
    lewco_hhl9年前 (2015-02-01)回复
    • 去这里:https://www.crifan.com/crifan_released_all/website/python/blogstowordpress/,里面有SourceForge的下载地址。
      crifan9年前 (2015-02-01)回复
  2. 太感谢楼主了!!用你的方法我已经解决了我的问题了!!但还是有两点不大明白的,要是楼主能给我讲一讲就更好啦~ 1.为什么我下载了验证码到电脑上再自己打开,填写就不行呢?这部分代码是这样的: dir='C:\Users\Je\Desktop\icode\\' icode_res='http://icode.renren.com/getcode.do?t=web_login&rnd=Math.random()' filename=dir+'icode'+'.jpg' urllib.urlretrieve(icode_res,filename) 总是会提示验证码填写的是错误的。而使用楼主的方法调用Image直接打开就可以。 2.是不是从访问www.renren.com开始就会直接下载一个验证码,直到第一次填好完整的表单对http://www.renren.com/ajaxLogin/login进行一个POST访问或者超时,所用的验证码是不会再更改的?我觉得从代码上看是这样,那原理是什么呢?不是还是要从那个网址拉一个验证码下来么?还是说浏览器自己会拉一个验证码下来,然后访问网址再拉一个下来的时候就会取代刚才那个成为新的available的验证码? 这两点不大明白,要是楼主知道能给我讲一下就太感谢啦!!
    Jean12年前 (2012-10-14)回复
    • 其实两个问题,是同一个问题。 【你先要知道的前提和背景知识】 正常的逻辑是,想要实现模拟网站登录,第一个,也是最重要的事情是,要知道本身登录该网站的流程是什么样的。 所以的流程,也就就是,先访问哪个地址,得到了什么值,比如验证码,后访问什么地址,又得到了什么值等等。 而想要知道本身的登录流程,可以通过用工具,比如IE的F12,去分析去浏览器中是如何访问网站,如何登录的。 把其流程搞懂了,然后才是你去写任何语言的代码都可以,比如python,C#等,去把整个流程模拟出来。 【你的问题的答案】 你只有使用代码,严格模拟出人家网站登录的流程,才能正常登录,如果把其中的某些步骤省略掉了,步骤颠倒了,截断了完整的流程等等,都是可能导致无法正常登录的。 具体到你的提问的要点就是,问题1,是你中断了完整的流程,导致验证码失效; 问题2,原理就是,按照人家的流程,用代码模拟出来,就是可以的。否则就可能无法正常模拟登陆。 至于验证码什么时候有效,何时过期等细节问题,也都是通过流程分析才知道的。直接给你答案,告诉你啥时候过期,也是没意义的。只能靠你自己去分析流程,才有用。
      crifan12年前 (2012-10-14)回复
      • 嗯我用的是chrome的开放人员工具,也是可以抓包可以看源码还蛮方便的。不过我在写代码的时候,抓验证码的图片下来也就是保存了。并没有结束程序,而是和楼主一样是把在程序后面需要输入验证码的。就是看到的。只不过我不是用img.show()让image自己打开,而是下载以后自己打开的。可是并没有中断程序只是等待输入,不大明白区别在哪里呢。谢谢楼主~~
        Jean12年前 (2012-10-15)回复
        • 以我的理解,应该是cookie不一致,导致了你的错误: 之前我在loginBlog中,是使用CookieJar给urllib2添加了cookie的支持,后续的所有访问,也都是使用urllib2进行的。 包括获取验证码的crifanLib.getUrlRespHtml,其内部也是使用urllib2的。而你使用了urllib.urlretrieve下载验证码,就算是中断了流程,导致cookie不一致了,所以才出现错误。
          crifan12年前 (2012-10-15)回复
          • 原来是这样啊!!谢谢楼主!!!太感谢了!!!看来还是对urllib和urllib2的区别理解不深刻啊……谢谢楼主诲人不倦~~~
            Jean12年前 (2012-10-15)回复
  3. 楼主啊……我找怎么抓取验证码真是有一阵了……谢谢楼主了……(叩拜)不过还是很想问一下登录人人的时候那几行代码在哪儿啊……体系太大了……要是能给我讲一下就更不胜感激了!!qq在电邮里。谢谢楼主啦~~~
    Jean12年前 (2012-10-12)回复
    • 我所贴出的那段含get_check的代码,就是你直接访问: http://www.renren.com/ 然后网页html源码中就包含的啊。
      crifan12年前 (2012-10-12)回复
      • 那_rtk是在哪里用到的呢?
        Jean12年前 (2012-10-12)回复
        • 请认真看我的帖子。 因为帖子最后已经给你下载地址了,你自己下载源码,一看就明白了啊。 如果看源码还是没看明白,再来讨论,我再给你解释。
          crifan12年前 (2012-10-12)回复
          • 嗯其实是下了源码了……但是在文档内搜索不到get_check_x,也搜不到_rtk……可能是您的算法结构比较大,而我其实只是想找登录的部分。您只要告诉我是哪个函数就可以了哈。谢谢您~~
            Jean12年前 (2012-10-12)回复
            • 哦,那就好。那就给你详细的解释一下: 相关文件:BlogsToWordpress\libs\crifan\blogModules\BlogRenren.py 相关函数: loginBlog:用于登陆人人。 其中会先去提取get_check_x,用于后续http的post中的参数_rtk。 另外,关于用工具看代码,推荐使用SI(SourceInsight)。 在SI中,可以很方便的,全局性地,在整个项目中,搜索值,比如_rtk,这样就很容易找到你要的相关的代码了。 想要让SI支持Python代码高亮的话,可以参考: 【已解决】让Souce Insight支持多种语言的语法高亮:Python,Ruby,ARM汇编,windows脚本文件(bat/batch),PPC,SQL,TCL,Delphi等
              crifan12年前 (2012-10-13)回复
              • 原来是这样啊……我一直以为lib文件夹里是库文件所以就没有看,只在blogsToWordpress里找的。谢谢楼主啦~~
                Jean12年前 (2012-10-13)回复
                • lib是库文件,其中包括我自己crifan写的常用的函数,和第三方的库。 本来这些文件都在根目录的,后来为了逻辑上和架构上更加清晰易懂,才移至lib文件夹下的。呵呵。
                  crifan12年前 (2012-10-13)回复
                  • 楼主太厉害啦~~膜拜~~我就还是小菜……多谢楼主咯~~
                    Jean12年前 (2012-10-13)回复
                    • 偶也只是一般的水平,目前对于python也不是很熟悉,不过倒是对于如何学习新东西,有点概念了,所以一般的问题,也都还可以通过自学而搞定,呵呵。 这么一堆python代码,也是先参考别人的,后来基本上全部自己重写,一点点写出来的。
                      crifan12年前 (2012-10-13)
  4. 居然有脚本。。枉我当时还手动贴来着。。
    Arch!tect12年前 (2012-09-19)回复
    • 很久之前就支持人人网搬家了。只是最新人人网变动,必须输入验证码了,所以才去修改脚本的。
      crifan12年前 (2012-09-19)回复
      • 好的,谢谢您的回复,周末还在线,呵呵。我今天认认真真的读了您写的模拟登录百度,我自己也写了一个登录百度众测的,已经可以登录了。后面想模拟登录12306网站,已经能够做到读取验证码到本地,本地输入完验证码后再调用跟踪的方法判断验证码是否正确,但是就是在最后一步点登录的时候,报错,不让登录,其中有一个参数是动态生成的,参数值也是动态生成的,我可以知道怎么动态生成参数,但是动态参数值怎么生成的,却一直找不到。 不知道博主啥时候如果有空有兴趣的时候研究下,然后跟我们分享下经验,谢谢了。
        lewco_hhl9年前 (2015-02-01)回复
103 queries in 0.192 seconds, using 22.25MB memory