转自:http://blog.csdn.net/pipisorry/article/details/47904355

如果要想获取微博中的数据,最重要的第一步就是模拟登录了。这里讲解一下微博登录的流程,有助于用代码实现。

Sina CAS的登陆过程

其实sina的sso实现了yale-CAS并且添加一丁点新的东西,基本认证过程交互流程仍然未变。其独创的一点是实现了Ajax单点登陆,比较牛。实现原理是iframe+ JavaScript回调函数。

初级SSO

初级的SSO,就是在同一个顶级域名下,通过种入顶级域名的Cookie,来实现统一登陆。例如:

单点登陆地址:sso.xxx.com/login.jsp

应用1: web1.xxx.com/login.jsp

应用2: web2.xxx.com/login.jsp

应用3: web3.xxx.com/login.jsp

登陆流程:

情况一:(用户从未登陆)

1,  用户访问web1.xxx.com/login.jsp,web1重定向到sso.xxx.com/login.jsp

2,  用户输入验证,成功。sso.xxx.com种入.xxx.com域Cookie的tokenid,重定向到web1.xxx.com/login.jsp,web1.xxx.com访问.xxx.com域Cookie的tokenid判断出已经登陆,系统登陆完成。

情况二:(用户已经登陆)

直接登陆。

Sina SSO

Sina实现了跨域名的统一登陆,本质也是基于Cookie的。如果用户禁用Cookie,那么无论如何也是登陆不了的。

Sina SSO服务器是login.sina.com.cn/sso/login.PHP,微博登陆地址为weibo.com/login.php。

通过回调函数和iframe实现了跨一级域名的登陆。

皮皮Blog

认证过程具体流程(用户从未登陆过)

1,  用户进入weibo.com/login.php

2,  用户输入用户名称。输入完毕后,当用户名输入框焦点失去的时候,页码通过ajax向服务器login.sina.com.cn/sso/prelogin.php发送请求,参数为user(刚刚输入的用户名)[通过抓包lz发现实际发送信息的地址为http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=*******&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.18)&_=1441503921772, *****就是你输入并经过js加密处理的用户名]。服务返回server time 和nonce 认证等postdata,通过回调函数写入到javascript变量中。

3,  用户输入密码,点击登陆,页面POST 请求(注意是ajax请求,并不是login.php发送的,http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)),请求的发起的页面是weibo.com/login.php中的一个不可见iframe页面,参数为第二步得到的servertime 、nonce 、用户名称和加密的密码。返回种入Cookie  tgt在login.sina.com.cn下。同时修改iframe地址为http://passport.weibo.com/wbsso/login?ssosavestate=1472919508&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack%26sudaref%3Dweibo.com&ticket=*****&retcode=0

Note: 1. 产生请求的原因:signin.php文件中的OnReady()函数添加了表单的OnSumbit处理函数 $("vForm").onsubmit = function(){return login();}; login()调用sinaSSOController.login()->sinaSSOController.loginMethodCheck()->sinaSSOController.loginByConfig() ->sinaSSOController.loginByIframe(),在loginByIframe()函数中新建了一个隐藏的loginForm,通过表单的Submit方法产生上述请求。

2. lz发现http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18))返回的内容是
...<script charset="utf-8" src="http://i.sso.sina.com.cn/js/ssologin.js"></script>
Signing in ...
<script>
try{sinaSSOController.setCrossDomainUrlList({"retcode":0,"arrURL":["http:\/\/crosdom.weicaifu.com\/sso\/crosdom?action=login&savestate=1473040530","http:\/\/passport.97973.com\/sso\/crossdomain?action=login&savestate=1473040530","http:\/\/passport.weibo.cn\/sso\/crossdomain?action=login&savestate=1"]});}catch(e){}try{sinaSSOController.crossDomainAction('login',function(){location.replace('http://passport.weibo.com/wbsso/login?ssosavestate=1473040530&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack%26sudaref%3Dweibo.com&ticket=ST-*****==-1441504530-gz-618D3C7ABA8F37A5BEE36BADAB7A88DF&retcode=0');});}catch(e){}
</script>...注意到这里面有4个返回地址crosdom.weicaifu.com...、passport.97973.com...、passport.weibo.cn...、passport.weibo.com...,其中passport.weibo.com...才是我们要的,地址中还带有ticket,其它3个lz真不知道干嘛用的。

4,  iframe 访问http://passport.weibo.com/wbsso/login?ssosavestate=1472919508&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack%26sudaref%3Dweibo.com&ticket=*****&retcode=0,用户登陆,返回种入cookie在.weibo.com下,记录用户登陆信息。

5,  通过js再次访问weibo.com/login.php,因为cookie已经写入,登陆成功,服务器发送302,重定向到用户主页面。Weibo.com/userid。

6,  至此,登陆过程完成。

可以看到,上面所说的页面请求都可以通过fiddler2抓包得到

交互过程和密码加密算法分析

1, 在提交POST请求之前, 需要GET 获取两个参数。
       地址是:http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)
       得到的数据中有 "servertime" 和 "nonce" 的值, 是随机的,其他值貌似没什么用。
2, 通过httpfox 观察POST 的数据, 参数较复杂,其中 “su" 是加密后的username, "sp"是加密后的password。"servertime" 和 ”nonce" 是上一步得到的。其他参数是不变的。
    username 经过了BASE64 计算: username = base64.encodestring( urllib.quote(username) )[:-1];
    password 经过了三次SHA1 加密, 且其中加入了 servertime 和 nonce 的值来干扰。即: 两次SHA1加密后, 将结果加上 servertime 和 nonce 的值, 再SHA1 算一次。
    将参数组织好, POST请求。[Sina微博 SSO登陆过程分析]

Note: 后来新浪微博的加密方式改成两次SHA1加密再来一次RSA加密了。再后来新浪登录过程变为了RSA。

以后可能还会变化,但是各种加密算法在Python中都有对应的实现,只要发现它的加密方式,程序比较易于实现。

[新浪网站登录过程分析]

皮皮Blog

使用httpfox解析新浪微博的登录过程

新浪微博的认证流程:

1、这里在火狐下使用HttpFox工具抓取登陆的数据交互,打开HttpFox,用户进入weibo.com/login.php登陆页面,抓取得到数据如下:

image

我们用浏览器登陆weibo.com/login.php网页时,服务器在不断地跳转,从不同的位置给客户端返回所需的资源及稍后登陆所需的数据。我们需要找到对我们登陆所需要的信息,重要的交互记录如下:

image

选中的部分,从http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.18)站点位置GET得到的内容会在Content窗口显示,格式为Text/html,即:

sinaSSOController.preloginCallBack({"retcode":0,"servertime":1387782050,"pcid":"xd-62049b61eeb94c62c92e4c4d10db7dcb4c7d","nonce":"DF8VR6","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","exectime":0})

servertime、nonce 就是登录时候需要使用的,用于POST信息的加密。

2、输入用户名后,当用户名输入框焦点失去的时候,页面将再次访问http://login.sina.com.cn/sso/prelogin.php,得到上步中类似的消息:

image

这些数据都是登录时要提交的postdata,其中新的servertime、nonce 等值用于稍后用户登录时使用的是这些数的最新值。

3、输入密码,点击登陆,页面POST请求如下:

image

分析向http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.11)提交的参数POST Data:

entry    weibo
gateway    1
from
savestate    7
useticket    1
pagerefer
vsnf    1
su    aG91YW5kbGlob21lJTQwZ21haWwuY29t
service    miniblog
servertime    1387784432
nonce    PH653N
pwencode    rsa2
rsakv    1330428213
sp    04b4568a21646afc2418e86c99958ec09d3cf45c624404a96dd63a4f13a09384148af1b727d046ff17727f307460ff0b90db2a4d6c9d3ad1e1809b4756a002cf93129dcb0480b349dba2439db7874d0f32a7c0770d0f80360f6fa139d4e3f09bb2b50099b329cb2de5d59fdafc199dc7b3b2d731b43c5dd0948149fc6df4d624
encoding    UTF-8
prelt    101
url    http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack
returntype    META

su表示POST的账号,username经过了BASE64加密;password 经过了三次rsa加密, 且其中加入了 servertime 和 nonce 的值来干扰,sp为加密后的密码。

再看服务器的返回值,Type=text/html (NS_BINDING_ABORTED)而Result=(Aborted),Content窗口为:Error loading content (NS_ERROR_DOCUMENT_NOT_CACHED),因为网页发生了重定向跳转,原网页中止,HttpFox没有捕获到返回值。通过Python程序可以得到返回值,如下:

<html>
...
<title>新浪通行证</title>
...
<scripttype="text/javascript"language="javascript">location.replace("http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&ssosavestate=1390380654&ticket=ST-MzQ4NzQ5NTYyMA==-1387788654-xd-FED0CAF6BC574B4DE353DF875F9DB6AF&retcode=0");</script>
...

我们关心的返回结果是script部分:location.replace(http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&ssosavestate=1390380654&ticket=ST-MzQ4NzQ5NTYyMA==-1387788654-xd-FED0CAF6BC574B4DE353DF875F9DB6AF&retcode=0);

因为,HttpFox检测到随后两步的跳转网址为:

image

蓝色:http://weibo.com/sso/login.php?ssosavestate=1390381500&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack%2

6sudaref%3Dweibo.com&ticket=ST-MzQ4NzQ5NTYyMA==-1387789500-xd-710FAD84CC8AF2EE75FE5D197CD76234&retcode=0 

这一步上传url的值即为script部分(这里由于不是同一次登录,值不同但结构相同),retcode=0表示登陆成功,然后打开url跳转到下一步。

第二步:http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&sudaref=weibo.com

用户登陆成功,返回weibo.com的信息到客户端cookie中,记录了用户登陆信息。

4、接下来就是新浪的SSO(Single Sign-on)登陆了,就是在同一个顶级域名下,通过载入顶级域名的Cookie,来实现统一登陆。服务器会自动再次访问weibo.com(上图第四行),因为cookie已经写入,登陆成功服务器返回302,重定向到用户主页面。此后再访问微博中其他人的主页或使用微博的其他应用,服务器便可以通过cookie来检测用户的状态了。

当然,新浪的登陆方式未来可能发生改动。[解析新浪微博的登录过程]

from: http://blog.csdn.net/pipisorry/article/details/47904355

ref:scrapy模拟登录微博

网站常见的反爬虫和应对方法

现代浏览器的工作原理

http://blog.csdn.net/pipisorry/article/details/47008981

这篇文章是介绍使用scrapy模拟登录微博,并爬取微博相关内容。关于登录流程为嘛如此设置,请参考[微博登录过程分析]。

截包分析

下载软件Fiddler for .NET2查看相关登录流程信息。运行Python程序访问和直接在浏览器中刷新页面都可以在fiddler中找到网络包的相关信息。
Note: fiddler是抓包用的,是独立的工具。类似这种前端登录动作,也可以用casperjs。还可以用浏览器嵌入工具HttpWatch,截包工具如Firefox的插件httpfox。

获取登录入口

微博的登录入口有好几个,其实只要登录的逻辑不变, 其它的入口也是可以的。在微博登录界面分析html源码,获得其登录界面为http://weibo.com/login.php

查看需要的postdata

登录微博前,我们要先post相关数据。打开fiddler2,再登录微博,并查看fiddler2的内容变化

图中webForms所有数据就是我们在模拟登录时需要填入的数据.这些数据中除了su、sp、rsakv、servertime、nonce是经过js处理动态生成的,其它都是个固定值(其实需要的也就只有pubkey、url、pwencode和nonce、pubkey、retcode、exectime、pcid,其它的不用加入postdata,甚至和后面的有些可以不用添加(lz未验证)),可以在代码中写死。所以你的postdata只要提交su、sp、servertime、nonce、url、pwencode和pubkey、retcode、exectime、pcid。

Note: su是js处理后的用户名;sp是js处理后的密码;servertime、nonce 、pubkey都是登录时候需要使用的,用于post信息(sp)的加密;pwnencode=rsa2是weibo登录对密码的加密方式。

获得postdata

当然上面的信息可以用抓包工具抓到,但是我们要在程序中获得这些post信息。

1. 在浏览器登录后,fiddler2会抓到另一个login.sina.com.cn下的js文件http://login.sina.com.cn/sso/prelogin.PHP?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.18),这个js文件就是当用户输入用户名时,网页发送用户名到js文件中,js文件处理用户名并返回su、servertime、nonce、url、pwencode和rsakv、retcode、exectime、pcid这些post数据,用于后面的密码加密并提交到后续网站,在下面的textview中可以看到

Note:1. 上面的js地址是在未登录的情况下抓包得到,并且后面的&_=1441377653804%20HTTP/1.1已经被lz省略了,后面的数字实际上是str(time.time()).replace('.', '')这个东西,对于获取postdata没用。

2. 上面url的su=部分, 这里的su是经过js处理后的用户名,在后面加入js处理后的用户名,js处理后的用户名当然是登录后得到的

2. 其实手动在浏览器中输入上面的js地址,也会得到相应的post数据输出

可以看到

如果su-为空,得到:
sinaSSOController.preloginCallBack({"retcode":0,"servertime":1441379724,"pcid":"gz-ca74a2cf2705a177abe404a62a1140d71d09","nonce":"89VNFB","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","uid":"2835992634","exectime":4})
填入js处理后的用户名得到:
sinaSSOController.preloginCallBack({"retcode":0,"servertime":1441380255,"pcid":"gz-3ab638aed06967c056296dca13e50a4a6333","nonce":"TCEW1Y","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","exectime":3})

Note: 登录后的结果,仅仅是少了一个uid,同时所有人的pubkey是一样的,因为是公钥嘛。

皮皮Blog

模拟js处理用户名及密码

浏览器中输入http://login.sina.com.cn/js/sso/ssologin.js得到这个js文件,复制内容到js编辑器中(lz是在pycharm中创建js文件格式化后查阅的)查看。

Note: 在未登录状态,浏览器中刷新登录界面http://login.sina.com.cn/signup/signin.php?entry=sso这个页面,fiddler2就可以抓到那个ssologin.js文件

查看ssologin.js的makeRequest函数:

var makeRequest = function (username, password, savestate) {
        var request = {
            entry: me.getEntry(),
            gateway: 1,
            from: me.from,
            savestate: savestate,
            useticket: me.useTicket ? 1 : 0
        };
        if (me.failRedirect) {
            me.loginExtraQuery.frd = 1
        }
        request = objMerge(request, {pagerefer: document.referrer || ""});
        request = objMerge(request, me.loginExtraFlag);
        request = objMerge(request, me.loginExtraQuery);
        request.su = sinaSSOEncoder.base64.encode(urlencode(username));
        if (me.service) {
            request.service = me.service
        }
        if ((me.loginType & rsa) && me.servertime && sinaSSOEncoder && sinaSSOEncoder.RSAKey) {
            request.servertime = me.servertime;
            request.nonce = me.nonce;
            request.pwencode = "rsa2";
            request.rsakv = me.rsakv;
            var RSAKey = new sinaSSOEncoder.RSAKey();
            RSAKey.setPublic(me.rsaPubkey, "10001");
            password = RSAKey.encrypt([me.servertime, me.nonce].join("\t") + "\n" + password)
        } else {
            if ((me.loginType & wsse) && me.servertime && sinaSSOEncoder && sinaSSOEncoder.hex_sha1) {
                request.servertime = me.servertime;
                request.nonce = me.nonce;
                request.pwencode = "wsse";
                password = sinaSSOEncoder.hex_sha1("" + sinaSSOEncoder.hex_sha1(sinaSSOEncoder.hex_sha1(password)) + me.servertime + me.nonce)
            }
        }
        request.sp = password;
        try {
            request.sr = window.screen.width + "*" + window.screen.height
        } catch (e) {
        }
        return request
    };

用户名加密

从代码中我们可以知道su就是经过html字符转义再转成base64编码

python中我们可以这样转化:

def get_su(self, user_name):'''对用户名加密'''username_ =urllib.quote(user_name)  # html字符转义return base64.encodestring(username_)[:-1]

密码加密

weibo登录对密码有两种加密方式:rsa2与wsse,我们从上面的密码加密方式pwnencode=rsa2可知, js处理走的是这一部分逻辑。(wsse逻辑是通过一个if else判断得到,但我们登录一般是rsa2,wsse是干嘛的没深究)

并且servertime, nonce, pubkey都被用上了,我们只要把这部分js在python中转义就行了。

def get_sp_rsa(self, password, pubkey, servertime, nonce):'''对密码加密,http://login.sina.com.cn/js/sso/ssologin.js中makeRequest的python实现'''# 公钥pubkey在prelogin得到,固定值key =rsa.PublicKey(int(pubkey, 16), 65537)  # 10001对应的10进制,创建公钥message =('\t').join([str(servertime), str(nonce)]) +'\n'+password
    encropy_pwd =rsa.encrypt(message, key)return binascii.b2a_hex(encropy_pwd)  # 将加密信息转换为16进制

Note:

1. 0x10001要转化成10进制的65537, 还有要经过servertime + +'\t' + nonce + '\n' + passwd拼接字符串再进行Rsa加密, 最后转成16进制即得到sp.

2. 使用rsa加密要安装rsa拓展包 pip install rsa

皮皮Blog

模拟登录微博

以上我们分析了如何获取post值,知道哪些数据是需要提交的,也知道怎么处理用户名和密码来获取su、sp,下面讲解如何利用这些信息模拟登录新浪微博。

1. 请求http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.18),这个相当于登录前请求相关postdata的地址,在返回的response中获取servertime,nonce,pubkey等值

def get_prelogin_data(self):'''登录前,获得之后要提交的数据:return:'''prelogin_url =globleOptions.prelogin_urlpost_ori_text =requests.get(prelogin_url).textjson_data =re.search(r'\((.*?)\)', post_ori_text).group(1)json_data =json.loads(json_data)prelogin_data =dict(json_data)for key, value in prelogin_data.items():prelogin_data[key] =str(value)# print(prelogin_data)return prelogin_data

2. 模拟js计算加密后的用户名su、模拟js计算加密后的密码sp(加上上一步获取的pubkey、servertime、nonce)

3. 把1中得到的所有postdata与其它固定值su、sp一起提交到http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18),这个是请求登录的地址

Note: postdata要手动添加这两个数据,它们是1中返回时解析不到的,只有在抓包中看到。

post_data.update({'pwencode':'rsa2', 'url':r'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack'})

这个地址会跳转到passport.weibo.com/wbsso/login/,response会返回我们需要的地址,用正则表达式取出这个地址并请求, 得到如下正则表达式结果则登录成功

http://passport.weibo.com/wbsso/login?ssosavestate=1472919508&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack%26sudaref%3Dweibo.com&ticket=*****&retcode=0

retcode=101则表示登录失败

def start_requests(self):'''获取postdata并提交到登录地址'''login_url =globleOptions.login_urlusername =globleOptions.usernamepassword =globleOptions.passwordpost_data =self.get_postdata(username, password)# headers可以不用添加headers=globleOptions.headers# 将数据提交到登录地址return [scrapy.http.FormRequest(url=login_url, formdata=post_data, callback=self.access_new_loginurl)]

4. 还要请求上面得到的这个长地址(实际中的新登录地址),也就是得到重定位信息后,解析得到最终跳转到的新登录URL打开该URL后,服务器才会自动将用户登陆信息写入cookie,登陆成功。只有写入了cookie,后面的登录才会顺利。

def access_new_loginurl(self, response):'''获取新的登录地址并提交request访问, 自动写入cookie, 下次就可以直接访问其它网站了'''# print(response.body.decode('gb2312'))new_login_url =re.search(r"location.replace\('(.*?)'\)", response.body).group(1)# print('new_login_url : %s ' % new_login_url)request =scrapy.http.Request(new_login_url)  # 如果没有callback,就默认为parse方法return request

5. 这时cookie已经写入,我们再访问微博相关的网页,就可以直接得到登录后的页面数据了

def parse(self, response):'''登录后的爬虫,parse方法会自动request遍历start_urls中的url'''for url in self.start_urls:request =scrapy.http.Request(url=url, callback=self.parse_item)# request = response.request.replace(url=globleOptions.redir_url, callback=self.parse_item)yield request
def parse_item(self, response):'''处理items'''filename =re.split('//|\?', response.url)[1]# print(filename)filename =re.sub('/|\?', '.', filename) +'.html'with open(os.path.join('./TmpFiles', filename), 'wb') as html_file:html_page =response.bodyhtml_file.write(html_page)

Note :至于代码实现,可以用scrapy,也可以用python自带的urllib(当然这个明显爬取速度更快)

保存请求的cookie
只要把保存的cookie持久化到文件, scrapy每次请求时带上这个cookie就可以了。

from:http://blog.csdn.net/pipisorry/article/details/47008981

微博登录过程分析以及scrapy模拟登录微博相关推荐

  1. scrapy模拟登录新浪微博

    hi: all, scrapy搞模拟登录真的很简单哦,以下均是在你安装scrapy成功的前提下哦. 首先,分析新浪微薄的登录流程,使用抓包工具得到下面的图片: 一般来说,登录主要就是对服务器进行pos ...

  2. python模拟qq空间登录_模拟登录系列 | QQ空间模拟登录

    原文链接模拟登录系列 | QQ空间模拟登录​mp.weixin.qq.com 本系列所有代码均在这CharlesPikachu/DecryptLogin​github.com 原理简介 这里,我们简单 ...

  3. scrapy mysql 模拟登录知乎_Scrapy 模拟登录新版知乎

    写这篇文章是因为知乎登录已经改版了,新版登录和老版登录区别还是挺大了,新版登录的 post 请求减少了一些字段的同时新增了一些字段,而且新增的字段如 signature 的值是通过一些算法得到的,比较 ...

  4. scrapy mysql 模拟登录知乎_详细的Python Scrapy模拟登录知乎

    之前爬取携程和51job都是免登陆就能爬取数据的,但是今天爬取知乎的时候就需要登录后才能爬到数据,那我们只能进行模拟登录了. 知乎登录分为邮箱登录和手机登录两种方式,通过浏览器的开发者工具查看,我们通 ...

  5. 12-基于selenium实现12306模拟登录,及京东登录滑动缺口验证模拟登录

    流程分析: 使用selenium打开登录页面 对当前selenium打开的这张页面进行截图 对当前图片的局部区域(验证码图片区域)进行截图 这样验证码图片和模拟登录进行所显示的图片一一对应(如果我们对 ...

  6. python登录跳转_Python模拟登录和登录跳转的参考示例

    # coding:utf-8 import urllib import urllib2 import cookielib from bs4 import BeautifulSoup # 设置登录url ...

  7. php curl post登录与带cookie模拟登录随笔

    研究curl  post登录 一步一步来,一个星期前我也不知道curl是啥.都是百度学习的,好了贴代码 这个是没有验证码的登录(账号密码自己申请一个) <?php $cookieSuccess ...

  8. python多次登录教务系统_python3模拟登录正方教务系统

    刚学了大概两周的python ,顺便搞了下爬虫.试着用python模拟登录学校的教务系统. 看了个教程,附上链接 参照教程做了一下,发现系统经过一些变动,原教程还有很多可以改进的地方 准备工作 先来看 ...

  9. python模拟登录详细教程_Python模拟登录requests.Session应用详解

    最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...

  10. python的urllib2实现登录网页_python模拟网站登录(urllib、urllib2模拟登录)

    使用python模拟登录网站,首先要知道网站登录细节及相应的cookie. 分三步完成: 1,获取一个cookie 2,装载好自己的request 3,发送模拟登录请求 推荐阅读: Python模拟新 ...

最新文章

  1. GLUT库与GLAUX库
  2. babymips(上) 寒假逆向生涯(14/100)
  3. 总结一下silverlight文章,然后死等10月10日的正式版
  4. c# image转换为bitmap_Python PIL.Image与numpy.array之间的相互转换
  5. LeetCode 535. Encode and Decode TinyURL
  6. xlrd读取单元格演练
  7. 新计算 新网络 新旗舰:华为云C6实例首测
  8. I/O多路复用技术(select/poll/epoll)
  9. 不知不觉,写了一个编译器(一)
  10. Coins(HDU2844)
  11. 漫谈moosefs中cgi各项的意义
  12. 【Web笔记】Html学习手册
  13. c语言十六进制字母,c语言读取十六进制文件
  14. 解决aria2下载磁力链接或bt文件时没有速度或速度为0
  15. VC中常见的108个问题
  16. 计算机双工模式,小熊教你电脑设置连接速度和双工模式
  17. 28岁想入行软件测试,可行吗?
  18. LCD12864液晶显示模块的使用与分析
  19. a DNS-1123 label must consist of lower case alphanumeric characters or ‘-‘, and must start and end w
  20. 新款正品耐克气垫双肩包男女运动背包电脑旅行包大高中学生书包邮送水壶,新年降价促销!!!!!!

热门文章

  1. 《Google Go: A Primer》学习笔记
  2. EntityFramework 连接数据库出错
  3. 命令行下对apk签名
  4. LCD 驱动的整体分析。
  5. Step by Step-构建自己的ORM系列-ORM改进方案思考(上)
  6. 运用C#创建一个.Net下的Web Service
  7. 学习笔记 : 表达式目录树相关问题参照该demo expression拼接与拆解 expression转sql...
  8. 使用Java Api 操作HDFS
  9. win7下配置Apache本地虚拟主机
  10. 支持SMTP邮箱介绍