最新消息:VPS服务器又从fzhost.net换回Linode了,主题仍用朋友推荐的大前端D8

【教程】如何利用IE9的F12去分析网站登陆过程中的复杂的(参数,cookie等)值(的来源)

Web_Technology crifan 1616浏览 0评论

在抓取网站内容,模拟网站登陆等过程中:

【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程

往往要去分析某些变量,参数,某cookie的值的来源。

而想要分析单个的值,相对于从F12所抓取到的海量信息,即N多条的记录,且每天记录中有N多数据信息,来说,很多时候,不是那么容易就找到你所想要的值的。

 

下面,就以登陆百度首页过程中,所涉及的一个cookie:SAVEUSERID,为例,来说明,如何一点点分析,找到最终这个值的来源。


【前提】

在:

【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程

中用F12分析百度登陆之前,已经通过:

Cache->Clear session cookies

Cache->Clear cookies for domain

Cache->Clear browser cache

Cache->Clear browser cache for this domain

清除了所有的cache(缓存)和cookie了。

 

然后现在接着去找,在访问:

https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true

时所用到的名为SAVEUSERID的cookie,是从哪里来的。

所以,能想到的,就是先去搜索SAVEUSERID。

 

并且,是利用从最开始的地方,往后去搜索:

from start to search

然后搜出来,第一个出现的位置是:

first occurence

可以看到,当前的url地址是 16/80,即一共抓取到了80条记录,现在这个是第16个。

这意味着,在此之前15条记录中,都没有出现SAVEUSERID,而第一次出现此SAVEUSERID,是在第16条记录,url地址为:

https://passport.baidu.com/img/v2/small_blank.gif

切换到summary view,更加容易看清整个抓取的记录的情况:

summary view first occurence

 

但是,此处,没有出现我们所期待的,是访问某个url,然后返回的cooki中,包括了此SAVEUSERID。

 

【小提示:cookie的生成和出现的时机】

所谓cookie,一般都是访问服务器,然后服务器返回的cookie。

然后之后才是访问其他的,后续的地址时,sent这些cookie,然后后续访问的地址所返回的信息中,可能会再次更新值/删除本地的,旧的cookie,以及也可能返回新的,增加新的本地的cookie。

甚至是第一次出现此cookie,是代码本身,比如javascript中通过代码生成的cookie。

但是无论如何,一般第一次出现一个cookie,最常见的都是服务器返回的cookie。其实少数可能是由期间运行到的javascript代码所生成的。

 

所以,接下来,还要想办法,找到此cookie,SAVEUSERID,第一次出现是在什么时候。

 

对此,需要用到我之前自己折腾的时候所学到的经验。

是去查看本地缓存文件和cookie中,看看是否有之前所保存的cookie。

因为,之前通过IE9的F12所执行的删除cookie时,其虽然的确删除了“当前domain”的cookie,但是对于非当前domain的cookie,并没有删除掉。

即,本来是通过点击

Cache->Clear session cookies

Cache->Clear cookies for domain

打算删除掉,关于百度的所有的cookie的,结果,实际上,此时只去删除了

当前domian=www.baidu.com

所相关的cookie,而对于passport.baidu.com,由于和www.baidu.com不是同一个domain

(这点很容易迷惑人,不了解的去看:

【全部解决】Cookie的Domain值的起始是否包含点的问题 + cookie的Domain和Host的关系 + Cookie的Domain的作用域/有效范围

 

所以,本地那些passport.baidu.com相关的cookie,还是存在的,所以通过自己手动找到电脑中放cookie和缓存的地方,还是可以找到的:

Cookie:cli@passport.baidu.com/

的:

temp internet files cookies for passport baidu

所以,然后点击右键,选择拷贝,然后可以打开看看其中内容是:

SAVEUSERID
345baf769053e0ed4234
passport.baidu.com/
1024
1176968064
30863716
1055336676
30260219
*
PTOKEN
5861be3f7317a32a65afbd76ee501711
passport.baidu.com/
1024
1176968064
30863716
1055336676
30260219
*
STOKEN
2e0266d36ed35e658f14c183695d7936
passport.baidu.com/
1024
1176968064
30863716
1055336676
30260219
*

这里,才是真正SAVEUSERID所在的位置,而为何之前找不到SAVEUSERID第一次出现的位置,是因为此处本地

域名(domain)为passport.baidu.com所对应的cookie中包含了SAVEUSERID,没有被删除掉,所以,上述IE9的F12抓取到的第一次出现的SAVEUSERID的时候,就已经有了值,且在访问地址:

https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true

时所使用了。

 

【小提示:手动找到本地存放cookie和cache的地方】

即 浏览器的临时文件夹,可以通过如下方法找到:

选项->Internet Option:

options Internet options

General->Settings->View File:

general settings view files

其中可以找到对应的cookie:

temp files cookies

 

 

此时,知道原因了,那就可以再去去完整清除所有的cookie和cache了:

1.先去F12中执行:

Cache->Clear session cookies

Cache->Clear cookies for domain

Cache->Clear browser cache

Cache->Clear browser cache for this domain

再点击Clear,清楚之前所抓取的所有的数据:

clear all

 

2.再刷新:

C:\Users\CLi\AppData\Local\Microsoft\Windows\Temporary Internet Files

然后找到

Cookie:cli@passport.baidu.com/

点击右键,选择删除:

delete passport baidu

另外,也顺带发现了,其他一些和百度有关的cookie:

Cookie:cli@pan.baidu.com/

Cookie:cli@www.baidu.com/ -> 其中包含了Hm_lvt_9f14aaa038bbba8b12ec2a4a3e51d254和Hm_lvt_87552b45c65e0cee553df4aae1e815fc

Cookie:cli@www.baidu.com.sin114.com/

也都顺便一起都删除,以便影响后续的分析。

 

然后,再去重新打开http://www.baidu.com/,去抓取数据:

new capture baidu

再去点击“登陆”:

re login

输入用户名和密码去登陆:

has login

然后再去重新搜索想要分析的SAVEUSERID,然后搜索出来的第一个是:

search SAVEUSERID found first is 3 of 67

3 /67,即共67条记录中的第三条记录,url地址是:

https://passport.baidu.com/v2/api/?login

很明显,其就是我们所期望的了,因为其中的SAVEUSERID是通过Set-Cookie所获得的,是访问服务器的某个地址(https://passport.baidu.com/v2/api/?login),然后服务器所返回的cookie值。

如此,我们才能有机会,去写代码,去模拟访问此路径,获得此cookie,然后有后续的可能,利用此cookie,访问后续其他地址,最后完整模拟登陆网站的全部过程的。

 

另外,从Cookies页面,可以更完整的看到所有的cookie的关系:

sent 1 and receive 5 cookies

赋值下来其所有值为:

Direction	Key	Value	Expires	Domain	Path	Secure	HTTP only
Sent	BAIDUID	CDFB2428D458E80FEBE945BE3417D33F:FG=1					
Received	BDUSS	ZPeDA1dmZpVWtaYkR1MHVBNklQWjJzSjlwcm9KRWE0U2hOSW9aLXRRN0ZMSVpSQVFBQUFBJCQAAAAAAAAAAAoqxg2y1YMAY3JpZmFuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAYIArMAAAALD2RX0AAAAA6p5DAAAAAAAxMC4yNi4xMMXemFDF3phQaU	Sat, 23-Jan-2021 09:56:21 GMT	baidu.com	/	No	No
Received	PTOKEN	97c4278d97bb55b68b67ee7eab974b4c	Sat, 23-Jan-2021 09:56:21 GMT	passport.baidu.com	/	No	No
Received	STOKEN	1f93a5f7f04911545777c92fa0fabbd5	Sat, 23-Jan-2021 09:56:21 GMT	passport.baidu.com	/	No	No
Received	PTOKEN	deleted	Mon, 07-Nov-2011 09:56:20 GMT	baidu.com	/	No	No
Received	SAVEUSERID	345baf769053e0ed4234	Sat, 23-Jan-2021 09:56:21 GMT	passport.baidu.com	/	No	No

也很明显看到,另外我们所需要的几个cookie,即PTOKEN,STOKEN,SAVEUSERID,也同时获得了。

 

【总结】

至此,才完全的分析出来,单个的值,此处为名为SAVEUSERID的cookie,其最原始的值,是访问:

https://passport.baidu.com/v2/api/?login

然后服务器返回的响应中,包含了Set-Cookie,设置了新的名为SAVEUSERID的cookie,最终找到了此SAVEUSERID的来源。

 

而对于模拟网站登陆中,所涉及的其他cookie,其他参数的值等,都是按照上述的逻辑,去一点点分析,找到最终的某个值的来源,然后才能用程序去模拟的。

转载请注明:在路上 » 【教程】如何利用IE9的F12去分析网站登陆过程中的复杂的(参数,cookie等)值(的来源)

发表我的评论
取消评论

表情

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

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

网友最新评论 (10)

  1. 你好,我发现访问https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true 时并不会用到 SAVEUSERID啊
    吴曼2年前 (2016-07-04)回复
    • 百度改版了,所以看不到了。
      crifan2年前 (2016-07-15)回复
  2. 写得很棒,确实看出来花时间去研究了,很详细。 不过我想说一点。 我觉得您写文的思维和写代码的思维一样,特别模块化,一篇文章里面引用各种其他文章,而其他文章又会引用别的文章,甚至再引用回来,读者不是机器,很难去寄存很多东西,再跳转再返回,这样读确实很累。 建议您可以发布一篇完整的博文,将需要其他地方的内容直接拷贝过来。如果想增加其他文章的点击量,可以把统一引用放在最后或者开头。
    lowbee3年前 (2015-04-25)回复
  3. 想问问遇到登录是加载完毕,使用javascript生成了含有时间戳参数的url,在python怎么确定这个时间戳?我在模拟登录51cto的之后进行签到时候就困扰在这个地方。签到的那个url是new Date().getTime()生成的。而且还是在加载完毕后就生成。这个用python怎么模拟?
    消逝的时间4年前 (2014-10-23)回复
  4. Hi, crifan,认真拜读了你这篇文,真的受益匪浅。有一个问题,我目前想模拟知乎(www.zhihu.com)的登陆,按照你所说的把cookie彻底删光了,还同步跟踪了Temporary Internet Files文件夹的cookie什么时候会生成。可是我还是没能找到_xsrf和__utmc是怎么生成的,第一次登陆它就是属于浏览器发送出的cookie,这会是什么原因呢?真的很感谢你一直以来的耐心解答,教程也写得超赞~~
    JohnSmith5年前 (2013-04-27)回复
    • 哈哈,又折腾了一天,解决了!原来_xsrf和q_c1第一次访问首页就会生成,我处理一下cj放到para里面就能访问了~(其实还是有点不完美,在request header里面有个connection和content-length,我明明能计算出content-length,但加上这两行headers就会返回403,注释掉倒是能正常取数据了。)非常感谢~
      JohnSmith5年前 (2013-04-28)回复
      • 哈哈,我跟你一样也模拟登录过知乎,也是找到了那个_xsrf的值才解决了问题。
        carter5年前 (2013-11-28)回复
  5. 能再问两个问题吗?不好意思,我太笨了。:) 第一个问题是,我没有在small_blank.gif里找到我的cookie http://xiangce.baidu.com/picture/detail/ed24361c07e01de9b35518e49f07b4bd593fe34c 第二个问题是,有的时候会有log in error http://xiangce.baidu.com/picture/detail/aae32c136b196044bd9db1e2244a30294b862648 万分感谢!
    gyz6年前 (2012-11-20)回复
    • 1,我的上面的分析过程,是基于正常登陆而言的。没有正常登陆的话,某些cookie,肯定,当然,很可能,是不会出现的。 所以想问的是,你这里是正常登陆了,然后去分析对应的cookie吗? 2.有时候发生未知错误,有可能是百度服务器本身有问题。但更多的时候,是你自己这边的问题。一般来说,通过彻底清除cookie,彻底清除缓存,都是可以解决的。 所以,你自己去: 手动彻底清除缓存; 手动彻底清除cookie; 然后再重新登录并抓取分析整个过程,一般来说,都是可以正常登录的。
      crifan6年前 (2012-11-20)回复
      • 谢谢! 但是我第一个截图是在正常登录的情况下的。
        gyz6年前 (2012-11-21)回复
17 queries in 0.309 seconds, using 10.45MB memory