天天看点

python 模拟移动操作步骤讲解环节

滑动验证码破解大致流程为:

1 - 获取缺口图片与原图片

2 - 图像对比,得出缺口左上角坐标

3 - 构造轨迹算法

4 - 使用selenium模拟移动滑块

本篇主要针对模拟移动进行探讨。

使用工具:python,selenium,chromedriver,chrom浏览器

操作步骤讲解环节

下面就是喜闻乐见的操作步骤讲解环节了(´◔౪◔)

代码部分:

from selenium import webdriver           

复制

from selenium.webdriver.common.action_chains import ActionChains           

复制

import time           

复制

from selenium.webdriver.common.by import By           

复制

from selenium.webdriver.support.ui import WebDriverWait           

复制

from selenium.webdriver.support import expected_conditions as EC           

复制

# 导本地包的模块           

复制

import os           

复制

import sys           

复制

path = os.path.dirname(os.path.dirname(__file__))           

复制

sys.path.append(path)           

复制

import test           

复制

# 108这个值就是前面图像对比后得出的缺口左上角的横坐标           

复制

# 这里导入横坐标,然后获取先匀加速后匀减速的轨迹列表           

复制

track = test.get_track(108)           

复制

print(track)           

复制

driver = webdriver.Chrome()           

复制

url = 'http://www.geetest.com/Register'           

复制

wait = WebDriverWait(driver, 10, 0.5)           

复制

driver.get(url)           

复制

# 获取到指定的元素           

复制

Phone_Number = driver.find_element_by_xpath('/html/body/div[1]/div/div[8]/div/div[2]/div[1]/div[2]/div/div[2]/div[1]/input')           

复制

Verification_Code = driver.find_element_by_xpath('/html/body/div[1]/div/div[8]/div/div[2]/div[1]/div[2]/div/div[2]/div[2]/input')           

复制

Code_Button = driver.find_element_by_xpath('/html/body/div[1]/div/div[8]/div/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[1]/div')           

复制

Phone_Number.send_keys('12345678910')           

复制

Code_Button.click()           

复制

# 等待className为geetest_slider_button的元素在元素表中出现           

复制

slider = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_slider_button')))           

复制

# 点击和按住           

复制

ActionChains(driver).click_and_hold(slider).perform()           

复制

# 拖动           

复制

for x in track:           

复制

ActionChains(driver).move_by_offset(xoffset=x, yoffset=0).perform()           

复制

time.sleep(2)           

复制

# 松开鼠标           

复制

ActionChains(driver).release().perform()           

复制

time.sleep(2)           

复制

driver.quit()           

复制

**要点总结:

1 - 需要用到前面两篇文章的参数,图像对比得出缺口左上角的横坐标,然后使用轨迹移动算法,获取轨迹列表

2 - 使用selenium的鼠标操作方法完成滑块拖动**