在使用python+selenium实现自动化登录时,遇到了关于验证码的一些问题,主要是验证码格式的转换和识别。我这里的验证码都是用的base64格式,我的思路是先将base64格式转化为jpg或者png格式,然后用ddddocr模型来识别图片内容。文章来源:https://www.toymoban.com/news/detail-547797.html
#base64转jpg
import base64
from selenium import webdriver
from selenium.webdriver.common.by import By
#使用xpath定位到验证码所在的位置
el = driver.find_element_by_xpath('//*[@id="app"]/div/form/div[3]/div/div[2]/img')
data = el.get_attribute("src")
print(len(data))
#去掉base64的'data:image/png;base64,'
a = data.replace('data:image/png;base64,', '')
print(len(a))
missing_padding = 4 - len(a) % 4
if missing_padding:
a += '=' * missing_padding
print(a, file=open('base64.txt', 'w'))
with open('base64.txt', 'r') as f_obj:
b = base64.b64decode(f_obj.read())
#注意base64的数据前头部分,如果是data:image/png,则转换成jpg格式
file = open('1.jpg', 'wb')
file.write(b)
print('图片已下载')
code = driver.find_element_by_xpath('//*[@id="app"]/div/form/div[3]/div/div[1]/input') # 验证码输入框位置
ocr = ddddocr.DdddOcr()
time.sleep(3)
try:
with open('1.jpg', 'rb') as fp:
image = fp.read()
catch = ocr.classification(image) # 验证码返回给catch
print(catch)
#将验证码内容写入输入框
code.send_keys(catch)
except Exception as e:
print(e)
print('successful')
总结:文章来源地址https://www.toymoban.com/news/detail-547797.html
- replace()不生效: replace返回的是一个新的值,需要用一个新的变量来接收
- ddddocr模型相对好用,但是也不能避免出现识别有误的情况,识别有误时可以尝试循环
- 在由base64格式转换jpg格式时,一定要去掉base64的前头部分
到了这里,关于python+selenium 实现验证码由base64转为jpg/png格式,并识别验证码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!