• b站开始长期搬运SC2职业选手第一视角的直播,监测,下载,上传皆由程序完成,Python大法好


     在chrome的headless环境下,FFmpeg处理视频流,模拟B站登录,验证登陆成功率还可以,视频分割,线程池控制并发,下载和上传独立,扩展性很强,扩展网站只用写plugin代码继承下载基类即可。
     原项目由星际圈子里的ForgQi大佬开发,ForgQi的服务器过期了,现在我在搬,服务器放在vultr上(超级费流量)。
     斗鱼的流包已失效,我现在主要想办法解决这个问题(欢迎联系我交流这个难点)。

    部署流程:

    1. 必须要为64位的linux,32位的chrome和driver很难下载了,官网停止更新

    2. VPS:Ubuntu 18.04.2 LTS,16的也可。

    3. 安装chrome,

    #下载
    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
    #安装
    sudo dpkg -i google-chrome-stable_current_amd64.deb
    

    这样下载chrome是最新的,我的版本是V73.0.XXX版本,google-chrome --version,dpkg的过程中可能会出现一些错误,参考:
    在这里插入图片描述
    最后再重新dpkg就行了。

    4.安装chromedriver,chromedriver版本必须和chrome版本对应,网上有很多博客给出了对应关系表,但是对我chrome都是老版本了,没有找到对应,最后还好在官网找到了我的版本对应的:
    在这里插入图片描述
    可能是后来官网发现对应chrome的版本确实容易出问题,后面的dirver版本直接用chrome的版本为名建文件夹。

    地址:http://chromedriver.storage.googleapis.com/index.html

    安装后解压,放在/usr/bin 中,记得给这个执行权限,否则程序最后会出错,(我直接给了777。chmod 755 ./chromedriver)

    5.安装pyhon3-dev的版本,只安装python3没用,后面跑起来巨多错误(比如“No Module named Setuptools”),缺少很多module,

    python是应用app,包含了基础的python库和python运行环境。
    python-dev是基于python的一个扩展开发包,包含了更高级的库。在开发一些高级功能的项目时有可能需要用到。

    我们的程序同样需要dev版本的环境。

    在遇到' error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 '的错误后,google了下,在一个issue的帮助下,试了如下
    sudo apt-get install python3 python-dev python3-dev build-essential libssl-dev libffi-dev libxml2-dev libxslt1-dev zlib1g-dev python-pip python-pip3,然后在文件目录里执行pip3 install -r requirements.txt,我当时中间有build失败的信息,但是最后输出的那几个模块安装都成功了,最开始没装dev版本的py,报了很多错。

    6.安装FFmpeg

    sudo add-apt-repository ppa:djcj/hybrid
    sudo apt-get update
    sudo apt-get install ffmpeg

    7.一些其他的
    因为中间出了很多错,给源码加了一些报错的信息,
    在这里插入图片描述
    在这里插入图片描述
    这里要打开注释。

    测试上传功能的时候,因为classic在播,需要修改config的那个房间号链接,上面的信息不能变,下面的链接换一个没在播的选手链接,因为“会根据配置文件里的名字,找文件上传的,可以把连接改成没开播的,但是名字要在”。

    在这里插入图片描述
    还在在这里加一个try
    在这里插入图片描述
    当时就是通过这里找到chromedriver没有权限的问题。

    最后先用python3 运行Bilibili.py ,会打印出中间一些东西,因为一开始上传那里还是失败,log里没有什么信息,通过直接用py3执行后打印出了计算B站滑动登录模块的像素值,但是还是不断打印出更新cookie失败,登录这块是通过

    模拟人操作滑动验证码,先二值化、灰度处理找到缺口处,得知要移动多少像素,但是会发现拖到位置还是不能通过验证,它会提示拼图被怪物吃了。因为滑动验证码还会分析你拖动的行为,所以我们不能直接拖动到正确位置,要像真的人一样,有加速度,先快后慢,上下抖动,有时候还会拖过再拖回来,这样通过验证的成功率就很高了。

    不断打印出更新更新cookie失败感觉b站是不是更新滑动验证的模块,最后准备问下b站的前端朋友,最后控制台突然成功了,原来登录这个是有几率的,,,程序是不断会去尝试直到成功,上传成功后就会删除视频。

    8.另外一些其他记录

    程序不下载,会检测文件,有文件就上传了
    或者这个选手下播了就会上传

    在event.py中可以控制进程数,主进程一共5个线程,一个主线程,一个reload线程,一个线程池,线程池控制并发量,如果有下载,线程池里其中一个线程会开一个进程处理下载,线程池大小决定能有几个下载,我开了5个。每个进程要么上传要么下载,主进程有三个线程,子线程负责IO操作,主线程下发任务更改变量,每一个周期都会检测开播和文件情况,还会检测代码是否更新,更新的话空闲会重启,选手下载完会直接调用上传,或者等它每一个周期的检测来上传,一般情况是先上传再下载,但是首次登陆cookie或者别的地方可能会出问题,所以它上传失败,如果在播就又去下载了。

    一些参考链接:

    https://www.jianshu.com/p/366a5da9ed10
    https://www.cnblogs.com/EasonJim/p/7113367.html
    https://blog.csdn.net/lwgkzl/article/details/77836207
    https://github.com/scrapy/scrapy/issues/2115
    https://blog.csdn.net/u011748542/article/details/88083358

  • 相关阅读:
    VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
    【Demo 0025】注册/反注册窗体类RegisterClassEx/UnregisterClass
    《白手起家Win32SDK应用程序》(完整版+目录)
    关于初始化C++类成员
    TCP和UDP的"保护消息边界" (经典)
    (经典)tcp粘包分析
    解决TCP网络传输“粘包”问题
    无锁队列
    MFC全局函数开局——AfxGetApp解剖
    Tomcat系列之服务器的安装与配置以及各组件详解
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/10635715.html
Copyright © 2020-2023  润新知