全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1469 1
2022-08-11
环境

  • 操作系统:windows 10 x64
  • 集成环境:Visual Studio Code
  • Python版本:v3.10.5 64位




------解码需要os、sqlite3、win32crypt、base64、cryptography、json
-----访问网页需要urllib、http


一、说明


这篇博文是一篇解题思路的记述文章,代码也是按照解决问题的思路一路写下去的,所以基本不存在函数、类等可以反复调用的对象,甚至其中还存在一些手动的动作。也即意味着如果你顺利的理解了这个思路,可以通过自己的修改让代码看起来更加的优雅整洁。ps:为了保证代码环境的纯净,建议在实施本博文之前,先清除百度在Chrome中的所有cookie。

二、原理简述


浏览器是利用cookie实现免密码登录的。如果想实现通过python对百度的登录,需要先在浏览器中进行一次登录,然后获取cookie文件,最后基于获取的文件进行百度其他产品的访问。

三、步骤


1、通过Chrome访问百度,获取Cookie


用户首先需要在Chrome上正式访问一次百度的网页,如百度搜索首页www.baidu.com。如果未登录,需要登录成功一次以产生cookies。
Chrome浏览器(version≥103)的cookie是以SQlite库的形式存储的。在Windows文件资源管理器的地址栏中键入路径%localAppData%\Google\Chrome\User Data\Default\network\,可以很容易的找到这个名为Cookies的SQlite文件。所以它的完整路径是:


复制代码

因为Cookies文件的本质是一个SQlite库文件,所以可以通过Navicat等数据库管理软件直接打开它。此库包含两张表:
  • - cookies
  • - meta

其中cookies表存储的就是与Cookie相关的数据。

需要关注如下几个字段:

creation_utc(创建时间) host_key(域名) name(变量名) encrypted_value(变量值) path(路径)
13302687838867670 .baidu.com BAIDUID v10J�����q��Kp¶�3)Z���&1m� /

其中host_key存储的是网页域名,可以被用于识别cookie的归属对象。name就是变量名;encrypted_value就是变量值。它是一个加密字段。其密钥存储在Local State文件中,路径为:
复制代码

Local State
本质上是一个Json文件。接下来将尝试通过这个文件来解密变量值。

2、利用Python解密变量

2.1准备工作


将一些常量载入
复制代码

2.2 获取Cookie、LocalState两个文件的完整路径
复制代码

2.3 将Cookies读入valCookies变量

复制代码


2.4 将LocalState存储的密钥读入key变量
复制代码

2.5 对2.3中valCookies列表中的[encrypted_value]字段进行解密
复制代码

3、基于解密的列表生成cookie
复制代码

4、cookie预览
如果一切顺利,在做完上面所有步骤后,将会获得一个编辑好的cookie文件。它大致的内容如下:



# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file!  Do not edit.



.passport.baidu.com        TRUE        /        TRUE        13302687843561289        PTOKEN        6842356784ffb2db1236574567d8ee1d3
.baidu.com        TRUE        /        FALSE        13302687839790384        BIDUPSID        AG43E548AF7F091F824110AC4ABCD9DA5
.passport.baidu.com        TRUE        /        TRUE        13302687843561303        HISTORY        ffb2db1236574567d8ee1d3affd3
...
...

5、访问网页

5.1 准备工作


包括定义好headers、载入cookie、定义好需要访问的网址
复制代码

5.2 访问工作
复制代码

5.3 存储新的cookie访问新的网页意味着会产生新的cookie,所以要及时存储这些cookie

复制代码


以上就是一个从0开始利用python登录百度账户的过程。
要注意cookie作为客户端与服务端通讯的密钥,其具有时效性。如果长时间不模拟登录,cookie就会失效。到时候需要重新将这个过程来过一次。


附件列表
1.png

原图尺寸 15.11 KB

1.png

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2022-8-24 14:22:22
<!-- markdown css tag --><div class="pinggu_markdown">
<div class="pinggu_markdown__html"><p>点了这个也会存在这个问题,这段回复就是在高级模式的markdown编辑发表的</p>
</div>
</div>
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群