用Python模拟登陆微博

前言

最近在研究模拟登陆,看了很多教程,发现基本上都是只教怎么处理后就能登陆成功,没有讲解怎样得到处理的方法。经过的一天的研究,把微博模拟登陆基本上弄清楚了,下面就把过程详细说明。


工具和环境

1.语言:Python3 2.IDE: Pycharm 3.浏览器:Chrome 4.使用的库:re, rsa, base64, requests, PIL, urllib


模拟登陆过程

弄清楚所需的数据

首先我们在Chrome浏览器中打开微博登陆界面,然后Ctrl+shift+i开启开发者工具,在开发者工具的Network选项里找到Preserve log并勾选,然后登录你的微博。之后可以看到以下界面:

我们可以看到Network下面这么多文件,到底哪一个是我们需要的呢?由于登陆的时候需要向服务器输送数据所以我们限定搜索范围,去找MethodPOST的这时你会找到login.php?client=ssologin.js(v1.4.18)点击找到它的form data看到下列数据:

其中大部分数据都是固定数据,只有suservertimenoncersakvsp是通过JS加载得到。su就是账户经过加密而得,sp是密码经过加密而得。我们只需要找到这几个数据就可以模拟登录到微博,那么怎么找到这些数据呢?接着往下看…

获取servertime,nonce等数据

在登录页面里打开开发者工具,清除Network里的数据。这个时候输入你的账号并按回车键。你会神奇地发现出现了一条数据,点击选择Preview看看里面有什么?

是不是有些熟悉的字眼。你要做的就是把这里面的数据用代码爬取下来,但是通过对它Headers里面的Query String Parametes进行观察,我们发现爬取这个页面还需要知道su的值,所以先别急,继续登陆。我们可以再它下面发现一条名叫ssologin.js的数据,右键选择open link in the new tab你会发现新打开的窗口下式很多的代码,稍加整理就可以找到对账号和密码加密处理的部分。

账号与密码的加密

账号的加密

这是我找到的账号加密代码,su是账号首先经过html字符转义再转成base64编码。知道了这点我们就可以通过代码实现对账号的加密获取su值。

密码的加密

上图为密码加密部分。里面的数据除了rsaPubkey之外我们都有了,我们可以在找到nonce值的地方找到一个pubkey,这个值就是rsaPubkey。 关于密码的加密代码中显示有两种方式,判断的标准是pwencode的值。我们登录时一般为rsa2所以选用第一种加密方式。至于第二种加密方式是否适用大家可以去尝试尝试。 其中10001rsaPubkey为16进制需要通过int(x, 16)转换为十进制。接着经过servertime + '\t' + nonce + '\n' + passwd拼接字符串再进行Rsa加密, 最后转成16进制即得到sp

模拟登录

经过上面的努力我们已经把所需要的数据统统获取,下面只要上传数据到服务器就可以登录了。 注意登陆全程需在requests的session下进行 首先,将登录时所需要的值(就是第二张图里的值)posthttp://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18),你会得到一个页面提取页面里的重定向地址(大概这个样子http://passport.weibo.com/wbsso/login?后面一堆参数省略),get这个地址得到这些内容就代表你登录成功啦。

<html><head><script language='javascript'>parent.sinaSSOController.feedBackUrlCallBack({"result":true,"userinfo":{"uniqueid":"1561651905","userid":null,"displayname":null,"userdomain":"?wvr=5&lf=reg"}});</script></head><body></body></html>

提取你自己的uniqueid值放入下列网址中get得到你的微博主页信息。

uniqueid = **********
weibo_url = 'http://weibo.com/%s/profile?topnav=1&wvr=6&is_all=1' % uniqueid

后记

本教程仅用于学习交流 方法已经写出来了,大家多去自己尝试一下。如果实在写不出来可以到我的GitHub参考我写好的代码。 代码地址:https://github.com/Wooden-Robot/pop

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏蘑菇先生的技术笔记

浅谈C#网络编程(一)

在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践。 Socket是一种网络编程接口,它是对传输层TCP、UDP通信协议的一层封...

15430
来自专栏小石不识月

DNS 记录简介

域名系统(DNS,Domain Name System)是因特网的地址簿。DNS 通过映射不容易忘记的域名(例如example.com)到诸如192.0.2.8...

94540
来自专栏java学习

面试题13(一个具有生命的线程有哪些状态)

考点:考察求职者对线程的理解 出现频率:★★★ 【面试题解析】线程的状态表示线程在某时间段内进行的活动和将要进行的任务程有创建、就绪、运行、阻塞、死亡5种状态。...

34950
来自专栏开发与安全

进程控制块PCB结构 task_struct 描述

注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了...

33580
来自专栏七夜安全博客

小知识点--crontab

这两周学了很多东西,还把golang语言基本掌握了,收获还是挺多的。在做安全的过程中,有很多需要定时执行的任务,比如抓取主机数量,端口数据等,这都逃不开linu...

10320
来自专栏北京马哥教育

100 道 Linux 笔试题,能拿 80 分就算大神!

22440
来自专栏行者悟空

CentOS Linux安装nginx及负载均衡的配置

16430
来自专栏ytkah

dedecms如何快速删除跳转的文章(记得清空内容回收站)

  网站内容更新多了,有些页面修改了,这时其他相关页面也要做相应的调整,不然可能会出现404错误,那么dedecms如何快速删除跳转的文章呢?下面就随ytkah...

29360
来自专栏c#开发者

消息队列(Message Queue)简介及其使用

消息队列(Message Queue)简介及其使用 利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方...

54180
来自专栏我的博客

nginx配置文件详解

nginx配置参考文档(附带中文说明),能解决大部分配置问题了! #定义Nginx运行的用户和用户组 user nginx nginx; #指定工作衍生进程数...

56260

扫码关注云+社区

领取腾讯云代金券