💻 源代码
import cv2
import numpy as np
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
def get_distance(bg_img, full_img):
"""获取滑动距离"""
bg = cv2.imread(bg_img, 0)
full = cv2.imread(full_img, 0)
# 边缘检测
bg_edge = cv2.Canny(bg, 100, 200)
full_edge = cv2.Canny(full, 100, 200)
# 模板匹配
res = cv2.matchTemplate(bg_edge, full_edge[120:370, 25:310], cv2.TM_CCOEFF_NORMED)
_, _, _, max_loc = cv2.minMaxLoc(res)
return max_loc[0]
def generate_track(distance):
"""生成带有变速的滑动轨迹"""
track = []
current = 0
mid = distance * 0.7
while current < distance:
if current < mid:
move = np.random.randint(2, 5)
else:
move = np.random.randint(1, 3)
current += move
track.append(current)
# 滑动到精确位置
track.append(distance)
return track
def slide(driver, element, track):
"""执行滑动"""
ActionChains(driver).click_and_hold(element).perform()
for x in track:
ActionChains(driver).move_by_offset(xoffset=x, yoffset=0).perform()
time.sleep(np.random.randint(10, 50) / 1000)
ActionChains(driver).release().perform()
# 使用
driver = webdriver.Chrome()
driver.get('https://example.com')
slide(driver, element, generate_track(50))