前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫进阶必备 | 某裁判文书检索网站加密分析与自动登录实现

Python爬虫进阶必备 | 某裁判文书检索网站加密分析与自动登录实现

作者头像
咸鱼学Python
发布2019-12-23 17:41:33
1.6K0
发布2019-12-23 17:41:33
举报
文章被收录于专栏:咸鱼学Python咸鱼学Python

抓包分析

先抓包分析一下登录的请求【图1-1】

图1-1

按照加密的参数,我们一个个分析。

首先是 _csrf ,这个参数比较简单,一般是用来防止跨域攻击的,感兴趣的朋友可以借助搜索引擎了解一下,不是重点我们就不详聊了。

直接检索 _csrf关键字,可以看到如图的结果,_csrf 在页面中传递过来的。【图1-2】

图1-2

接着再分析 password , 直接检索 password 就可以找到关键的加密文件。【图1-3】

图1-3

点进文件就可以看到密码的加密了【图1-4】,很明显是一个 RSA 和 AES 加密的结合。

图1-4

我们简单扣取一下逻辑,运行一下结果。【图1-5】

图1-5

既然能够生成密码值了就拿到了所有的加密参数了,现在整合到 Python 中看看。

Python 实现 Openlaw 登陆

之前没有学过 JS 逆向遇到登陆只会用 Selenium 模拟登陆,现在我们可以试试用 Python 直接搞起。

首先我们先生成加密后的密码:

代码语言:javascript
复制
def get_password():
with open(r"login.js", encoding="utf-8")as f:
        js = f.read()
        ctx = execjs.compile(js)
        pwd = ctx.call("keyEncrypt", "密码")
return pwd

再看看整体的登陆逻辑是什么样的【图2-1】

图2-1

可以看到先发起了请求1,提交了加密好的密码与账户名,并且携带上了csrf

之后是一个重定向请求【图2-2】

图2-2

请求完上面的两个请求后,之后经过跳转就访问了我们的个人中心。

所以这里需要使用上session获取cookie并且禁止重定向

代码语言:javascript
复制
login_r = session.post("http://openlaw.cn/login", data=data, headers=headers,allow_redirects=False)

其他的部分只要使用session传递好cookie,在提交完数据后就可以访问个人中心了。【图2-3】

图2-3

难点总结

本篇文章其实想写很久了,但是遇到下面两个问题,我觉得有必要总结一下,方便大家避坑。

第一个问题,遇到一个报错ASN1 is not define 这是在JSEncrypt 这个加密库中报的错。

我一直以为是这个加密库的问题,因为在其他环境运行都没有问题,但是使用nodejs运行就会报错,之后通过定义window = global 解决了这个报错,之前我都是定义window = {}

感谢 @汪唔 老哥的帮助。

第二个问题,这个网站的账号很容易就被封了,所以在你运行代码时,最好先手动登陆一下看看账号是否被封禁,我就是拿了一个被封禁的账号测试了很久,一直以为是代码的问题。

以上就是本次文章的全部内容了,如果上面的文章对你有帮助,希望可以点个好看支持一下,谢谢~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 咸鱼学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 抓包分析
  • Python 实现 Openlaw 登陆
  • 难点总结
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档