实现自动化登录和获取图片验证码功能
- 计算题验证码使用的OCR是ddddocr,经过实践比tesseract精度更高
- 对于页面具体的find_element需要结合源网址进行一定的修改,请注意
python
# 自动添加用户名,密码,计算题验证码
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time
from PIL import Image
import re
from io import BytesIO
from selenium.webdriver.common.by import By
import pytesseract
import base64
from ddddocr import DdddOcr
# 实例化一个Chrome WebDriver
driver = webdriver.Chrome()
# 打开登录页面
driver.get("这里写网址")
# 等待页面加载
time.sleep(2)
# 查找用户名和密码输入框
username_input = driver.find_element(By.CSS_SELECTOR, 'input[placeholder="请输入用户名"]')
password_input = driver.find_element(By.CSS_SELECTOR, 'input[placeholder="请输入密码"]')
username_input.send_keys("这里写账号名")
password_input.send_keys("这里写密码")
# 查找验证码图片元素
captcha_image_element = driver.find_element(By.CLASS_NAME, 'captch-img')
# 获取验证码图片的 base64 编码
captcha_base64 = captcha_image_element.get_attribute("src").split(",")[1]
# 解码base64编码的图片
captcha_image = Image.open(BytesIO(base64.b64decode(captcha_base64)))
# 使用ddddocr进行OCR识别
ocr = DdddOcr(beta=True)
captcha_text = ocr.classification(captcha_image)
# 去掉最后一个字符
captcha_text = captcha_text[:-1]
print("识别的验证码:", captcha_text)
# 从验证码中提取算术表达式
calculation = re.search(r'(\d+)\s*([-+])\s*(\d+)', captcha_text)
if calculation:
num1 = int(calculation.group(1))
operator = calculation.group(2)
num2 = int(calculation.group(3))
# 计算结果
if operator == '+':
result = num1 + num2
elif operator == '-':
result = num1 - num2
else:
result = None
print("计算结果:", result)
else:
print("未能提取算术表达式")
# 将结果填入验证码输入框
input_element = driver.find_element(By.CSS_SELECTOR, 'input[placeholder="请输入验证码"]')
input_element.clear()
input_element.send_keys(str(result))
# 提交登录表单
login_button = driver.find_element(By.CSS_SELECTOR, 'button.el-button.login_text.lg-btn.el-button--primary.el-button--medium')
login_button.click()
# 等待登录成功后页面加载完成
time.sleep(2)
#显示登录成功
print("登录成功")
# 关闭浏览器
driver.quit()