Selenium模拟怎么滑块拖动

描述

 

服务器

 

一.项目背景

   滑块验证码,即用户使用鼠标将滑块从某个位置拖动到另一个位置,服务器通过用户拖
动滑块的轨迹来判断当前用户是否为人类,本文主要介绍如何利用Selenium框架模拟滑块
移动。

 

二.实现过程

1.构建加速度函数

#获取距离值
def get_tracks(distance):
    '''
    模拟人的滑动行为,先匀加速后匀减速
    匀变速基本公式
    v=v0+at
    s=vot+1/2at2
    '''
    
    #初速度
    v=0
    #设置时间
    t=0.3
    #存储每段距离值
    tracks=[]
    #当前距离
    current=0
    #中间位置为4/5距离处
    mid=distance*4/5
    while current
2.构建请求头参数

from selenium import webdriver
from selenium.webdriver import ActionChains
import time
from selenium.webdriver.chrome import options


#初始化选项
opt=options.Options()
#设置user-agent
ua='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
#添加user-agent
opt.add_argument(f"user-agent={ua}")
# 去掉提示:Chrome正收到自动测试软件的控制
opt.add_argument('disable-infobars')
#关闭开发者模式
opt.add_experimental_option("useAutomationExtension", False)
#以键值对的形式加入参数
opt.add_experimental_option("excludeSwitches", ['enable-automation'])
#禁用启用Blink运行时的功能
opt.add_argument('--disable-blink-features=AutomationControlled'


3.模拟滑块移动

#请求网络
browser=webdriver.Chrome(r'./chromedriver.exe',chrome_options=opt)
#窗口最大化
browser.maximize_window()
#访问豆瓣官网
browser.get('https://www.douban.com')

#切换到iframe子页面
login_frame=browser.find_element_by_xpath('//*[@id="anony-reg-new"]/div/div[1]/iframe')
#获取登录按钮
browser.switch_to.frame(login_frame)

#密码登录
browser.find_element_by_xpath('/html/body/div[1]/div[1]/ul[1]/li[2]').click()
#用户名
browser.find_element_by_xpath('//*[@id="username"]').send_keys('xxx')
#密码
browser.find_element_by_xpath('//*[@id="password"]').send_keys('xxx')
#点击登录
browser.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[5]/a').click()
#睡眠4秒钟
time.sleep(4)


#获取下一个iframe
auth_frame=browser.find_element_by_xpath('//*[@id="tcaptcha_iframe"]')
browser.switch_to.frame(auth_frame)

#获取滑块
element=browser.find_element_by_xpath('//*[@id="tcaptcha_drag_button"]')
#在滑块上暂停
ActionChains(browser).click_and_hold(on_element=element).perform()
#拖动滑块180像素
ActionChains(browser).move_to_element_with_offset(to_element=element,xoffset=182,yoffset=0).perform()
#拖动剩余像素
tracks=get_tracks(19)
#遍历梅一段距离
for track in tracks:
    #滑块移动响应距离
    ActionChains(browser).move_by_offset(xoffset=track,yoffset=0).perform()
#休息1s中
time.sleep(1)
#释放滑块
ActionChains(browser).release().perform()

 

服务器


 

  •  
被豆瓣后台检测到我们用程序来模拟,具体原因和代码我们后期分享,感谢大家阅读。
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分