Python +Selenium解決圖片驗(yàn)證碼登錄或注冊問題(推薦)
1. 解決思路
首先要獲得這張驗(yàn)證碼的圖片,但是該圖片一般都是用的js寫的,不能夠通過url進(jìn)行下載。
解決方案:截圖然后根據(jù)該圖片的定位和長高,使用工具進(jìn)行裁剪
裁剪完畢之后,使用工具解析該圖片。
2. 代碼實(shí)現(xiàn)
2.1 裁剪出驗(yàn)證碼圖片
裁剪圖片需要使用 Pillow 庫,進(jìn)入pip包路徑后輸入安裝命令pip install Pillow:
之前安裝的時候忘記了截圖,只能夠截一張安裝后的圖片了 ╰(:з╰∠)_
安裝完成后,代碼實(shí)現(xiàn)方式如下:
#coding=utf-8
from selenium import webdriver
import time
from PIL import Image
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
# 進(jìn)入該網(wǎng)站
driver.get("http://www2.nmec.org.cn/wangbao/nme/sp/root/account/signup.html")
# 能否在5s內(nèi)找到驗(yàn)證碼元素,能才繼續(xù)
if WebDriverWait(driver,5).until(lambda the_driver:the_driver.find_element_by_id("CaptchaImg"), "查找不到該元素"):
# 對于一次截屏無法到截到驗(yàn)證碼的情況,需要滾動一段距離,然后驗(yàn)證碼的y坐標(biāo)也應(yīng)該減去這段距離
scroll = 500
js = "document.documentElement.scrollTop='%s'" %scroll
driver.execute_script(js)
# 截下該網(wǎng)站的圖片
driver.get_screenshot_as_file("E:/Python_selenium_advance/Picture/full.png")
# 獲得這個圖片元素
img_ele = driver.find_element_by_id("CaptchaImg")
# 得到該元素左上角的 x,y 坐標(biāo)和右下角的 x,y 坐標(biāo)
left = img_ele.location.get('x')
upper = img_ele.location.get('y') - 500
right = left + img_ele.size.get('width')
lower = upper + img_ele.size.get('height')
# 打開之前的截圖
img = Image.open("E:/Python_selenium_advance/Picture/full.png")
# 對截圖進(jìn)行裁剪,裁剪的范圍為之前驗(yàn)證的左上角至右下角范圍
new_img = img.crop((left, upper, right, lower))
# 裁剪完成之后保存到指定路徑
new_img.save("E:/Python_selenium_advance/Picture/croped.png")
time.sleep(2)
driver.quit()
else:
print("找不到驗(yàn)證碼元素")
2.2 使用 圖鑒 商用接口來識別驗(yàn)證碼
接口介紹網(wǎng)址:http://www.ttshitu.com/docs/python.html#pageTitle
調(diào)用該接口直接使用網(wǎng)頁上的接口文檔就行,代碼如下:
import json
import requests
import base64
from io import BytesIO
from PIL import Image
from sys import version_info
def base64_api(uname, pwd, softid, img):
img = img.convert('RGB')
buffered = BytesIO()
img.save(buffered, format="JPEG")
if version_info.major >= 3:
b64 = str(base64.b64encode(buffered.getvalue()), encoding='utf-8')
else:
b64 = str(base64.b64encode(buffered.getvalue()))
data = {"username": uname, "password": pwd, "softid": softid, "image": b64}
result = json.loads(requests.post("http://api.ttshitu.com/base64", json=data).text)
if result['success']:
return result["data"]["result"]
else:
return result["message"]
return ""
將其保存為一個單獨(dú)的 analysis_captcha.py ,然后再導(dǎo)入該方法,直接使用即可:
from analysis_captcha import base64_api def analysis_captcha(filename): ''' 使用 圖鑒 商用接口來識別指定位置的驗(yàn)證碼圖片 :param filename: 驗(yàn)證碼圖片位置 :return : 驗(yàn)證碼文本 ''' img_path = filename img = Image.open(img_path) result = base64_api(uname='kaibin', pwd='******', softid='4545454', img=img) return result
驗(yàn)證碼識別可能會出錯,到時候再點(diǎn)擊驗(yàn)證碼圖片換一張,然后重來即可。
總結(jié)
以上所述是小編給大家介紹的Python +Selenium實(shí)現(xiàn)圖片驗(yàn)證碼登錄或注冊問題,希望對大家有所幫助!
- 使用 Python 和 Selenium 解決 Cloudflare 驗(yàn)證碼的問題
- python+selenium行為鏈登錄12306(滑動驗(yàn)證碼滑塊)
- Python Selenium破解滑塊驗(yàn)證碼最新版(GEETEST95%以上通過率)
- Selenium+Python 自動化操控登錄界面實(shí)例(有簡單驗(yàn)證碼圖片校驗(yàn))
- selenium+python實(shí)現(xiàn)1688網(wǎng)站驗(yàn)證碼圖片的截取功能
- Python使用selenium實(shí)現(xiàn)網(wǎng)頁用戶名 密碼 驗(yàn)證碼自動登錄功能
- Python Selenium Cookie 繞過驗(yàn)證碼實(shí)現(xiàn)登錄示例代碼
- python+selenium識別驗(yàn)證碼并登錄的示例代碼
- Python爬蟲selenium驗(yàn)證之中文識別點(diǎn)選+圖片驗(yàn)證碼案例(最新推薦)
相關(guān)文章
python用ConfigObj讀寫配置文件的實(shí)現(xiàn)代碼
發(fā)現(xiàn)一個簡單而又強(qiáng)大的讀寫配置文件的lib,個人覺得最大的亮點(diǎn)在于自帶的格式校驗(yàn)功能,并且支持復(fù)雜的嵌套格式,而且使用起來也相當(dāng)?shù)暮啽?/div> 2013-03-03
python實(shí)現(xiàn)根據(jù)文件格式分類
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)根據(jù)文件格式分類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-10-10
Python中的Logging模塊在項(xiàng)目應(yīng)用小結(jié)
Python標(biāo)準(zhǔn)庫中的logging模塊為我們提供了強(qiáng)大而靈活的日志記錄功能,本文將介紹如何使用logging模塊,并探討其在Python開發(fā)中的實(shí)際應(yīng)用,感興趣的朋友一起看看吧2024-04-04
Python實(shí)現(xiàn)的三層BP神經(jīng)網(wǎng)絡(luò)算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的三層BP神經(jīng)網(wǎng)絡(luò)算法,結(jié)合完整實(shí)例形式分析了Python三層BP神經(jīng)網(wǎng)絡(luò)算法的具體實(shí)現(xiàn)與使用相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
Python實(shí)現(xiàn)簡易超市管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python如何實(shí)現(xiàn)簡易超市管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-09-09最新評論

