某次我需要selenium处理验证码的时候,发现网上大部分文章都是对验证码的部分进行截屏然后抠图,然后OCR进行处理,我自己认为这种截屏抠图方式比较繁琐,于是我直接获取验证码base64数据或者bytes数据,然后OCR解析进行其他处理。
示例代码如下:
import undetected_chromedriver.v2 as uc
from selenium.webdriver.common.by import By
import ddddocr
import time
if __name__ == '__main__':
browser = uc.Chrome()
browser.get("https://support.huawei.com/enterprise/ecareWechat")
# 隐式等待
browser.implicitly_wait(5)
# 处理内嵌html
element = browser.find_element(by=By.CLASS_NAME, value="wechat")
browser.switch_to.frame(element)
# 定位到图片元素
img = browser.find_element(by=By.XPATH, value='//*[@id="imgObj"]')
# 获取图片bytes数据
# data = img.screenshot_as_png
# 获取图片base64数据
data = img.screenshot_as_base64
ocr = ddddocr.DdddOcr()
# 进行验证码识别
text = ocr.classification(img_base64=data) # img_bytes=data 这是bytes数据传入时,但在pycharm 会冒黄,我也不清楚为啥
print(text)
time.sleep(5)
browser.quit()
这样就能得到验证码字符串了
运行结果:
ddddocr python开源免费的OCR文字识别库
下载:pip install ddddocr
undetected_chromedriver selenium防止被浏览器识别的github上的开源的包
下载:pip install undetected_chromedriver -i https://pypi.douban.com/simple 防selenium被识别(也会自动下载匹配浏览器selenium对应版本的chromedriver.exe)
版权归原作者 shyBoy小沐 所有, 如有侵权,请联系我们删除。