网站服务器部署,宁波黄页网,贵阳能做网站的公司,做定制旅游最好的网站场景描述#xff1a; 模拟用户登录页面操作#xff0c;包括输入用户名、密码、验证码。验证码为算数运算#xff0c;如下#xff1a; 使用到的工具和依赖#xff1a; 1. Selenium#xff1a;pip install selenium 2. 需要安装浏览器驱动#xff1a;这里使用的是Edge 3…场景描述 模拟用户登录页面操作包括输入用户名、密码、验证码。验证码为算数运算如下 使用到的工具和依赖 1. Seleniumpip install selenium 2. 需要安装浏览器驱动这里使用的是Edge 3. Pillow : 用来处理图像例如图像二值化等等 4. 图像识别库pytesseract 3.1 下载安装Tesseracthttps://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-5.3.3.20231005.exe 3.2 配置环境变量 3.3 在pycharm中下载依赖pip install pytesseract 代码实现
import base64
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
from PIL import Image
import pytesseract
import io
import re#edge驱动
edge_driver_path E:\SoftWare_work\download\edgedriver_win64\msedgedriver.exe
#浏览器选型配置
edge_optionsOptions()
#edge_options.add_argument(--headless) 加上该行代码运行时不会打开浏览器
#启动浏览器
serviceService(edge_driver_path)
driverwebdriver.Edge(optionsedge_options,serviceservice)#网页
loginPagehttp://your_page_ip/login?redirect/index
driver.get(loginPage)time.sleep(2) #等待加载输入用户名、密码、验证码登录
user_namedriver.find_element(By.XPATH,//input[classel-input__inner and typetext and placeholder用户名])
user_name.send_keys(username)
passworddriver.find_element(By.XPATH,//input[classel-input__inner and typepassword and placeholder密码])
password.send_keys(password)
#处理验证码
#1.定位图片
img_elemdriver.find_element(By.CSS_SELECTOR,div.login-code img.login-code-img)
#2. 获取src属性 base64编码的图片
img_srcimg_elem.get_attribute(src)
读取图像
#2.2 提取base64编码部分
if img_src.startswith(data:image):img_srcimg_src.split(,)[1]
#2.3 解码base64数据
image_database64.b64decode(img_src)
#2.4 读取图像
imageImage.open(io.BytesIO(image_data))
image.show()#原图像显示
图像处理
#转化为灰度图像
image_grayimage.convert(L)
image_gray.show()
#图像二值化处理
threshold_imageimage_gray.point(lambda p:p128 and 255)
#图像显示
threshold_image.show()
图像识别
text pytesseract.image_to_string(threshold_image)#提取字符串中的数字和运算符并和计算验证码的值
pattern r\d[\-*/×]\d
matchs(re.match(pattern,text)).group()
result0
if matchs.__contains__():num1matchs.split()[0]num2matchs.split()[1]resultint(num1)int(num2)
elif matchs.__contains__(-):num1 matchs.split(-)[0]num2 matchs.split(-)[1]result int(num1) - int(num2)
elif matchs.__contains__(*):num1matchs.split(*)[0]num2matchs.split(*)[1]resultint(num1)*int(num2)
else:num1 matchs.split(/)[0]num2 matchs.split(/)[1]result int(num1) / int(num2)
#定位验证码输入框输入验证码
login_codedriver.find_element(By.XPATH,//input[classel-input__inner and typetext and placeholder验证码])
login_code.send_keys(result)#点击登录
login_buttondriver.find_element(By.CSS_SELECTOR,button)
login_button.click()#关闭网页
driver.quit()