使用selenium實(shí)現(xiàn)FC2登錄的自動化
部分FC2的免費(fèi)直播要求用戶登錄后才能觀看,因而FC2直播錄制的自動化需要實(shí)現(xiàn)FC2登錄的自動化,獲取間隔設(shè)置為1天即可。FC2的登錄界面存在hCaptcha驗(yàn)證,但部分界面不需要交互,可以直接輸入密碼進(jìn)行登錄,這里提供簡單的Python selenium代碼提供參考。
selenium獲取登錄cookies
為了方便,我選用的是seleniumwire.webdriver而非原版selenium的webdriver。seleniumwire相當(dāng)于自帶瀏覽器抓包,方便從response headers獲取登錄cookies。
這里driver.scopes可以指定seleniumwire.webdriver抓包的范圍,提高腳本效率。
接下來是進(jìn)行登錄請求,注意部分的登錄URL(如中文語言的)會要求手動驗(yàn)證,應(yīng)當(dāng)避免使用那些URL。
下一步就是獲取cookies了,但在這之前FC2可能會要求輸入郵箱驗(yàn)證碼。即便沒有在設(shè)置中開啟2FA,也有一定的幾率觸發(fā),因此需要檢測跳轉(zhuǎn)后的URL進(jìn)行處理。
郵箱驗(yàn)證碼的獲取可以通過Python的imaplib實(shí)現(xiàn),相應(yīng)實(shí)現(xiàn)可參照結(jié)尾部分。
最后一步就是從請求中獲取cookies。
最后不要忘了用driver.quit()退出webdriver進(jìn)程。
獲取郵件驗(yàn)證碼
獲取驗(yàn)證碼用的郵箱只要支持IMAP即可。如果從隔離安全的角度考慮,也可以為注冊郵箱添加一個轉(zhuǎn)發(fā)規(guī)則,將FC2驗(yàn)證碼轉(zhuǎn)發(fā)至單獨(dú)搭建的郵箱服務(wù)器(需要域名)。
這里以Docker-Mailserver為例,假設(shè)用于搭建的郵箱服務(wù)器的主機(jī)的域名為vps.example.org,而郵箱的域名是example.org。主機(jī)已用certbot獲取了vps.example.org的證書,并保存到了默認(rèn)的/etc/letsencrypt下。
首先根據(jù)教程下載docker compose所需的compose.yaml和mailserver.env,并創(chuàng)建用于存儲的文件夾。接下來需要更改compose.yaml的少量配置:修改hostname為自己的域名,并添加letsencrypt的相關(guān)參數(shù)。
接下來需要為example.org添加MX記錄,內(nèi)容為vps.example.org,權(quán)重任意。MX記錄指明發(fā)往xxx@example.org的郵件由vps.example.org的主機(jī)處理。rDNS不影響郵件接收,可跳過。
用docker compose up啟動容器后,即可通過命令行工具創(chuàng)建/更新賬號了
完成以后就可以用imaplib連接郵件服務(wù)器了。郵件可能是經(jīng)過編碼的而非純文本,所以最好使用email庫進(jìn)行解析。可以根據(jù)實(shí)際情況再添加標(biāo)題等過濾條件。
這里將發(fā)送登錄請求時記錄的時間戳作為參數(shù),避免誤用舊的驗(yàn)證碼。