selenium補充及破解驗證碼的方法及高階案例
阿新 • • 發佈:2020-09-21
今日內容概要
- selenium其他方法補充
- requests-html模組
- 破解驗證碼的方法
- 研究高階爬蟲破解知乎登入
今日內容詳細
selenium其他方法補充
滑動驗證碼
"""滑動驗證碼其實用程式碼破解還不如自己手動劃一下,我們單純的瞭解一下程式碼破解的方式""" #動作鏈(滑動驗證碼沒有程式碼破解的必要 不如手動滑獲取cookie即可) from selenium import webdriver from selenium.webdriver import ActionChains import time browser = webdriver.Chrome() url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable' browser.get(url) browser.switch_to.frame('iframeResult') source = browser.find_element_by_css_selector('#draggable') target = browser.find_element_by_css_selector('#droppable') actions = ActionChains(browser) # actions.drag_and_drop(source, target) actions.click_and_hold(source) time.sleep(3) for i in range(5): actions.move_by_offset(xoffset=17,yoffset=0).perform() time.sleep(0.5) actions.release() """ 為什麼不直接一步到位 而需要設定間歇停頓? 滑動驗證碼內部有檢測機制,如果你速度太快並且很準 那麼後臺會認為你是一個程式從而讓你校驗不通過 """
獲取cookie
url = 'https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F' driver = webdriver.Chrome() driver.get(url=url) time.sleep(50) driver.refresh() c = driver.get_cookies() print(c) # 得到了登入之後網站給出的cookies with open('xxx.txt','w') as f: json.dump(c,f) """ cookie池 獲取同一個網站很多授權之後的cookie存放於某處 之後再訪問該網站的時候都是從中隨機獲取一個訪問 """ 破解登入的思路其實很明確 就是想法設法的拿到登入之後對方給你的cookie資訊即可
驗證碼的破解
三種方式
方式1(最繁瑣)
程式碼破解
軟體:Tesseract-ocr
模組:pytesseract
方式2
打碼平臺
eg:http://www.yundama.com
方式3
人工打碼
requests-html模組
使用此庫時,您將自動獲得: 全面的JavaScript支援! CSS選擇器(又名jQuery風格,多虧了PyQuery)。 XPath Selectors,使您感到內fa。 模擬的使用者代理(如真實的Web瀏覽器)。 自動跟隨重定向。 連線池和cookie永續性。 您知道和喜歡的請求體驗具有神奇的解析能力。 http://requests-html.kennethreitz.org/ https://github.com/psf/requests-html # 支援非同步 from requests_html import AsyncHTMLSession asession = AsyncHTMLSession() async def get_pythonorg(): r = await asession.get('https://www.baidu.com/') return r async def get_reddit(): r = await asession.get('https://www.jd.com/') return r async def get_google(): r = await asession.get('https://www.sogo.com/') return r results = asession.run(get_pythonorg, get_reddit, get_google) # results # check the requests all returned a 200 (success) code # [<Response [200]>, <Response [200]>, <Response [200]>] # Each item in the results list is a response object and can be interacted with as such for result in results: print(result.html.url) # 支援js呼叫 r = session.get('http://python-requests.org/') r.html.render() r.html.search('Python 2 will retire in only {months} months!')['months'] '<time>25</time>'
同步非同步
同步
提交完請求之後原地等待任務的返回結果,什麼時候有結果什麼時候繼續下一步操作
非同步
提交完請求之後不願地等待任務的返回結果直接執行下一個動作,任務後期會通過非同步回撥機制獲取
"""
非同步效率肯定比同步高
"""
知乎登入
"""
知乎的特點如果沒有登入那麼該網站任何資源你都別想看
"""
補充
window.open('https://www.sogo.com','','height=400px,width=400px')
window.close() # 關閉當前頁