入坑NAS的目的本來是因?yàn)橄胱鰝€(gè)倉庫記錄寶寶的成長,考慮了很久到底是Qnap453bmin還是群暉918+,最后為了省事還是入了918+,某魚可以討價(jià)還價(jià)+發(fā)票購入。 不過入坑后在Docker的路上越走越遠(yuǎn)。 發(fā)現(xiàn)社區(qū)里面關(guān)于Docker的一些技術(shù)應(yīng)用并不多,下面主要給大火介紹下群暉如何Docek安裝Python+依賴包,以及后續(xù)實(shí)現(xiàn)網(wǎng)站的自動(dòng)簽到的功能(~以后我也能有2000天簽到勛章了~)? 安裝Docker 此部分比較簡(jiǎn)單,直接在套件中心搜索docker安裝就行 詳細(xì)的可以看此鏈接 安裝Python 安裝好docker后,打開docker--注冊(cè)表,搜索python,直接下載就行 等待下載完畢,查看映像,點(diǎn)擊新增 進(jìn)行Python的配置,點(diǎn)擊高級(jí)設(shè)置--卷--添加文件夾,選擇該容器需要掛載的路徑。 這里稍微解釋下:docker/python_project文件夾是Nas里面真實(shí)的文件夾,/python_project是容器里面的文件夾,這里相當(dāng)于把容器的文件夾映射到Nas里邊,到時(shí)我們的python腳本文件就可以放在docker/python_project里面了,后面直接點(diǎn)下一步分配空間內(nèi)存等直接默認(rèn)就好了(群暉就是這么方便么?) 完成配置以后,點(diǎn)擊容器--詳情,就可以查看該python虛擬機(jī)的運(yùn)行狀態(tài)了 在該容器詳情中點(diǎn)擊“終端機(jī)”,試試看print('helloword!') OK,成功安裝python 安裝各種依賴包 下面就是用pip安裝各種依賴包了。。。 現(xiàn)在安裝python一般都集成了pip了,先查看一下。點(diǎn)擊終端機(jī)--新增--bash--輸入pip -V 可以看到pip的版本了,下面就開始安裝各種依賴包。 主要的幾個(gè)包:Pillow pycryptodome requests rsa 實(shí)現(xiàn)語句:就在bash這個(gè)界面輸入:pip install Pillow -i https://pypi.douban.com/simple 加粗的換成幾個(gè)包的名字就可以了,后面的連接表示替換成國內(nèi)的幾個(gè)源,下面源選擇性使用 清華大學(xué):https://pypi.tuna./simple 阿里云:https://mirrors.aliyun.com/pypi/simple/ 豆瓣:https://pypi.douban.com/simple/ Python實(shí)現(xiàn)自動(dòng)簽到 下面重頭戲來了,網(wǎng)上找了不少自動(dòng)簽到的資源,發(fā)現(xiàn)都失效了,抓了包發(fā)現(xiàn)用了極驗(yàn)驗(yàn)證+rsa密碼加密,so只好自己解決了。 首先詳細(xì)介紹一下自動(dòng)簽到的原理: 首先我們手動(dòng)打開瀏覽器 f12 登錄網(wǎng)站抓一下包看看登錄過程: 密碼是隨便輸?shù)模崛∠掠杏玫臄?shù)據(jù),主要包括三個(gè)部分 1.極驗(yàn)驗(yàn)證 geetest,搜下這個(gè)關(guān)鍵詞,這個(gè)模塊主要是用來防止比較簡(jiǎn)單的request的訪問,區(qū)分機(jī)器與人,這個(gè)就是阻擋了之前大部分自動(dòng)登錄簽到的腳本的罪魁禍?zhǔn)琢?/p> 極驗(yàn)驗(yàn)證是一種在計(jì)算機(jī)領(lǐng)域用于區(qū)分自然人和機(jī)器人的,通過簡(jiǎn)單集成的方式,為開發(fā)者提供安全、便捷的云端驗(yàn)證服務(wù)。 與以往傳統(tǒng)驗(yàn)證碼不同的是,極驗(yàn)通過分析用戶完成拼圖過程中的行為特征,通過數(shù)據(jù)分析來判斷是人還是機(jī)器。 直接站在巨人肩膀上吧,github能有拿來就能用的源碼: 搜:Kevin-Cherish/geetest 2.獲取密鑰 看第二個(gè)有用的數(shù)據(jù)的圖,pub_key,想到了啥?rsa加密啊?。。∮脕砑用苌叮驴?/p> 先把pub_key拿下來備用下: pub_key_url = 'https://zhiyou.smzdm.com/user/login/pre' pub_key = ( session.get(pub_key_url, headers=headers).json().get('data').get('pub_key') ) 3.數(shù)據(jù)加密發(fā)送給服務(wù)器 觀察post給服務(wù)端的數(shù)據(jù),用戶名被加密了,密碼也被加密了。 用戶名應(yīng)該是比較簡(jiǎn)單的加密方式,稍微試了下base64方式加密,搞定。 base64.b64encode(username.encode()).decode() 密碼應(yīng)該就是用rsa加密了,方法就是向服務(wù)器申請(qǐng)一次公鑰,然后用公鑰對(duì)密碼進(jìn)行加密,然后發(fā)送給服務(wù)端 key = base64.b64decode(pub_key.encode()).decode() rsakey = RSA.importKey(key) cipher = Cipher_pkcs1_v1_5.new(rsakey) cipher_text = base64.b64encode(cipher.encrypt(pwd.encode(encoding='utf-8'))) value = cipher_text.decode('utf8') 一頓操作試了下: geetest返回結(jié)果:({'message': 'success', 'success': 1, 'score': '2', 'validate': '***********'})登陸結(jié)果:{'redirect_to': '', 'error_code': 0, 'is_use_captcha': True, 'data': [], 'error_msg': ''} 果然登錄成功,后面就是用request進(jìn)行簽到拉 checkin_url = 'https://zhiyou.smzdm.com/user/checkin/jsonp_checkin?callback= &_={}'.format(time.time() * 1000) response = session.get(checkin_url, headers=headers) 群暉計(jì)劃任務(wù)實(shí)現(xiàn) 實(shí)現(xiàn)簽到以后,可以把數(shù)據(jù)存在數(shù)據(jù)庫里面,然后讓設(shè)置一個(gè)群暉的計(jì)劃任務(wù),每天等結(jié)果就好拉 控制面板---計(jì)劃任務(wù) 設(shè)置每日?qǐng)?zhí)行,以及計(jì)劃任務(wù)的參數(shù),然后等結(jié)果就好啦 我把每天簽到結(jié)果存在sqlite里面了,然后等待我的簽到勛章吧,哈哈哈哈 |
|