UI自动化滑动登录
一、使用OpenCV图像识别函数
1 import time 2 import cv2 3 import requests 4 from selenium import webdriver 5 from selenium.webdriver import ActionChains 6 from selenium.webdriver.common.by import By 7 8 def FindPic(target="../lib/bj.jpg", block="../lib/block.jpg"): 9 """ 10 找出图像中最佳匹配位置 11 :param target: 目标即背景图 12 :param template: 模板即需要找到的图 13 :return: 返回最佳匹配及其最差匹配和对应的坐标 14 """ 15 #读取图片 16 target_rgb = cv2.imread(target) 17 #灰度处理 18 target_gray = cv2.cvtColor(target_rgb, cv2.COLOR_BGR2GRAY) 19 #读取滑块 20 template_rgb = cv2.imread(block, 0) 21 #匹配缺口在背景图的位置 22 res = cv2.matchTemplate(target_gray, template_rgb, cv2.TM_CCOEFF_NORMED) 23 #获取最差和最佳匹配结果 24 value = cv2.minMaxLoc(res) 25 print(value) 26 # 返回最佳匹配的x坐标 27 return value[2][0]
二、登录页面代码
1 driver = webdriver.Chrome() 2 driver.implicitly_wait(10) 3 4 #打开网站 5 driver.get('https://faerge.com/login') 6 driver.maximize_window() 7 username = driver.find_element(by=By.XPATH, value='//*[@id="root"]/section/div[2]/div/div/div[2]/div/form/div[1]/input') 8 username.clear() 9 username.send_keys('x15191690047') 10 11 password = driver.find_element(by=By.XPATH, value='//*[@id="root"]/section/div[2]/div/div/div[2]/div/form/div[2]/input') 12 password.clear() 13 password.send_keys('953680003xp@') 14 15 login = driver.find_element(by=By.XPATH, value='//*[@id="root"]/section/div[2]/div/div/div[2]/div/form/button') 16 login.click() 17 18 time.sleep(2) 19 20 driver.switch_to.frame(driver.find_element(by=By.XPATH, value='//*[@id="tcaptcha_iframe"]')) 21 22 #获取图片地址 23 24 #背景图 25 ele_bj = driver.find_element(by=By.XPATH, value='//*[@id="slideBg"]') 26 src_bj = ele_bj.get_attribute('src') 27 #滑块图 28 ele_block = driver.find_element(by=By.XPATH, value='//*[@id="slideBlock"]') 29 src_block = ele_block.get_attribute('src') 30 print(src_bj) 31 print(src_block) 32 33 #下载背景图 34 img_bj = requests.get(src_bj).content 35 f = open('../lib/bj.jpg', mode='wb') 36 f.write(img_bj) 37 f.close() 38 39 #下载滑块图 40 img_block = requests.get(src_block).content 41 f = open('../lib/block.jpg', mode='wb') 42 f.write(img_block) 43 f.close() 44 45 x = FindPic('../lib/bj.jpg', '../lib/block.jpg') 46 print(x) 47 48 #图片左边到缺块长度减去x的值是26,680是图片实际长度,340是图片缩放长度 49 x = int(x*340/680)-26 50 51 #滑动方法selenium中ActionChains 52 action = ActionChains(driver) 53 #按住鼠标图片不松动 54 action.click_and_hold(ele_block).perform() 55 #移动鼠标 56 action.move_by_offset(x, 0).perform() 57 #松开鼠标 58 action.release(ele_block).perform()