最近在学习selenium webdriver,为了练手,就决定写一个爱奇艺直播间机器人程序。
该程序功能如下:(所有功能都是基于firefox webdriver)
1.获取爱奇艺任意指定直播间弹幕消息并实时打印出来(不需要扫码登录)。
弹幕消息记录到文件:
2.向爱奇艺所有当前在线游戏直播间发送指定弹幕消息,可循环发送(需要扫码登录)。
3.爱奇艺直播间弹幕消息自动回复,应用于指定直播间(需要扫码登陆)
上述三个功能都有对应配置文件,截图如下
在整个实现过程中遇到过很多问题:
(1)比如最开始我是打算使用账号密码自动登录爱奇艺网站,但是我发现爱奇艺账号登录框里面的input元素我始终定位不了,这个问题真是让我焦头烂额,我尝试了网上几乎所有方法都定位不了,后来我放弃了,决定使用手机扫码登录的方式。如果有谁看了我这篇博客,知道解决办法的话,可以在下面留言,我会把工程源码下载链接放在最后面。
(2)还有一个问题就是关于爱奇艺直播间弹幕实时获取,我最开始以为弹幕文件是以json之类文件格式传输的,但是我并没有发现之类的弹幕文件,也许弹幕文件被加密传输了?我记得爱奇艺发送弹幕消息都是加密传输到服务器的,就因为这个我放弃了最开始打算通过构造数据包发送弹幕的想法,因为我实在是不清楚他到底用的是什么签名算法,爱奇艺发送的弹幕消息是明文,但是post表单里面有一个参数sn(应该是签名),这个签名不正确是无法成功发送信息的,签名算法加密内容有点像是md5,但是谁知道呢?关键是post表单里面参数很多,这个签名sn极有可能与表单里面多个参数有关,鬼知道他是怎么弄的。因此我后来才决定用webdriver实现弹幕发送,这样就避开了这个签名算法障碍(毕竟是"物理方法")。好像偏题了,之前说到弹幕获取方法,我是从网页源码里面提取的,哈哈哈,由于弹幕是实时动态显示的,所以使用这种方法很简单粗暴。
(3)还有一个问题,就是关于动态页面无法加载完全的问题,爱奇艺游戏直播页面很长,需要滚动条下拉才能加载完全,我搞这个滚动条下拉实现动态页面源码完全加载也饶了不少弯路,但是最终还是找到了一个解决方法,那就是将键盘PAGE_DOWN事件传递给网页body元素,即element_body.send_keys(Keys.PAGE_DOWN),具体代码见工程源码。
(4)还有一个几乎围绕整个工程的大问题,那就是页面是不是会弹出一些弹窗,比如爱奇艺里面的“人气主播推荐弹窗”以及一些广告弹窗,解决这个问题很必要,因为一旦弹窗显示出来,所有点击操作都将无法完成,报错信息就是说某个弹窗元素遮挡住了你想要点击的元素,我的解决办法就是每当打开一个页面都要使用try...except语句尝试关闭我在爱奇艺网站遇到过的弹窗,这样可以保证程序不会运行出错崩溃,虽然也会有一些报错信息,但是至少程序能够继续正常运行。
基本上大问题就是上面提到过的,还有一些小问题也记不起了,有兴趣的朋友可以看一下工程源码,源码里面其实很多地方可以进行优化的,增强程序稳健性,比如上面提到的广告弹窗的问题,我其实并没有做到很完善,因为任何时候都可能弹出弹窗,因此最好能有个定时器线程,隔一段时间就在当前窗口检测弹窗。
有任何问题或者意见都可以在留言区讨论!
###########下载链接#####################
程序打包成的exe文件链接:https://pan.baidu.com/s/1SKSr9YHp1LMG1fvG4owftA
提取码:lyon
python工程源码链接:链接:https://pan.baidu.com/s/1Vpw1z6GKN7tmT7VD3e6CLQ
提取码:lyon
###########下载链接#####################
注:开发环境是pycharm2018+python3.6.3+selenium4.0.0a6.post2+firefox(81.0.2 64位)+firefox driver(与firefox版本适配就行)+windows10 x64位系统
关于firefox driver的配置可以参照网上教程。
欢迎加qq群:882177851