盤點一個Python網絡爬蟲過驗證碼的問題(方法一) 環球今熱點
回復“書籍”即可獲贈Python從入門到進階共10本電子書
(資料圖)
今
日
雞
湯
低眉信手續續彈,說盡心中無限事。大家好,我是皮皮。
一、前言前幾天在Python最強王者群【鶏啊鶏。】問了一個Python網絡爬蟲的問題,這里拿出來給大家分享下。
下面是他的代碼:
from?selenium?import?webdriverfrom?selenium.webdriver.common.by?import?Byimport?timefrom?PIL?import?Imageimport?ddddocrocr?=?ddddocr.DdddOcr()options?=?webdriver.ChromeOptions()options.add_argument("user-agent=Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_15_7)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/86.0.4240.198?Safari/537.36")options.add_argument("--disable-blink-features=AutomationControlled")driver?=?webdriver.Chrome(options=options)#?打開目標網頁driver.get("https://sol.sinosure.com.cn")time.sleep(5)driver.maximize_window()#?定位驗證碼圖片元素并模擬鼠標懸停以加載圖片yanzhengma?=?driver.find_element(By.CSS_SELECTOR,?".pass-form-item.pass-form-item-code")captcha_element?=?yanzhengma.find_element(By.CSS_SELECTOR,??".pass-label-img")webdriver.ActionChains(driver).move_to_element(captcha_element).perform()time.sleep(5)#?獲取驗證碼圖片元素的位置和大小location?=?captcha_element.locationsize?=?captcha_element.sizeprint(location)print(size)#?截取整個網頁的截圖driver.save_screenshot("screenshot.png")#?根據驗證碼圖片元素的位置和大小,從整個網頁截圖中裁剪出驗證碼圖片left?=?int(location["x"])top?=?int(location["y"])right?=?int(location["x"]?+?size["width"])bottom?=?int(location["y"]?+?size["height"])captcha_screenshot?=?Image.open("screenshot.png").crop((left,?top,?right,?bottom))print(left)print(top)print(location)print(bottom)#?保存裁剪后的驗證碼圖片,并進行識別captcha_screenshot.save("captcha.png")with?open("captcha.png",?"rb")?as?f:????img_bytes?=?f.read()res?=?ocr.classification(img_bytes)print("識別的驗證碼是:"?+?res)
基本思路是沒啥問題的,確實也是可以拿到對應界面的截圖,只不過是驗證碼的位置截取出現了點偏差,導致驗證碼沒正確識別到。
下面這個代碼是獲取驗證碼圖片元素的位置和大小:
location?=?captcha_element.locationsize?=?captcha_element.size
這個部分我看介紹應該是會返回定位的元素位置,我剛剛大致拖拉了一下在裁剪前的定位打印出來確實就已經去了輸入密碼附近的位置了 但是我定位的元素是驗證碼的地方,并且我也嘗試了先定位驗證那個位置的大元素再定位至具體的驗證碼圖片位置 ?問題依舊。
上面是粉絲的疑惑,下面一起來看看解決辦法。
二、實現過程這里【魏哥】嘗試了下代碼,但是出現下圖報錯:
這個報錯還是蠻常見的,對于時常使用sel的人來說,這個報錯算是家常便飯了,報錯的原因是本地瀏覽器驅動和谷歌瀏覽器的版本不匹配,需要更換本地瀏覽器驅動。
關于這個問題的解決方法,就是去網頁下載對應瀏覽器版本的對應驅動,放到本地指定文件夾,確保該文件夾路徑有加入環境變量。該問題的解決辦法公眾號歷史文章也有提及,網上的解決教程也一大堆,這里不再贅述。
言歸正傳,繼續回到這個問題的解決辦法。這里【甯同學】給了一個思路,直接找到 驗證碼的圖片的url 用requests 請求 驗證碼的.content 用 ocr.classification(驗證碼的.content) 就可以了 不用保存圖片 在open讀取二進制流,代碼如下所示:
順利地解決了粉絲的問題,如果對requests和Beautiful還不熟悉的小伙伴,可能接受起來就比較困難一些。
這里只是給出了其中一個方法,另外的一個方法,一起看下一篇文章,敬請期待!
三、總結大家好,我是皮皮。這篇文章主要盤點了一個Python網絡爬蟲過驗證碼的問題,文中針對該問題,給出了具體的解析和代碼實現,幫助粉絲順利解決了問題。
最后感謝粉絲【鶏啊鶏】提問,感謝【甯同學】、【魏哥】給出的思路和代碼解析,感謝【Ineverleft】等人參與學習交流。
【提問補充】溫馨提示,大家在群里提問的時候。可以注意下面幾點:如果涉及到大文件數據,可以數據脫敏后,發點demo數據來(小文件的意思),然后貼點代碼(可以復制的那種),記得發報錯截圖(截全)。代碼不多的話,直接發代碼文字即可,代碼超過50行這樣的話,發個.py文件就行。
大家在學習過程中如果有遇到問題,歡迎隨時聯系我解決(我的微信:pdcfighting1),應粉絲要求,我創建了一些高質量的Python付費學習交流群和付費接單群,歡迎大家加入我的Python學習交流群和接單群!
小伙伴們,快快用實踐一下吧!如果在學習過程中,有遇到任何問題,歡迎加我好友,我拉你進Python學習交流群共同探討學習。
-------------------?End?-------------------
往期精彩文章推薦:
if a and b and c and d:這種代碼有優雅的寫法嗎?
Pycharm和Python到底啥關系?
都說chatGPT編程怎么怎么厲害,今天試了一下,有個靜態網頁,chatGPT居然沒搞定?
站不住就準備加倉,這個pandas語句該咋寫?
歡迎大家點贊,留言,轉發,轉載,感謝大家的相伴與支持
想加入Python學習群請在后臺回復【入群】
萬水千山總是情,點個【在看】行不行
/今日留言主題/
隨便說一兩句吧~~
關鍵詞:
您可能也感興趣:
為您推薦
石藥集團(01093)6月21日根據股份獎勵計劃購買1000萬股-天天看熱訊
天天快資訊丨生馬錢子枯礬散_關于生馬錢子枯礬散介紹
桂東電力:證券簡稱擬變更為廣西能源 今日熱議
排行
最近更新
- 盤點一個Python網絡爬蟲過驗證碼的問題(方法一) 環球今熱點
- 【環球新要聞】618新消費⑧|年輕人“養生”意愿強烈 “銀發...
- 速訊:提前封頂!海口江東新區瓊臺師范學院綜合樓項目建設提...
- 江西省余干縣發布暴雨藍色預警-環球播報
- 世界熱資訊!帶娃在小區內玩耍時,有哪些潛在的危險?
- 你好意思說它不紅?
- 華為向日本公司收專利費
- 得了這病要分房睡?霍啟剛常因此病半夜驚醒,浙江醫生半天接...
- 女子喊3遍拔針護士打游戲不理會 基本信息講解
- 華碩靈耀X Ultra評測:華碩輕薄科技與性能的完美結合
- 臨時停火協議到期 蘇丹多地再度爆發沖突_聚看點
- 如何創作特色小丑服裝——送給女友的與眾不同的圣誕禮物和祝...
- 連續3天、30多場演出免費看?和“思南Yé派對?夏至音樂日”一起嗨
- 天天百事通!2023年湖南省退休工資上調最新消息公布時間 湖...
- 6月份青海省養老金調整最新消息(2023青海省養老金上調方案細...
- 6月份89款國產游戲版號過審 上半年發放數量已超去年全年 今亮點
- “3小時高鐵圈”,“圈”出幾多精彩?
- “豐”景如畫 特色產業助力鄉村振興_環球熱點
- 今日視點:別再只認識文班亞馬了!NBA23屆模擬選秀:今年還有...
- 資訊:歐盤歐元/美元匯率走勢分析(2023年6月21日)
- 電腦如何連接打印機步驟(電腦如何連接打印機步驟)
- 【環球熱聞】2022年博羅上良民宿五一假期游玩推薦(博羅上良村)
- ppt是一種什么軟件 ppt屬于什么軟件_天天觀點
- 抖音卸載了聊天記錄還有嗎(抖音卸載了聊天記錄還有嗎怎么恢復)
- 正宗啤酒鴨的制作方法(怎樣做啤酒鴨才好吃)_每日關注
- 銀企對接助發展,攜手共進開新局——郵儲銀行淥口區支行參加...
- 原子內部幾乎是虛空 但為什么我們人體看起來 卻很實在|焦點報道
- 視訊!這3大生肖女天生富貴命,旺夫益子相,越老越有錢花,有...
- 新冠疫苗滅活疫苗有哪幾種? 新冠疫苗哪一種是滅活疫苗
- 我國成為全球生態治理典范