实验环境
Windows 10 x64
编辑器
Sublime Text3
用到的第三方模块
selenium, PIL, time, random, os
逻辑过程分析:
一、网页模拟登陆。
这一步有两种方法:
A、使用账号密码,然后极客验证码。抓包发现,网站使用极验验证码,并且是专门为斗鱼设计的,网上查了下资料,能否破解,主要思路是下载验证背景图(合成)和缺口图片(合成),再模拟鼠标滑动,测试下可以使用,但是斗鱼这一套,抓包并没有一张张的碎片,类似于是一串串数字,当用户进行验证时,会事先根据图片缺口来生成一串数字,然后用户进行验证,验证过程会将数字传给极验的服务器进行验证,加大了难度,当然如果花一些时间肯定可以破解的。
并且当第一次验证登陆失败,后面几次还可能出现其他的文字验证码,不划算,费心费力。
所以二维码登陆的思路是请求到一串code,再生成,再用app进行扫码(其实这里可以抓一下手机app扫码时怎么向服务器传的这串代码,可以模拟发送,就不用扫码了),然后服务器会对传入的code进行响应,给网页端授权,就可以登陆了,理论上是这个思路。
问题来了,我模拟请求时,请求头都是按照抓包来的,但依旧得不到那一串code,显示系统错误。
所以就只好用最简单粗暴的方法了,selenium来自动请求模拟登陆。
首先把二维码那一块区域自动截图下来,然后进行扫码登陆,美滋滋(注意二维码60s过期)
2、验证登陆成功
登陆前与登陆后网页的最大区别就是有了用户名,可以这一点来进行验证
3、输入房间号,进入房间
这一步直接用get请求即可,网页后面一串数字即为房间号
4、发送弹幕
首先要找到需要输入的文本框,然后点击发送即可,并且需要不断重复这个过程,所以要设置语言库以及发送间隔时间。
二、代码逻辑:
1、模拟登陆
2、验证登陆
找到用户的class即可
3、发送弹幕
4、实验效果
总结:缺点还是很多的,比如验证码过期问题需要重新获取二维码扫码,定位文本狂时,有一定几率出现错误。但通过这次的练习,知道了一些验证码的处理方式,更加熟悉了selenium这一模块。
后续改进:可以做成客户端方式,自定义弹幕,自定义延迟,优化定位等。有一句话说得好,能够用浏览器浏览到的任何东西,都可以用Python爬虫给爬下来。
欢迎留言交流你的看法!
往期实战
领取专属 10元无门槛券
私享最新 技术干货