【Selenium-WebDriver问题篇】Selenium实现元素的拖拽(java版)(转)
https://blog.csdn.net/u010503127/article/details/51381284
Selenium实现元素的拖拽(java版)
【前言】
自从淘宝网登陆页出现滑块验证,很多其他网站也在模仿这个滑块验证,在防止机器人恶意注册方面确实起到一定的作用。
【关于滑块的原理】:
【滑块拖动实现过程】:
1,判断验证码在什么时候出现。
2,验证码出现时,判断何时加载完成。
3,确定验证码的位置。
4,用鼠标模拟拖动验证码。
5,检验本次操作是否成功
【滑块实现代码范例】:
【前言】
自从淘宝网登陆页出现滑块验证,很多其他网站也在模仿这个滑块验证,在防止机器人恶意注册方面确实起到一定的作用。
【关于滑块的原理】:
响应时间,拖拽速度,时间,位置,轨迹,重试次数等。这些因素能够构成一个采样结果或者辨识特性。根据这些特性可以猜测,你是人或者其他东西。或者能够猜测,你是谁或者什么东西。猜测结果中会涉及到另一个问题,那就是概率,比如80%的概率是人,那么就会放行,%的概率是人,那就会跳转到更复杂的验证或者拒绝放行等。阈值的设定就需要仔细研究了。
【滑块拖动实现过程】:
,判断验证码在什么时候出现。
,验证码出现时,判断何时加载完成。
,确定验证码的位置。
,用鼠标模拟拖动验证码。
,检验本次操作是否成功
【滑块实现代码范例】:
[java] view plain copy
//新增判断是否存在滑块验证
try{
admcDriver.findElement(By.id("sillerVerifyCode")).click();//sillerVerifyCode为滑块出现时的id
logger.info("滑块元素已经存在!!!");
Actions action = new Actions(admcDriver);
//获取滑动滑块的标签元素
WebElement source = admcDriver.findElement(By.xpath("//div[@class='dt_child_content']/div[3]"));
//确保每次拖动的像素不同,故而使用随机数
action.clickAndHold(source).moveByOffset((int)(Math.random()*)+, );
Thread.sleep();
action.clickAndHold(source).moveByOffset((int)(Math.random()*)+, );
Thread.sleep();
action.clickAndHold(source).moveByOffset((int)(Math.random()*)+, );
Thread.sleep();
action.clickAndHold(source).moveByOffset((int)(Math.random()*)+, );
Thread.sleep();
//拖动完释放鼠标
action.moveToElement(source).release();
//组织完这些一系列的步骤,然后开始真实执行操作
Action actions = action.build();
actions.perform();
}catch(ElementNotVisibleException e1){
logger.info("滑块元素不存在");
}
【Selenium-WebDriver问题篇】Selenium实现元素的拖拽(java版)(转)的更多相关文章
- 第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理
温馨提示: 这篇文章是依赖前几篇的文章的. 第一篇:微信公众平台开发实战之了解微信公众平台基础知识以及资料准备 第二篇 :微信公众平台开发实战之开启开发者模式,接入微信公众平台开发 第三篇 :微信公众 ...
- 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容
第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...
- 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...
- 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单
我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...
- 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token
一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...
- 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装
微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...
- 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发
第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...
- 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备
相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...
随机推荐
- VS2013 未找到与约束。。。
新建项目或打开项目时,VS2013 未找到与约束...问题: 解决方案:控制面板>程序>程序和功能 找到如下选中软件右击修复 即可(修复前需关闭VS2013)
- eclipse卡死在search for main types 20 files to index
run as application时,提示search for main types 20 files to index (*/*/*.jar)某个maven依赖jar出了问题,找不到main方法 ...
- 基于MVC4+EasyUI的Web开发框架形成之旅(5)--框架总体界面介绍
在前面介绍了一些关于最新基于MVC4+EasyUI的Web开发框架文章,虽然Web开发框架的相关技术文章会随着技术的探讨一直写下去,不过这个系列的文章,到这里做一个总结,展示一下整体基于MVC4+Ea ...
- ubuntu-docker入门到放弃(三)images镜像管理
docker虽然有公共的镜像管理hub,但是我们在日常的使用中,由于不同的业务场景,不同的架构,公共的镜像库不能满足需求,并且出于安全考虑,会搭建私有的docker hub镜像库来管理自己的image ...
- linux找不到动态链接库 .so文件的解决方法
linux找不到动态链接库 .so文件的解决方法 如果使用自己手动生成的动态链接库.so文件,但是这个.so文件,没有加入库文件搜索路劲中,程序运行时可能会出现找不到动态链接库的情形. 可以通过ldd ...
- tomcat源码 Connector
Connector容器主要负责解析socket请求,在tomcat中的源码位于org.apache.catalina.connector和org.apache.coyote包路径下:通过上两节的分析, ...
- 解决搜狗高速模式及设置页面打不开的问题DisableFeature.reg
搜狗浏览器安装问题1.安装的时候要选择自定义安装,去掉参加用户体验计划的√,否则可能安装不上.2.搜狗sogou_explorer_7.0_0111.exe,设置页面se://settings/?ca ...
- 【占位符替换】替换String中的占位符标志位{placeholder}
概述 占位符替换, 占位符表示为:{placeholder}; 示例:替换如下{xxx}占位符中的内容 "名字:{name},年龄:{age},学校:{school}" 提供了两种 ...
- react路由嵌套
所谓的嵌套路由就是在某些以及路由下面存在二级路由,这些二级路由除了公用一级路由导航模块外,还公用当前的二级路由的导航模块,也就是部分进行了切换,要实现嵌套路由,首先回顾之前的内容,实现基本的react ...
- NodeJs之配置文件管理
查询了一些资料,我使用nodejs的object作为配置文件,首先定义一个module config.js: var config = { uploadPath: "E:\\" } ...