摘要:最近参加千峰的培训,但是人总是有惰性的,就撸了个自动签到的程序。

1.自动登陆

要想自动登陆有两种思路:一种上上策使用账号,密码进行登陆,另外一种下下策使用cookie进行账号密码登陆。
千锋教育平台设计的还行,不能够同时打开两个直播间,也不能够同时在两个浏览器中登陆,所以cookie是不可能cookie的。再看看账号密码,经过了前端加密。不过还是有所缺漏。

其发送请求时的代码如下:

锋云自动签到1.jpg

可以看到账号密码是经过加密的。所以两种选择,一种强行破解前端加密,第二种直接使用前端加密后的密码。结果前端加密没有把时间戳加进去,不像某乎(会把时间戳加进去),可以直接用加密后的账号。

2.过验证码

自动登陆的难点就是过验证码,这个就比较难受了。而且没啥办法。这个时候借用百度的文字识别,不用白不用。但是直接调用百度的文字识别,很难识别出正确的验证码。仔细观察下验证码的特点,干扰很少,大部分都是短线。

锋云自动签到2.jpg

干扰这么少,写点代码把黑线过滤以下就好了。下面是代码:

# 对图片进行预处理,这样识别的更加准确
def 图片处理():
    img = Image.open("index8.jpg")  # 读取系统的内照片
    print(img.size)  # 打印图片大小
    print(img.getpixel((4, 4)))
    width = img.size[0]  # 长度
    height = img.size[1]  # 宽度
    for i in range(0, width):  # 遍历所有长度的点
        for j in range(0, height):  # 遍历所有宽度的点
            data = (img.getpixel((i, j)))  # 打印该图片的所有点
            if (data[0] <= 40 and data[1] <= 40 and data[2] <= 40):  # RGB中 A的r值小于等于40,并且g值小于等于40,并且b值小于等于40. 
                img.putpixel((i, j), (255, 255, 255))  # 则这些像素点的颜色改成白色
    img = img.convert("RGB")  # 把图片强制转成RGB
    img.save("index9.jpg")  # 保存修改像素点后的图片

经过上述图片的处理后在调用百度的api正确率大大提升。

3.获取cookie

拿到验证码之后就开始获取cookie。其实千峰平台没有cookie。what?千峰直接用的Local Storage。

4.获取local storage

requests库在我知道的范围内,是不能获取local storage的。所以还得从http请求入手。

5.平台架构与验证流程

简单说一下锋云智慧教辅平台的验证逻辑,由于是个课程直播平台,所以平台架构做的非常好。各种跨域,分担服务器压力,很有意思。同样如果涉及到跨域,cookie就很难起作用,这个时候就只能自己在http头部添加自定义字段来验证了(千峰在http头部添加了Authorization字段)。

在浏览器中的token的值

锋云自动签到3.jpg

在http头部的token的值

锋云自动签到4.jpg

大概就是这样处理跨域的。

直播间的数据流服务是由保利威视频云提供的。涉及到的url主要有下面几个


https://api.polyv.net/
https://live.polyv.cn/watch/
https://player.polyv.net/livescript/liveplayer.js

https://pt.1000phone.net/userLogin
https://api-xy.1000phone.com/api/login/login
https://api-xy.1000phone.com/api/common/getCaptcha
https://api-xy.1000phone.com/api/classroom/getIntoLiveParams
https://pt.1000phone.net/livingRoom
https://live.polyv.cn/watch/

平台架构如下:

锋云自动签到5.jpg

平台直播间使用iframe框架调用保利威视频云服务

锋云自动签到6.jpg

参考代码如下:

qianfengautofaxing.rar