python+selenium环境准备:
python 自行安装
一、安装selenium:pip install selenium
二、下载谷歌浏览器驱动
1、去http://chromedriver.storage.googleapis.com/index.html下载chromedriver.exe(根据chrome的版本下载对应的)
2、将下载好的chromedriver.exe解压后放到指定目录(我一般放在代码目录下)
三,安装第三方库,可参考文章:https://www.cnblogs.com/fppblog/p/11804196.html
pip install pillow
pip install pytesseract
引入:
from pytesseract import pytesseractfrom selenium import webdriverfrom PIL import Image
四,代码实现
import timeimport requestsfrom pytesseract import pytesseractfrom selenium import webdriverfrom PIL import Image #创建一个浏览器对象browser = webdriver.Chrome()browser.maximize_window()#打开登录界面browser.get(‘http://cloud.xxxx.com/login‘) # 识别验证码browser.save_screenshot(‘login.png‘)#获取验证码位置codepng = browser.find_element_by_xpath(‘//*[@id="imgCheckCode"]‘)location = codepng.locationsize = codepng.size#获取验证码位置left = location[‘x‘]top = location[‘y‘]bottom = top + size[‘height‘]right = left + size[‘width‘] #打开页面截图login_png = Image.open(‘login.png‘)code_png = login_png.crop((left,top,right,bottom)) #这里需要传入一个元组code_png.save(‘code.png‘)#识别验证码#第一步:通过内置模块PIL打开文件image = Image.open(‘code.png‘)#第二步:识别图片中的内容image = image.convert(‘L‘) #转化为灰度图threshold = 168 #设定的二值化阈值table = [] #table是设定的一个表,下面的for循环可以理解为一个规则,小于阈值的,就设定为0,大于阈值的,就设定为1for i in range(256): if i < threshold: table.append(0) else: table.append(1) image = image.point(table,‘1‘) #对灰度图进行二值化处理,按照table的规则(也就是上面的for循环)image.show()result = pytesseract.image_to_string(image) #对去噪后的图片进行识别print(‘图片内容为:‘,result) #定位账号密码验证码输入框acc_input = browser.find_element_by_xpath(‘//*[@id="username"]‘)time.sleep(2)acc_input.send_keys(‘EPxxxx001‘)pwd_input = browser.find_element_by_xpath(‘//*[@id="password"]‘)time.sleep(2)pwd_input.send_keys(‘123456‘)code_input = browser.find_element_by_xpath(‘//*[@id="checkCode"]‘)time.sleep(2)code_input.send_keys(result)time.sleep(5) #点击登录按钮try: browser.find_element_by_xpath(‘//*[@id="login"]/div[5]/button‘).click() #判断系统状态 url = browser.current_url resp = requests.get(url, timeout=5) code = resp.status_code print(‘登录返回码为:‘,code) assert code == 200except Exception as e: time.sleep(5) #关闭 browser.close() print(‘发生错误,登录失败!‘)else: if url == ‘http://cloud.xxxx.com/lamp/analysis/data‘: print(‘登录成功!‘) else: print(‘登录失败!‘) time.sleep(3) # 关闭 browser.close()
原文地址:https://www.cnblogs.com/fppblog/p/11797873.html
时间: 2024-08-01 19:36:08