在抓取网站内容,模拟网站登陆等过程中:
【教程】手把手教你如何利用工具(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。
并且,是利用从最开始的地方,往后去搜索:
然后搜出来,第一个出现的位置是:
可以看到,当前的url地址是 16/80,即一共抓取到了80条记录,现在这个是第16个。
这意味着,在此之前15条记录中,都没有出现SAVEUSERID,而第一次出现此SAVEUSERID,是在第16条记录,url地址为:
https://passport.baidu.com/img/v2/small_blank.gif
切换到summary view,更加容易看清整个抓取的记录的情况:
但是,此处,没有出现我们所期待的,是访问某个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:[email protected]/
的:
所以,然后点击右键,选择拷贝,然后可以打开看看其中内容是:
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:
General->Settings->View File:
其中可以找到对应的cookie:
此时,知道原因了,那就可以再去去完整清除所有的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,清楚之前所抓取的所有的数据:
2.再刷新:
C:\Users\CLi\AppData\Local\Microsoft\Windows\Temporary Internet Files
然后找到
Cookie:[email protected]/
点击右键,选择删除:
另外,也顺带发现了,其他一些和百度有关的cookie:
Cookie:[email protected]/
Cookie:[email protected]/ -> 其中包含了Hm_lvt_9f14aaa038bbba8b12ec2a4a3e51d254和Hm_lvt_87552b45c65e0cee553df4aae1e815fc
Cookie:[email protected]/
也都顺便一起都删除,以便影响后续的分析。
然后,再去重新打开http://www.baidu.com/,去抓取数据:
再去点击“登陆”:
输入用户名和密码去登陆:
然后再去重新搜索想要分析的SAVEUSERID,然后搜索出来的第一个是:
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的关系:
赋值下来其所有值为:
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,其他参数的值等,都是按照上述的逻辑,去一点点分析,找到最终的某个值的来源,然后才能用程序去模拟的。