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()