一.项目背景
滑块验证码,即用户使用鼠标将滑块从某个位置拖动到另一个位置,服务器通过用户拖动滑块的轨迹来判断当前用户是否为人类,本文主要介绍如何利用Selenium框架模拟滑块移动。
上篇Selenium模拟滑块拖动我们介绍了模拟豆瓣滑块登录,但是尚未成功,主要原因是豆瓣会检测Chromium层指纹,需要抹除该指纹才能登录成功,这块相关知识点我们就不分享了。本篇在之前基础上改进,增加了轮廓检测部分,适用性更广。
二.实现过程
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.构建位置检测函数
#获取图片位置
def get_pos(img):
#高斯滤波
blurred=cv.GaussianBlur(img,(5,5),0)
#边缘检测
canny=cv.Canny(blurred,200,400)
#提取边界的拓扑序列
contours,hierarchy=cv.findContours(canny,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)
#遍历点集
for i,contour in enumerate(contours):
m=cv.moments(contour)
if m['m00']==0:
cx=cy=0
else:
cx,cy=m['m10']/m['m00'],m['m01']/m['m00']
if 6000(contour)<8000>
3.模拟滑块移动
from selenium import webdriver
from selenium.webdriver import ActionChains
import time
from selenium.webdriver.chrome import options
import requests
import cv2 as cv
#初始化选项
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')
#获取滑块
element=browser.find_element_by_xpath('//*[@id="tcaptcha_drag_thumb"]')
#在滑块上暂停
ActionChains(browser).click_and_hold(on_element=element).perform()
#拖动滑块180像素
ActionChains(browser).move_to_element_with_offset(to_element=element,xoffset=distance[0]/2-25,yoffset=0).perform()
#拖动剩余像素
tracks=get_tracks(25)
#遍历梅一段距离
for track in tracks:
#滑块移动响应距离
ActionChains(browser).move_by_offset(xoffset=track,yoffset=0).perform()
#休息1s中
time.sleep(1)
#释放滑块
ActionChains(browser).release().perform()
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
服务器
+关注
关注
12文章
9016浏览量
85171 -
框架
+关注
关注
0文章
398浏览量
17430 -
轨迹
+关注
关注
0文章
46浏览量
9263
发布评论请先 登录
相关推荐
想将CY8CMBR3106S用于2个滑块,这个IC是否支持2个滑块同时工作?
我想将 CY8CMBR3106S 用于 2 个滑块,这个 IC 是否支持 2 个滑块同时工作,我可以同时触摸它们并获得触摸数据?
谢谢。
发表于 02-26 06:41
【安富莱原创】【STemWin教程】第55章 SLIDER-滑块控件
`第55章 SLIDER-滑块控件 本期教程讲解STemWin支持的滑块控件。 55. 1滑块控件介绍 55. 2 官方DIALOG_SliderColor实例 55. 3 使用官方
发表于 05-20 10:53
第55章 SLIDER-滑块控件
转stemwin教程 本期教程讲解STemWin支持的滑块控件。 55. 1滑块控件介绍 55. 2 官方DIALOG_SliderColor实例 55. 3 使用官方GUIBulder建立滑
发表于 10-18 11:20
滑块删除对话框滑块值会怎么变化?
我想问一个滑块的问题,你在滑动滑块的时候,它的值是会变化的,那么当删除这个对话框(滑块创建在这个对话框上面)以后,滑块的值会怎么变化呢?从我自己试验的结果来看,这个值好像是随机的。 希
发表于 05-09 01:16
如何在Python中使用Selenium
行1:从selenium模块导入webdriver · 代码行2:从硒模块导入键 · 代码行3:用户是一个空白变量,将用于存储用户名的值。 · 代码行4:pwd也是一个空白变量。这将用于存储密码
发表于 09-08 18:17
使用handleDragEvent和handleClickEvent时,点击和拖动的按钮和滑块等小部件不起作用怎么解决?
您好,当我使用handleDragEvent和handleClickEvent时,需要点击和拖动的按钮和滑块等小部件不再起作用。我怎么解决这个问题?
发表于 01-05 08:08
电力拖动系统基础
电力拖动系统基础1.了解电力拖动系统的基本组成;2. 掌握电力拖动系统运动方程式;3. 熟悉转矩与飞轮矩的折算方法;4. 掌握生产机械的负载转矩特性的分类;5.
发表于 11-19 22:01
•0次下载
广州大彩串口屏工程技术笔记-进度条控件和滑块控件应用
适合经济型、基本型、物联型、86盒系列等串口屏产品。
进度条控件,可以比较形象地对数据进行显示反映外部上传到屏幕的数据真实现状。
滑块控件,通过对滑块的拖动,可以对外部设备进行控制,比如控制灯的亮度、控制电动
发表于 05-25 14:03
•5次下载
一个openharmony滑块/搜索栏案例
一个openharmony滑块/搜索栏,但不同:-) 依赖项 { 实现‘ io 。开放和谐。tpc 。第三库:ohos - slidr:1.0 。2 ’ } final Slidr slidr
发表于 04-01 09:12
•1次下载
Selenium在自动化中有何用处
Selenium是一个开源的自动化测试工具,可以轻松自动化Web应用程序。它还能够自动化我们的功能测试任务。Selenium是一组软件工具,为 测试自动化提供不同级别的支持。Selenium包括
Python中使用selenium的准备工作
定义 Selenium是一个用于Web应用程序测试的自动化测试工具。使用Selenium可以驱动浏览器执行特定的动作,如点击、下拉等操作,还可以获取页面信息,断言页面是否如预期。在工作中我们可以用
评论