关灯

超详细的Python实现微博模拟登陆丨小白都能懂

[复制链接]
sky0814 发表于 2019-5-12 11:57:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
媒介

Python如今十分水,语法简朴并且功用壮大,许多同窗皆念教Python!以是小的给列位看民们筹办了下代价Python进修视频教程及相干电子版册本,皆放正在了文章末端,欢送前去支付!



超具体的Python完成微专模仿登岸丨小利剑皆能懂-1.jpg




近来因为需求不断正在研讨微专的爬虫,第一步即是模仿登岸,从开端探索到走通模仿登岸那条路实在仍是挺困难的,需求必然的经历,为了让伴侣们当前少走面直路,那里我把我的阐发历程战代码皆附上去。

起首,我们先用一般的账号登岸,详细看会有些甚么恳求。那里我用的是Http Analyzer抓包(Filders也是一个没有错的挑选)。上面是一般登岸流程的截图:

超具体的Python完成微专模仿登岸丨小利剑皆能懂-2.jpg

图1

接下去我会具体阐明各个历程。

第一步:预登岸。

如今微专、空间等年夜型网站正在输进用户名后根本城市做编码大概减稀处置,那里正在用户名输进框输进我的账号,经由过程抓包东西能够看到效劳器会返回一段字符串:

超具体的Python完成微专模仿登岸丨小利剑皆能懂-3.jpg

图2

那一步便是预登岸历程,同窗们能够本人尝尝。登岸的时分我们需求用到此中的servertime、nonce、pubkey等字段。固然那个没有是我本人料想的,前面的步调会做阐明。

另有一面,便是预登岸的url:

http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.18)&_=1461819359582

那里su的值是本人用户名颠末base64编码的值。但能够您们会问我是怎样明白的呢,待会女我会讲到。颠末真测,假如我们那里没有给su传参数,实在也是能够的。为了最实在的模仿用户登录,我们最好仍是带上它的值。

请看图一的第一条js恳求http://i.sso.sina.com.cn/js/ssologin.js,同窗们能够面出来看,那个便是前里提到的减稀用户名战暗码等一系列的减稀文件了,假如有同窗非要问我是怎样找到那个减稀文件的,我也只要道:重复抓包,从正在阅读器输进weibo.com事后便找js文件恳求途径,然后再用代码格局化东西翻开,挨着一个一个看,正在代码中搜枢纽字,好比那里我们能够搜"nonce"、“servertime”等,就可以找到减稀文件了。

翻开减稀文件我们能够看到减稀用户名的代码,正在减稀js文件中搜刮'username',能够看到有一止代码为:

username = sinaSSOEncoder.base64.encode(urlencode(username));

如今我们能够间接查找encode办法(代码太多便没有揭上去了),便可查找到对应办法了,为了考证我们的料想,我们能够正在webstorm中copy那个encode函数带上本人的用户名运转,返回的成果便是su的值,那个值正在以后停止post提交的时分也会用到。假如对减稀有必然经历的同窗能够一眼便会看出那个是base64编码,python中有个base64模块能够干那个工作。我们再回到图一,http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)那个地点便是停止post提交数据的地点,上面是我本人提交的数据:

超具体的Python完成微专模仿登岸丨小利剑皆能懂-4.jpg

图3

那里我们需求本人机关su(减稀后的用户名),sp(减稀后的暗码),servertime,nonce,rsakv等数据,别的数据皆不消变。有同窗问我为哈别的数据不消变?您本人能够多登岸几回,看变革的值,那末那些值便是需求机关的值,别的值便间接拿过去用就好了。

那里的su,servertime,nonce,rsakv皆曾经拿到了,以是当前需求的便只是sp的值了。我们仍是根据本来的办法正在js文件中查找“sp”,能够找到requests.sp=password那段代码,以是我们便只需求看password怎样机关的了。经由过程查找能够看到枢纽减稀代码:

password = RSAKey.encrypt([me.servertime,me.nonce].join("\t") +"\n"+ password)

那一段代码即是减稀暗码的代码,有经历的同窗一看便明白是用的RSA减稀,python中也有响应的rsa减稀库可用。可是我们假定各人皆出看出去大概没有明白python中有rsa那个第三圆库。这时候候便要给各人引见一些我的经历了,我如今曾经明白的有三种模仿登岸计划:

  • 最简朴暴力,服从也是最下的,间接把js源码转化为响应的python代码,模仿减稀流程停止减稀
  • 利用selenium+phantomjs/firefox的计划间接模仿人的操纵挖写表单提交数据停止模仿登岸,这类方法最为简朴,服从略微低一些。假如有同窗对这类简朴暴力的方法感爱好,能够到我的github上检察一下源码
  • 比力折衷的计划,经由过程pyv8/pyexecjs等衬着js代码停止施行,本文次要便是讲的这类方法。

第一种方法假如是碰到微专调解了登岸减稀算法,便必需改减稀代码,第两种方法战第三种方法没有存正在那个成绩。

因为我用的是Python3,其实不撑持PyV8,以是我选了战它相似的PyexecJS(https://github.com/doloopwhile/PyExecJS),那个也能够间接施行js代码。我也没有是很熟习Javascript代码,以是我间接界说了一个函数处置减稀暗码,并出对其减稀源代码修正太多:

function get_pass(mypass,nonce,servertime,rsakey){
varRSAKey = newsinaSSOEncoder.RSAKey();
RSAKey.setPublic(rsakey,"10001");
password= RSAKey.encrypt([servertime,nonce].join("\t") +"\n"+ mypass)
return password
}

那个函数中的工具实在便是copy的减稀文件的减稀历程代码。为了实验,我间接利用之前本人登岸抓到的nonce、servertime、rsakey等数据,正在webstorm中挪用那个函数,可是报错了,提醒"navigator is undefined",webstorm 利用的nodejs的运转时情况,而navigator为阅读器的某个属性,以是运转会出成绩。

因而我便是用phantomjs去做为运转时情况.思索到有同窗没有明白phantomjs怎样利用,那里我扼要道一下吧。利用windows的同窗先要来 phantomjs民网 下载它的可施行文件,然后设置情况变量。正在号令止输进"phantomjs some.js"便可施行some.js文件,实在便战正在号令止施行python大概java文件一样,假如没有分明的能够百度施行号令止施行python的办法,模仿着去就能够了,再没有分明便正在背景问我。

利用ubuntu的同窗能够间接用sudo apt-get install phantomjs,就能够装置利用了。我间接把减稀的js文件利用phantomjs运转,公然好着呢。

缘故原由是由于phantomjs实在便是一款无ui的阅读器,天然撑持navigator、window等属性。而pyexecjs撑持利用phantomjs做为运转时情况,详细用法pyexecjs的git主页有,我也正在代码中有所表现。

with open('G:/javascript/sinajs.js','r') as f:
source = f.read()
phantom = execjs.get('PhantomJS')
getpass = phantom.compile(source)
mypass = getpass.call('get_pass',my_pass,nonce,servertime,pubkey)

那段代码就能够获得减稀事后的暗码了。

以后,即可以停止post提交,提交地点能够从抓包东西看到:http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)。

按照经历,到那里历程根本便完了。可是微专有面坑啊,那里借需求有一步,便是图一所示的相似http://passport.weibo.com/wbsso/login?ssosavestate=1493447127&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack&ticket=ST-NTc3NTg1MjMwNw==-1461911127-gz-1DE185DF04280D7E96BDCD14D9D8E235&retcode=0,那一步会将恳求重定背,返回当前账号的登岸疑息,以下图:

超具体的Python完成微专模仿登岸丨小利剑皆能懂-5.jpg

图4

那末成绩去了,怎样获得上里的恳求地点呢。阐发上里地点,有ticket字段,那个该当是让您登岸的根据,以是那个地点该当是效劳端返回的,假如没有是,最少ticket是效劳端返回的,因而我们又利用抓包东西检察正在恳求那段url之前返回的疑息,发明有战上述url符合的疑息:

超具体的Python完成微专模仿登岸丨小利剑皆能懂-6.jpg

图5

那段代码是利用post后复兴的内乱容,以是能够间接从中提掏出我们需求的url。然后再利用get方法恳求上述的url,它会阅历一次重定背,间接返回登岸疑息。那个时分,便代表胜利登岸了。

PS:授人以鱼没有如授人以渔,那是我不断承袭的信心。能够有的熟手在行以为我写得很烦琐,但实在许多新脚能够皆没有明白那些细节,以是我把我正在阐发新浪微专模仿登岸的历程齐写了出去。

别的,除这类方法,本文提到的别的两种方法也有完成。最暴力的方法需求利用rsa那个第三圆库,详细我正在代码上有具体正文,另有一种是利用selenium+phantomjs这类方法,我也正在代码中枢纽处所有正文.

Talk is cheap,show me the code!

最初送上本文的一切方法的模仿登岸代码(假如以为喜好大概看了对您有协助,无妨正在github上给个star,也欢送fork)

代码链接,欢送fork战star(https://github.com/SpiderClub/smart_login/tree/master/sina_login)

好了,本文便给年夜伙分享到那里,文终分享一波祸利

超具体的Python完成微专模仿登岸丨小利剑皆能懂-7.jpg


超具体的Python完成微专模仿登岸丨小利剑皆能懂-8.jpg

获得方法:存眷+公疑我“python册本”便可获得以上资本!
回复

使用道具 举报

 

精彩评论5

正序浏览
月色如水 发表于 2019-5-12 13:36:52 来自手机 | 显示全部楼层
 
回复 支持 反对

使用道具 举报

 
丨Vampire丶永恒 发表于 2019-5-15 10:17:38 来自手机 | 显示全部楼层
 
啊啊啊啊啊啊啊啊啊啊啊
回复 支持 反对

使用道具 举报

 
香橙ぽ 发表于 2019-5-15 10:21:29 来自手机 | 显示全部楼层
 
支持楼主,用户楼主,楼主英明呀!!!
回复 支持 反对

使用道具 举报

 
hffirstboy 发表于 2019-5-15 10:22:16 来自手机 | 显示全部楼层
 
秀起来~
回复 支持 反对

使用道具 举报

 
ミ猫田喂山风 发表于 2019-5-15 10:26:55 来自手机 | 显示全部楼层
 
小白一个 顶一下
回复 支持 反对

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

排行榜

关注我们:微信公众号

官方微信

APP下载

全国客服QQ:

3388506817

Email:3388506817#qq.com

【版权声明】本站大部分内容由网友自发贡献,本站不拥有所有权,不承担相关法律责任,如有侵权请告知,本站将立刻删除涉嫌侵权内容。

Copyright   ©2015-2016  乐云媒自媒体之家Powered by©Discuz!技术支持:乐送网络     ( 津ICP备17006261号 )