b站開始長期搬運SC2職業選手第一視角的直播,監測,下載,上傳皆由程序完成,Python大法好

 在chrome的headless環境下,FFmpeg處理視頻流,模擬B站登陸,驗證登錄成功率還能夠,視頻分割,線程池控制併發,下載和上傳獨立,擴展性很強,擴展網站只用寫plugin代碼繼承下載基類便可。
 原項目由星際圈子裏的ForgQi大佬開發,ForgQi的服務器過時了,如今我在搬,服務器放在vultr上(超級費流量)。
 鬥魚的流包已失效,我如今主要想辦法解決這個問題(歡迎聯繫我交流這個難點)。html

部署流程:前端

  1. 必需要爲64位的linux,32位的chrome和driver很難下載了,官網中止更新python

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

  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就好了。git

4.安裝chromedriver,chromedriver版本必須和chrome版本對應,網上有不少博客給出了對應關係表,可是對我chrome都是老版本了,沒有找到對應,最後還好在官網找到了個人版本對應的:
在這裏插入圖片描述
多是後來官網發現對應chrome的版本確實容易出問題,後面的dirver版本直接用chrome的版本爲名建文件夾。github

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

安裝後解壓,放在/usr/bin 中,記得給這個執行權限,不然程序最後會出錯,(我直接給了777。chmod 755 ./chromedriver)api

5.安裝pyhon3-dev的版本,只安裝python3沒用,後面跑起來巨多錯誤(好比「No Module named Setuptools」),缺乏不少module,服務器

python是應用app,包含了基礎的python庫和python運行環境。
python-dev是基於python的一個擴展開發包,包含了更高級的庫。在開發一些高級功能的項目時有可能須要用到。cookie

咱們的程序一樣須要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
http://www.javashuo.com/article/p-ybpozpmr-ck.html
https://blog.csdn.net/lwgkzl/article/details/77836207
https://github.com/scrapy/scrapy/issues/2115
https://blog.csdn.net/u011748542/article/details/88083358

相關文章
相關標籤/搜索