import unittest
from PIL import Image
from selenium import webdriver
from time import sleep
import ddddocr
class WeChat(unittest.TestCase):
# def __init__(self):
def setUp(self) -> None:
self.driver = webdriver.Chrome()
#自己的网站
self.driver.get('httpsXXXXXXadminIndex.html')
# 全屏打开
self.driver.maximize_window()
self.driver.implicitly_wait(10)
self.ocr = ddddocr.DdddOcr()
def test_login_success(self):
# 打开自己的网站会有安全认证
self.driver.find_element('id', 'details-button').click()
self.driver.find_element('id', 'proceed-link').click()
self.driver.find_element('xpath', '//*[@id="layui-layer1"]/div[3]/a').click()
sleep(1)
self.driver.find_element('id', 'account').send_keys('BluetoothHaAdmin')
self.driver.find_element('id', 'password').send_keys('000000')
# 先获取屏幕截图,在找元素,定位大小,通过定位出来的地方截图后使用识别验证码模块,将其
# 以二进制的方式识别后,输出后填写到填写验证码的位置
self.driver.save_screenshot('Login_page.png')
yzm_btn = self.driver.find_element('id', 'id_img')
# 获取图片元素的位置
loc = yzm_btn.location
# 获取图片的宽高
size = yzm_btn.size
# 获取验证码上下左右的位置
left = loc['x']
top = loc['y']
right = (loc['x'] + size['width'])
bottom = (loc['y'] + size['height'])
val = (left, top, right, bottom)
# 打开网页截图
login_pic = Image.open('Login_page.png')
# print(val)
# 通过上下左右的值,去截取验证码
yzm_pic = login_pic.crop(val)
yzm_pic.save('yzm.png')
with open('yzm.png', 'rb') as f:
img_bytes = f.read()
# print (img_bytes)
res = self.ocr.classification(img_bytes)
print("验证码:", res, type(res))
self.driver.find_element('id', 'id_webVerificationCode').send_keys(res)
sleep(1)
self.driver.find_element('id', 'id_loginButton').click()
sleep(12)
self.driver.quit()
# if __name__ == '__main__':
# ocr = ddddocr.DdddOcr()
# wechat = WeChat()
# # 点击安全提醒
# sleep(12)
# #退出
# wechat.driver.quit()
1.打开自己网站会有的不安全提醒,没有就去掉
2.登录系统界面
验证码可以看下自己截图是否正确 ,可以调节left4个位置