我又找到了一個(gè)破解谷歌驗(yàn)證碼的新方案!
這是「進(jìn)擊的Coder」的第?452?篇技術(shù)分享作者:崔慶才
之前我曾經(jīng)寫過一篇文章說 Google ReCAPTCHA 驗(yàn)證碼的繞過方法,當(dāng)時(shí)介紹的是用 2Captcha,然而有些朋友跟我反映說 2Captcha 價(jià)格比較貴,而且用起來比較復(fù)雜。
今天再給大家介紹另一個(gè)用于破解 Google ReCAPTCHA 的方法。
ReCAPTCHA 介紹
可能大家還沒聽說過什么是 ReCAPTCHA,可能由于某些原因,這個(gè)驗(yàn)證碼在國(guó)內(nèi)出現(xiàn)不多,不過想必大家應(yīng)該多多少少見過或用過。它長(zhǎng)這個(gè)樣子:

這時(shí)候,只要我們點(diǎn)擊最前面的復(fù)選框,驗(yàn)證碼算法會(huì)首先利用其「風(fēng)險(xiǎn)分析引擎」做一次安全檢測(cè),如果直接檢驗(yàn)通過的話,我們會(huì)直接得到如下的結(jié)果:

如果算法檢測(cè)到當(dāng)前系統(tǒng)存在風(fēng)險(xiǎn),比如可能是陌生的網(wǎng)絡(luò)環(huán)境,可能是模擬程序,會(huì)需要做二次校驗(yàn)。它會(huì)進(jìn)一步彈出類似如下的內(nèi)容:

比如上面這張圖,驗(yàn)證碼頁(yè)面會(huì)出現(xiàn)九張圖片,同時(shí)最上方出現(xiàn)文字「樹木」,我們需要點(diǎn)選下方九張圖中出現(xiàn)「樹木」的圖片,點(diǎn)選完成之后,可能還會(huì)出現(xiàn)幾張新的圖片,我們需要再次完成點(diǎn)選,最后點(diǎn)擊「驗(yàn)證」按鈕即可完成驗(yàn)證。 或者我們可以點(diǎn)擊下方的「耳機(jī)」圖標(biāo),這時(shí)候會(huì)切換到聽寫模式,驗(yàn)證碼會(huì)變成這樣:

這時(shí)候我們?nèi)绻芴顚憣?duì)驗(yàn)證碼讀的音頻內(nèi)容,同樣可以通過驗(yàn)證。 這兩種方式都可以通過驗(yàn)證,驗(yàn)證完成之后,我們才能完成表單的提交,比如完成登錄、注冊(cè)等操作。 這種驗(yàn)證碼叫什么名字? 這個(gè)驗(yàn)證碼就是 Google 的 ReCAPTCHA V2 驗(yàn)證碼,它就屬于行為驗(yàn)證碼的一種,這些行為包括點(diǎn)選復(fù)選框、選擇對(duì)應(yīng)圖片、語音聽寫等內(nèi)容,只有將這些行為校驗(yàn)通過,此驗(yàn)證碼才能通過驗(yàn)證。相比于一般的圖形驗(yàn)證碼來說,此種驗(yàn)證碼交互體驗(yàn)更好、安全性會(huì)更高、破解難度更大。
其實(shí)上文所介紹的驗(yàn)證碼僅僅是 ReCAPTCHA 驗(yàn)證碼的一種形式,是 V2 的顯式版本,另外其 V2 版本還有隱式版本,隱式版本在校驗(yàn)的時(shí)候不會(huì)再顯式地出現(xiàn)驗(yàn)證頁(yè)面,它是通過 JavaScript 將驗(yàn)證碼和提交按鈕進(jìn)行綁定,在提交表單的時(shí)候會(huì)自動(dòng)完成校驗(yàn)。除了 V2 版本,Google 又推出了最新的 V3 版本,reCAPTCHA V3 驗(yàn)證碼會(huì)為根據(jù)用戶的行為來計(jì)算一個(gè)分?jǐn)?shù),這個(gè)分?jǐn)?shù)代表了用戶可能為機(jī)器人的概率,最后通過概率來判斷校驗(yàn)是否可以通過。其安全性更高、體驗(yàn)更好。
體驗(yàn)
那哪里可以體驗(yàn)到 ReCAPTCHA 呢?我們可以打開這個(gè)網(wǎng)站:https://www.google.com/recaptcha/api2/demo,建議科學(xué)上網(wǎng),同時(shí)用匿名窗口打開,這樣的話測(cè)試不會(huì)受到歷史 Cookies 的干擾,如圖所示:

這時(shí)候,我們可以看到下方有個(gè) ReCAPTCHA 的窗口,然后點(diǎn)擊之后就出現(xiàn)了一個(gè)驗(yàn)證圖塊。
當(dāng)然靠人工是能解的,但對(duì)于爬蟲來說肯定不行啊,那怎么自動(dòng)化解呢?
接下來我們就來介紹一個(gè)簡(jiǎn)單好用的平臺(tái)。
解決方案
本次我們介紹的一個(gè) ReCAPTCHA 破解服務(wù)叫做 YesCaptcha,主頁(yè)是 http://yescaptcha.365world.com.cn/,它現(xiàn)在同時(shí)可以支持 V2 和 V3版本的破解。
我們這次就用它來嘗試解一下剛才的 ReCAPTCHA 上的 V2 類型驗(yàn)證碼:https://www.google.com/recaptcha/api2/demo。
簡(jiǎn)單注冊(cè)之后,可以找到首頁(yè)有一個(gè) Token。我們可以復(fù)制下來以備后面使用,如圖所示:

它有兩個(gè)關(guān)鍵的 API,一個(gè)是創(chuàng)建驗(yàn)證碼服務(wù)任務(wù),另一個(gè)是查詢?nèi)蝿?wù)狀態(tài),API 如下:
創(chuàng)建任務(wù):http://api.yescaptcha.365world.com.cn/v3/recaptcha/create
查詢狀態(tài):http://api.yescaptcha.365world.com.cn/v3/recaptcha/status
API 文檔可以參考這里:http://docs.yescaptcha.365world.com.cn/
經(jīng)過 API 文檔可以看到使用的時(shí)候可以配置如下參數(shù):
| 參數(shù)名 | 是否必須 | 說明 |
|---|---|---|
| token | 是 | 請(qǐng)?jiān)趥€(gè)人中心獲取 (Token) |
| siteKey | 是 | ReCaptcha SiteKey (固定參數(shù)) |
| siteReferer | 是 | ReCaptcha Referer (一般也為固定參數(shù)) |
| captchaType | 否 | ReCaptchaV2(默認(rèn)) / ReCaptchaV3 |
| siteAction | 否 | ReCaptchaV3 選填 Action動(dòng)作 默認(rèn)verify |
| minScore | 否 | ReCaptchaV3 選填 最小分?jǐn)?shù)(0.1-0.9) |
這里就有三個(gè)關(guān)鍵信息了:
token:就是剛才我們?cè)?YesCaptcha 上復(fù)制下來的參數(shù)
siteKey:這個(gè)是 ReCAPACHA 的標(biāo)志字符串,稍后我們會(huì)演示怎么找。
siteReferer,一般是 ReCAPTCHA 的來源網(wǎng)站的 Referer,比如對(duì)于當(dāng)前的案例,該值就是 https://www.google.com/recaptcha/api2/demo
那 siteKey 怎么找呢?其實(shí)很簡(jiǎn)單,我們看下當(dāng)前 ReCAPTCHA 的 HTML 源碼,從源碼里面找一下就好了:

這里可以看到每個(gè) ReCAPTCHA 都對(duì)應(yīng)一個(gè) div,div 有個(gè)屬性叫做 date-sitekey,看這里的值就是:
6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-
好,萬事俱備了,只差代碼了!
開工
我們就用最簡(jiǎn)單 requests 來實(shí)現(xiàn)下吧,首先把常量定義一下:
TOKEN?=?'50a07xxxxxxxxxxxxxxxxxxxxxxxxxf78'??#?請(qǐng)?zhí)鎿Q成自己的TOKEN
REFERER?=?'https://www.google.com/recaptcha/api2/demo'
BASE_URL?=?'http://api.yescaptcha.365world.com.cn'
SITE_KEY?=?'6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-'?#?請(qǐng)?zhí)鎿Q成自己的SITE_KEY
這里我們定義了這么幾個(gè)常量:
TOKEN:就是網(wǎng)站上復(fù)制來的 token
REFERER:就是 Demo 網(wǎng)站的鏈接
API_BASE_URL:就是 YesCaptcha 的 API 網(wǎng)址
SITE_KEY:就是剛才我們找到的 data-sitekey
然后我們定義一個(gè)創(chuàng)建任務(wù)的方法:
def?create_task():
????url?=?f"{BASE_URL}/v3/recaptcha/create?token={TOKEN}&siteKey={SITE_KEY}&siteReferer={REFERER}"
????try:
????????response?=?requests.get(url)
????????if?response.status_code?==?200:
????????????data?=?response.json()
????????????print('response?data:',?data)
????????????return?data.get('data',?{}).get('taskId')
????except?requests.RequestException?as?e:
????????print('create?task?failed',?e)
這里就是調(diào) API 來創(chuàng)建任務(wù),沒什么好說的。
如果創(chuàng)建成功之后會(huì)得到一個(gè) task_id,接下來我們就需要用這個(gè) task_id 來輪詢查看任務(wù)的狀態(tài),定義如下的這么一個(gè)方法:
def?polling_task(task_id):
????url?=?f"{BASE_URL}/v3/recaptcha/status?token={TOKEN}&taskId={task_id}"
????count?=?0
????while?count?<?120:
????????try:
????????????response?=?requests.get(url)
????????????if?response.status_code?==?200:
????????????????data?=?response.json()
????????????????print('polling?result',?data)
????????????????status?=?data.get('data',?{}).get('status')
????????????????print('status?of?task',?status)
????????????????if?status?==?'Success':
????????????????????return?data.get('data',?{}).get('response')
????????except?requests.RequestException?as?e:
????????????print('polling?task?failed',?e)
????????finally:
????????????count?+=?1
????????????time.sleep(1)
這里就是設(shè)置了最長(zhǎng)輪詢次數(shù) 120 次,請(qǐng)求的 API 就是查詢?nèi)蝿?wù)狀態(tài)的 API,會(huì)得到一個(gè)任務(wù)狀態(tài)的結(jié)果,如果結(jié)果是 Success,那就證明任務(wù)成功了,解析其中的 response 結(jié)果就是驗(yàn)證碼破解之后得到的 token。
兩個(gè)方法調(diào)用一下:
if?__name__?==?'__main__':
????task_id?=?create_task()
????print('create?task?successfully',?task_id)
????response?=?polling_task(task_id)
????print('get?response:',?response[0:40]+'...')
運(yùn)行結(jié)果類似如下:
response?data:?{'status':?0,?'msg':?'ok',?'data':?{'taskId':?'1479436991'}}
create?task?successfully?1479436991
polling?result?{'status':?0,?'msg':?'ok',?'data':?{'status':?'Working'}}
status?of?task?Working
polling?result?{'status':?0,?'msg':?'ok',?'data':?{'status':?'Working'}}
status?of?task?Working
polling?result?{'status':?0,?'msg':?'ok',?'data':?{'status':?'Working'}}
status?of?task?Working
polling?result?{'status':?0,?'msg':?'ok',?'data':?{'status':?'Success',?'response':?'03AGdBq27-ABqvNmgq96iuprN8Mvzfq6_8noknIed5foLb15oWvWVksq9KesDkDd7dgMMr-UmqULZduXTWr87scJXl3djhl2btPO721eFAYsVzSk7ftr4uHBdJWonnEemr9dNaFB9qx5pnxr3P24AC7cCfKlOH_XARaN4pvbPNxx_UY5G5fzKUPFDOV14nNkCWl61jwwC0fuwetH1q99r4hBQxyI6XICD3PiHyHJMZ_-wolcO1R9C90iGQyjzrSMiNqErezO24ODCiKRyX2cVaMwM9plbxDSuyKUVaDHqccz8UrTNNdJ4m2WxKrD9wZDWaSK10Ti1LgsqOWKjKwqBbuyRS_BkSjG6OJdHqJN4bpk_jAcPMO13wXrnHBaXdK4FNDR9-dUvupHEnr7QZEuNoRxwl8FnO2Fgwzp2sJbGeQkMbSVYWdAalE6fzJ8NwsFJxCdDyeyO817buBtvTJ4C06C1uZ92fpPTeYGJwbbicOuqbGfHNTyiSJeRNmt-5RKz0OUiPJOPnmVKGlWBOqwbwCW1WZt-E-hH4FEg4En5TITmmPb_feS9dWKUxudn1U0hHk2vV9PerjZLtI7F67KtgmcqRrARPbwnc6KyAi3Hy1hthP92lv4MRIcO2jx0Llvsja-G2nhjZB0ZoJwkb9106pmqldiwlXxky4Dcg7VPStiCYJvhQpRYol7Iq1_ltU2tyhMqsu_Xa8Z6Mr5ykRCLnmlLb8DV8isndrdwp84wo_vPARGRj7Up9ov-ycb5lDKTf1XRaHiMCa8d2WLy0Pjco9UnsRAPw0FW3MsBJah6ryHUUDho7ffhUUgV1k86ryJym6xbWch1sVC4D5owzrCFn6L-rSLc5SS1pza2zU5LK4kAZCmbXNRffiFrhUY8nP4T1xaR2KMhIaN8HhJQpR8sQh1Azc-QkDy4rwbYmxUrysYGMrAOnmDx9z7tWQXbJE4IgCVMx5wihSiE-T8nbF5y1aJ0Ru9zqg1nZ3GSqsucSnvJA8HV5t9v0QSG5cBC1x5HIceA-2uEGSjwcmYOMw8D_65Dl-d6yVk1YN2FZCgMWY5ewzB1RAFN1BMqKoITQJ64jq3lKATpkc5i7aTA2bRGQyXrbDyMRIrVXKnYMHegfMbDn0l4O81a8vxmevLspKkacVPiqLsAe-73jAxMvsOqaG7cKxMQO9CY3qbtD55YgN0W4p2jyNSVz3aEpffHRqYyWMsRI5LddLgaZQDoHHgGUhV580PSIdZJ5eKd0gOjxIYxKlr0IgbMWRmsG_TgDNImy1c5oey8ojl-zWpOQW7bnfq5Z4tZ10_sCTfoOZVLqRuOsqB1OOO9pLRQojLBP0HUiGhRAr_As9EIDu6F9NIQfdAmCaVvavJbi1CZITFjcywP-tBrHsxpwkCXlwl996MK_XyEDuyWnJVGiVSthUMY306tIh1Xxj93W3KQJCzsfJQcjN-3lGLLeDFddypHyG4yrpRqRHHBNyiNJHgxSk5SaShEhXvByjkepvhrKX3kJssCU04biqqmkrQ49GqBV9OsWIy0nN3OJTx8v05MP8aU8YYkYBF01UbSff4mTfLAhin6iWk84Y074mRbe2MbgFAdU58KnCrwYVxcAR8voZsFxbxNwZXdVeexNx5HlIlSgaAHLWm2kFWmGPPW-ZA7R8Wst-mc7oIKft5iJl8Ea0YFz8oXyVgQk1rd9nDR3xGe5mWL1co0MiW1yvHg'}}
如果其返回的是如上格式的數(shù)據(jù),就代表 ReCAPTCHA 驗(yàn)證碼已經(jīng)識(shí)別成功了,其返回的 response 字段的內(nèi)容就是識(shí)別的 token,我們直接拿著這個(gè) token 放到表單里面提交就成功了。
那這個(gè) token 怎么來用呢? 其實(shí)如果我們用瀏覽器驗(yàn)證驗(yàn)證成功之后,點(diǎn)擊表單提交的時(shí)候,在其表單里面會(huì)把一個(gè) name 叫做 g-recaptcha-response 的 textarea 賦值,如果驗(yàn)證成功,它的 value 值就是驗(yàn)證之后得到的 token,這個(gè)會(huì)作為表單提交的一部分發(fā)送到服務(wù)器進(jìn)行驗(yàn)證。如果這個(gè)字段校驗(yàn)成功了,那就沒問題了。

所以,如上的過程相當(dāng)于為我們模擬了點(diǎn)選驗(yàn)證碼的過程,其最終得到的這個(gè) token 其實(shí)就是我們應(yīng)該賦值給 name 為 g-recaptcha-response 的內(nèi)容。 那么怎么賦值呢? 很簡(jiǎn)單,用 JavaScript 就好了。我們可以用 JavaScript 選取到這個(gè) textarea,然后直接賦值即可,代碼如下:
document.getElementById("g-recaptcha-response").innerHTML="TOKEN_FROM_YESCAPTCHA";
注意這里的 TOKEN_FROM_YESCAPTCHA 需要換成剛才我們所得到的 token 值。我們做爬蟲模擬登錄的時(shí)候,假如是用 Selenium、Puppeteer 等軟件,在模擬程序里面,只需要模擬執(zhí)行這段 JavaScript 代碼,就可以成功賦值了。 執(zhí)行之后,直接提交表單,我們查看下 Network 請(qǐng)求:

可以看到其就是提交了一個(gè)表單,其中有一個(gè)字段就是 g-recaptcha-response,它會(huì)發(fā)送到服務(wù)端進(jìn)行校驗(yàn),校驗(yàn)通過,那就成功了。 所以,如果我們借助于 YesCaptcha 得到了這個(gè) token,然后把它賦值到表單的 textarea 里面,表單就會(huì)提交,如果 token 有效,就能成功繞過登錄,而不需要我們?cè)偃c(diǎn)選驗(yàn)證碼了。 最后我們得到如下成功的頁(yè)面:

當(dāng)然我們也可以使用 requests 來模擬完成表單提交:
def?verify(response):
????url?=?"https://www.google.com/recaptcha/api2/demo"
????data?=?{"g-recaptcha-response":?response}
????response?=?requests.post(url,?data=data)
????if?response.status_code?==?200:
????????return?response.text
最后完善一下調(diào)用:
if?__name__?==?'__main__':
????task_id?=?create_task()
????print('create?task?successfully',?task_id)
????response?=?polling_task(task_id)
????print('get?response:',?response[0:40]+'...')
????result?=?verify(response)
????print(result)
運(yùn)行結(jié)果如下:
response?data:?{'status':?0,?'msg':?'ok',?'data':?{'taskId':?'1479436991'}}
create?task?successfully?1479436991
polling?result?{'status':?0,?'msg':?'ok',?'data':?{'status':?'Working'}}
status?of?task?Working
polling?result?{'status':?0,?'msg':?'ok',?'data':?{'status':?'Working'}}
status?of?task?Working
polling?result?{'status':?0,?'msg':?'ok',?'data':?{'status':?'Working'}}
status?of?task?Working
polling?result?{'status':?0,?'msg':?'ok',?'data':?{'status':?'Success',?'response':?'03AGdBq27-ABqvNmgq96iuprN8Mvzfq6_8noknIed5foLb15oWvWVksq9KesDkDd7dgMMr-UmqULZduXTWr87scJXl3djhl2btPO721eFAYsVzSk7ftr4uHBdJWonnEemr9dNaFB9qx5pnxr3P24AC7cCfKlOH_XARaN4pvbPNxx_UY5G5fzKUPFDOV14nNkCWl61jwwC0fuwetH1q99r4hBQxyI6XICD3PiHyHJMZ_-wolcO1R9C90iGQyjzrSMiNqErezO24ODCiKRyX2cVaMwM9plbxDSuyKUVaDHqccz8UrTNNdJ4m2WxKrD9wZDWaSK10Ti1LgsqOWKjKwqBbuyRS_BkSjG6OJdHqJN4bpk_jAcPMO13wXrnHBaXdK4FNDR9-dUvupHEnr7QZEuNoRxwl8FnO2Fgwzp2sJbGeQkMbSVYWdAalE6fzJ8NwsFJxCdDyeyO817buBtvTJ4C06C1uZ92fpPTeYGJwbbicOuqbGfHNTyiSJeRNmt-5RKz0OUiPJOPnmVKGlWBOqwbwCW1WZt-E-hH4FEg4En5TITmmPb_feS9dWKUxudn1U0hHk2vV9PerjZLtI7F67KtgmcqRrARPbwnc6KyAi3Hy1hthP92lv4MRIcO2jx0Llvsja-G2nhjZB0ZoJwkb9106pmqldiwlXxky4Dcg7VPStiCYJvhQpRYol7Iq1_ltU2tyhMqsu_Xa8Z6Mr5ykRCLnmlLb8DV8isndrdwp84wo_vPARGRj7Up9ov-ycb5lDKTf1XRaHiMCa8d2WLy0Pjco9UnsRAPw0FW3MsBJah6ryHUUDho7ffhUUgV1k86ryJym6xbWch1sVC4D5owzrCFn6L-rSLc5SS1pza2zU5LK4kAZCmbXNRffiFrhUY8nP4T1xaR2KMhIaN8HhJQpR8sQh1Azc-QkDy4rwbYmxUrysYGMrAOnmDx9z7tWQXbJE4IgCVMx5wihSiE-T8nbF5y1aJ0Ru9zqg1nZ3GSqsucSnvJA8HV5t9v0QSG5cBC1x5HIceA-2uEGSjwcmYOMw8D_65Dl-d6yVk1YN2FZCgMWY5ewzB1RAFN1BMqKoITQJ64jq3lKATpkc5i7aTA2bRGQyXrbDyMRIrVXKnYMHegfMbDn0l4O81a8vxmevLspKkacVPiqLsAe-73jAxMvsOqaG7cKxMQO9CY3qbtD55YgN0W4p2jyNSVz3aEpffHRqYyWMsRI5LddLgaZQDoHHgGUhV580PSIdZJ5eKd0gOjxIYxKlr0IgbMWRmsG_TgDNImy1c5oey8ojl-zWpOQW7bnfq5Z4tZ10_sCTfoOZVLqRuOsqB1OOO9pLRQojLBP0HUiGhRAr_As9EIDu6F9NIQfdAmCaVvavJbi1CZITFjcywP-tBrHsxpwkCXlwl996MK_XyEDuyWnJVGiVSthUMY306tIh1Xxj93W3KQJCzsfJQcjN-3lGLLeDFddypHyG4yrpRqRHHBNyiNJHgxSk5SaShEhXvByjkepvhrKX3kJssCU04biqqmkrQ49GqBV9OsWIy0nN3OJTx8v05MP8aU8YYkYBF01UbSff4mTfLAhin6iWk84Y074mRbe2MbgFAdU58KnCrwYVxcAR8voZsFxbxNwZXdVeexNx5HlIlSgaAHLWm2kFWmGPPW-ZA7R8Wst-mc7oIKft5iJl8Ea0YFz8oXyVgQk1rd9nDR3xGe5mWL1co0MiW1yvHg'}}
status?of?task?Success
get?response:?03AGdBq27-ABqvNmgq96iuprN8Mvzfq6_8noknIe...
<!DOCTYPE?HTML><html?dir="ltr"><head><meta?http-equiv="content-type"?content="text/html;?charset=UTF-8"><meta?name="viewport"?content="width=device-width,?user-scalable=yes"><title>ReCAPTCHA?demo</title><link?rel="stylesheet"?href="https://www.gstatic.com/recaptcha/releases/TbD3vPFlUWKZD-9L4ZxB0HJI/demo__ltr.css"?type="text/css"></head><body><div?class="recaptcha-success">Verification?Success...?Hooray!</div></body></html>
最后就可以發(fā)現(xiàn),模擬提交之后,結(jié)果會(huì)有一個(gè) Verification Success... Hooray! 的文字,就代表驗(yàn)證成功了!
至此,我們就成功完成了 ReCAPTCHA 的破解。
上面我們介紹的是 requests 的實(shí)現(xiàn),當(dāng)然使用 Selenium 等工具也可以實(shí)現(xiàn),具體的 Demo 在文檔也寫好了,請(qǐng)大家參考文檔的說明使用即可。
小福利
現(xiàn)在 YesCaptcha 的價(jià)格我覺得相比之前介紹過的 2Captcha 實(shí)惠很多了,它破解一次是花費(fèi) 10 點(diǎn)數(shù),10 塊錢是 10000 點(diǎn)數(shù),所以平均破解一次驗(yàn)證碼一分錢,新用戶是送 1000 點(diǎn)數(shù),可以破解 100 次。我個(gè)人覺得很實(shí)惠了。
大家有需要的話可以試試看!網(wǎng)址是:?http://yescaptcha.365world.com.cn/
溜了溜了~

End
「進(jìn)擊的Coder」專屬學(xué)習(xí)群已正式成立,搜索「CQCcqc4」添加崔慶才的個(gè)人微信或者掃描下方二維碼拉您入群交流學(xué)習(xí)。
及時(shí)收看更多好文
↓↓↓

點(diǎn)個(gè)在看你最好看

