思路:
1、根据xpath获取登录页面验证码元素区域的位置坐标
2、根据位置坐标截取验证码图片
3、识别验证码文本,再使用UI或者接口登录
步骤:
1、安装tesseract,及pytesseract
参考:https://blog.csdn.net/qq_38900441/article/details/82823312
2、编写裁剪、识别验证码、登录脚本---station_web_login.py
# coding:utf-8 from PIL import Image from selenium import webdriver import pytesseract import time def cut_image(): # 截图当前页面 driver.save_screenshot(\'station_web_login.png\') # 定位到该元素,获取位置信息 img = driver.find_element_by_xpath(\'//img[@id="vildateImg"]\') location = img.location size = img.size left = location[\'x\'] top = location[\'y\'] right = left + size[\'width\'] bottom = top + size[\'height\'] # 裁剪图片 img = Image.open(\'station_web_login.png\') cropped = img.crop((left, top, right, bottom)) cropped.save(\'station_web_login_checkCode.png\') # 识别图片 text = pytesseract.image_to_string(Image.open(\'station_web_login_checkCode.png\').resize((300, 100))) # 模拟登录 driver.find_element_by_xpath(\'//input[@id="username"]\').send_keys(\'****\') driver.find_element_by_xpath(\'//input[@id="password"]\').send_keys(\'*******\') driver.find_element_by_xpath(\'//input[@id="rand"]\').send_keys(text) driver.find_element_by_xpath(\'//button[@id="submitlogin"]\').click() # return text # 获取页面源码 global source source = driver.page_source def login(): """ 登录并获取TOKEN和JSESSIONID :return: """ global driver driver = webdriver.Chrome() url = \'http://*******/login\' driver.maximize_window() driver.get(url) # 等待两秒截图更清晰 time.sleep(2) # 裁剪图片 cut_image() if \'验证码不能为空或错误!\' in source: driver.refresh() cut_image() if \'欢迎使用\' in source: # 获取cookies,用于后续接口访问鉴权 all_cookies = driver.get_cookies() TOKEN = all_cookies[0][\'value\'] JSESSIONID = all_cookies[1][\'value\'] driver.quit() return TOKEN, JSESSIONID
3、将station_web_login.py文件放置到框架中
然后在需要的地方引入
就可以使用里面的方法了,主要是login()方法
有用的博客:
https://www.sohu.com/a/235364612_729271--综合实现
https://blog.csdn.net/hfutdog/article/details/82351549 --图片裁剪