zoukankan      html  css  js  c++  java
  • python3+selenium webdriver实战应用篇-打造爱奇艺直播间机器人

    最近在学习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

  • 相关阅读:
    linux三剑客之grep
    MySQL练习(1)
    appium获取toast方法
    Could not parse UiSelector argument: 'XXX' is not a string 错误解决办法
    基于python的几种排序算法的实现
    生成allure测试报告之后,服务器端口无法访问查看生成的report,可能是这样引起的。
    通过源码看原理之 selenium
    如何查看浏览器记住的密码
    传智播客JavaWeb day09-mysql入门、数据库操作、数据库表操作、数据行操作
    SQLServer数据库表架构和数据保存成sql文件
  • 原文地址:https://www.cnblogs.com/lyj-blogs/p/13912310.html
Copyright © 2011-2022 走看看