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))
python语法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库