python模拟鼠标拖动滑块_Python+Selenium 拖动滑块 (一)

在我们登录账号中常常会遇到各种验证码,如图片验证码,拖动滑块验证.....

滑块验证码只需要用户使用鼠标将滑块从某个位置拖动到另一个位置即可。程序通过记录用户拖动滑块的轨迹,这一串的轨迹数据采用模式识别的手段就可以判断出这是否是真人在操作。

滑块验证通常需要使滑块按照正常的加速度进行拖动,停靠在一个合适的位置,在使用selenium时通常需要设置一个合适的滑动加速度来使自己伪装的更像人类用户而不是计算机。

from selenium.webdriver import ActionChains这个类基本能够满足我们所有对鼠标操作的需求。

我们使用企查查这个网站来实践一下

from selenium.webdriver import ActionChains

from selenium import webdriver

import time

driver=webdriver.Chrome()

driver.get("https://www.qichacha.com/user_login")

time.sleep(1)

首先需要选中滑块,才能进行下一步操作

driver.find_element_by_xpath('//*[@id="normalLogin"]').click()

time.sleep(1)

huakuai=driver.find_element_by_xpath('//*[@id="nc_1_n1z"]')

需要自己设置一个函数来生成一个轨迹来模拟人类用户行为

def get_track(distance): # distance为传入的总距离

# 移动轨迹

track=[]

# 当前位移

current=0

# 减速阈值

mid=distance*4/5

# 计算间隔

t=0.2

# 初速度

v=1

while current

if current

# 加速度为2

a=4

else:

# 加速度为-2

a=-3

v0=v

# 当前速度

v=v0+a*t

# 移动距离

move=v0*t+1/2*a*t*t

# 当前位移

current+=move

# 加入轨迹

track.append(round(move))

return track

拖动滑块进行测试,由于测试没有输入账号密码...

drag_and_drop(source, target)拖拽

drag_and_drop_by_offset(source, xoffset, yoffset)将目标拖动到指定的位置

def move_to_gap(slider,tracks): # slider是要移动的滑块,tracks是要传入的移动轨迹

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

for x in tracks:

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

time.sleep(0.5)

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

if __name__ == '__main__':

move_to_gap(huakuai,get_track(340))

后面是全部代码,由于没有缺口位置,不需要设置到合适停止到正确的位置

from selenium.webdriver import ActionChains

from selenium import webdriver

import time

driver=webdriver.Chrome()

driver.get("https://www.qichacha.com/user_login")

time.sleep(1)

driver.find_element_by_xpath('//*[@id="normalLogin"]').click()

time.sleep(1)

huakuai=driver.find_element_by_xpath('//*[@id="nc_1_n1z"]')

def get_track(distance): # distance为传入的总距离

# 移动轨迹

track=[]

# 当前位移

current=0

# 减速阈值

mid=distance*4/5

# 计算间隔

t=0.2

# 初速度

v=1

while current

if current

# 加速度为2

a=4

else:

# 加速度为-2

a=-3

v0=v

# 当前速度

v=v0+a*t

# 移动距离

move=v0*t+1/2*a*t*t

# 当前位移

current+=move

# 加入轨迹

track.append(round(move))

return track

def move_to_gap(slider,tracks): # slider是要移动的滑块,tracks是要传入的移动轨迹

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

for x in tracks:

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

time.sleep(0.5)

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

if __name__ == '__main__':

move_to_gap(huakuai,get_track(340))

相关资源:模拟鼠标移动轨迹
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页