1.根据元素坐标定位

from selenium import  webdriver
from selenium.webdriver.common.by import By
from  selenium.webdriver.common.action_chains import ActionChains 
ActionChains(driver).move_by_offset(700,200).click().perform() # 根据元素定位后,左点击 x,y

 

2.先定位元素,然后滑动元素

 w=driver.find_element(By.XPATH,'//span[text()=""]')
 webdriver.ActionChains(driver).click_and_hold(w).perform()
 webdriver.ActionChains(driver).move_by_offset(xoffset=260,yoffset=260).perform()
 webdriver.ActionChains(driver).release(w).perform()

 

3.滑动验证码

复制代码

from time import sleep
from selenium import webdriver
import random

from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

def
get_track( distance): ''' 拿到移动轨迹,模仿人的滑动行为,先匀加速后匀减速 匀变速运动基本公式: ①v=v0+at ②s=v0t+(1/2)at² ③v²-v0²=2as :param distance: 需要移动的距离 :return: 存放每0.2秒移动的距离 ''' # 初速度 v = 0 # 单位时间为0.2s来统计轨迹,轨迹即0.2内的位移 t = 2 # 位移/轨迹列表,列表内的一个元素代表0.2s的位移 tracks = [] # 当前的位移 current = 0 # 到达mid值开始减速 mid = distance * 5 / 8 distance += 10 # 先滑过一点,最后再反着滑动回来 # a = random.randint(1,3) while current < distance: # if current < mid: # 加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细 a = random.randint(1, 3) # 加速运动 # else: # a = -random.randint(2, 4) # 减速运动 # 初速度 v0 = v # 0.2秒时间内的位移 s = v0 * t + 0.5 * a * (t ** 2) # 当前的位置 current += s # 添加到轨迹列表 tracks.append(round(s)) # 速度已经达到v,该速度作为下次的初速度 v = v0 + a * t # 反着滑动到大概准确位置 # for i in range(4): # tracks.append(-random.randint(1, 3)) # for i in range(4): # tracks.append(-random.randint(1,3)) random.shuffle(tracks) return tracks def login(tracks): driver = webdriver.Chrome() driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ }) try: driver.maximize_window() driver.implicitly_wait(10) driver.get( "url") driver.find_element(By.CSS_SELECTOR, '[placeholder="请输入手机号码"]').send_keys("18911717124") driver.find_elements(By.XPATH, '//span[@class="ant-checkbox-inner"]')[0].click() driver.find_elements(By.XPATH, '//span[@class="ant-checkbox-inner"]')[1].click() comfirmdel = driver.find_element(By.XPATH, '//*[contains(text(), "获取验证码")]') driver.execute_script("arguments[0].click();", comfirmdel) w = driver.find_element(By.XPATH, '// *[ @ id = "nc_1_n1z"]') sleep(1) t = ActionChains(driver).click_and_hold(w) sleep(1) tracks.pop(-1) tracks.append(300-sum(tracks)) for item in tracks: t.move_by_offset(xoffset=item, yoffset=random.randint(-5, 5)).perform() # # 稳定一秒再松开 sleep(10) # webdriver.ActionChains(driver).release(w).perform() # sleep(1) except Exception as s: print(s) finally: sleep(1) driver.quit() if __name__ == '__main__': login(get_track(300))
复制代码