爬虫selenium中动作链接ActionChains
一.基本语法
- 生成一个动作actions=ActionChains(driver)
- 动作添加方法actions.方法
- 执行 actions.perform()
二.方法列表
click(on_element=None) ——单击鼠标左键
click_and_hold(on_element=None) ——点击鼠标左键,不松开
context_click(on_element=None) ——点击鼠标右键
double_click(on_element=None) ——双击鼠标左键
drag_and_drop(source, target) ——拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
三.拖动实现(滑块验证会用到移动)
两种实现方式
#前面无聊的代码我就略咯
#方式一:
actions=ActionChains(driver) #拿到动作链对象
actions.drag_and_drop(sourse,target).perform() #其中sourse为起始元素对象,target为结束位置元素对象
#一般用于把一个图片从一个地方拖到另外个元素地方
#方式二:
actions=ActionChains(driver) #拿到动作链对象
actions.click_and_hold(移动的对象).perform()
actions.move_by_offset(x,y).perform() #x为移动水平距离,y为移动垂直距离,正负代表左右或者上下
actions.release().perform() #松开,这一步别忘了
四.类人滑动滑块
给个段代码哈
def get_stacks(distance): #distance为滑动的总长度
distance += 20
'''
匀加速\减速运行
v = v0 + a * t
位移:
s = v * t + 0.5 * a * (t**2)
'''
# 初速度
v0 = 0
# 加减速度列表
a_list = [20,40, 5]
# 时间
t = 0.1
# 初始位置
s = 0
# 向前滑动轨迹
forward_stacks = []
mid = distance * 3 / 5
while s < distance:
if s < mid:
a = a_list[random.randint(0, 1)]
else:
a = -a_list[2]
v = v0
stack = v * t + 0.5 * a * (t ** 2)
# 每次拿到的位移
stack = round(stack)
s += stack
v0 = v + a * t
forward_stacks.append(stack)
back_stacks = [-1, -1, -2, -3, -2, -3, -2, -2, -3, -1]
return {'forward_stacks': forward_stacks, 'back_stacks': back_stacks}
stacks = get_stacks(60)
print(stacks)
forward_stacks = stacks['forward_stacks']
back_stacks = stacks['back_stacks']
slider_button = driver.find_element_by_class_name('滑动东西的类名')
ActionChains(driver).click_and_hold(slider_button).perform()
for forward_stack in forward_stacks:
ActionChains(driver).move_by_offset(xoffset=forward_stack, yoffset=0).perform()
for back_stack in back_stacks:
ActionChains(driver).move_by_offset(xoffset=back_stack, yoffset=0).perform()
time.sleep(0.3)
ActionChains(driver).move_by_offset(xoffset=5, yoffset=0).perform()
time.sleep(0.2)
ActionChains(driver).move_by_offset(xoffset=-5, yoffset=0).perform()
time.sleep(0.1)
ActionChains(driver).move_by_offset(xoffset=1, yoffset=0).perform()
time.sleep(0.1)
ActionChains(driver).move_by_offset(xoffset=-1, yoffset=0).perform()
ActionChains(driver).release().perform()
爬虫selenium中动作链接ActionChains的更多相关文章
- selenium中动作链的使用
一.问题 我们有时候在使用selenium的时候,会遇到悬停后点击元素的操作,因此需要一个动作链来完成这个功能. 二.解决 从selenium的包中导入actionchains函数,利用xpath找到 ...
- selenium的动作链 actionchains
click(on_element=None) ——单击鼠标左键 click_and_hold(on_element=None) ——点击鼠标左键,不松开 context_click(on_elemen ...
- Python爬虫selenium中get_cookies()和add_cookie()的用法
在用selenium爬取网页的时候,有时候需要登陆,这时候用selenium获取cookie和携带cookie是很方便的,获取cookie可以通过内置的函数get_cookies(),它得到的是一组c ...
- Selenium中配置链接使用FTP服务
Enable the default report solution Step1: Create a suite listener and add codes into it, please watc ...
- 爬虫selenium中截图
一.整个页面截图 driver = webdriver.Chrome() driver.get(url) diver.save_screenshot('保存路径') 二.局部截图 driver = w ...
- Selenium之动作链(ActionChains)
用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等.而selenium给我们提供了一个类来处理这类事件——ActionChains se ...
- [爬虫学习笔记]用于提取网页中所有链接的 Extractor 模块
Extractor的工作是从下载的网页中将它包含的所有URL提取出来.这是个细致的工作,你需要考虑到所有可能的url的样式,比如网页中常常会包含相对路径的url,提取的时候需要将它转换 ...
- 爬虫-----selenium模块自动爬取网页资源
selenium介绍与使用 1 selenium介绍 什么是selenium?selenium是Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作. sel ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍
这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~同时CSDN总是屏蔽这篇文章,再加上最近 ...
随机推荐
- jfinal shiro共享
和上一篇tomcat sexxion共享一样,用的也是redis 代码: package com.test.shiro; import com.jfinal.log.Log; import com.j ...
- keras模型保存和权重保存
模型保存和读取(包括权重): model.save('./model.h5') from keras import models model = models.load_model(./model.h ...
- Linux服务器部署.Net Core笔记:三、CentOS 7上安装.NetCore运行环境
1.要开始安装 .NET,您需要注册 Microsoft 签名密钥并添加 Microsoft 产品提要.每台机器只需要做一次. 打开命令提示符并运行以下命令:sudo rpm -Uvh https:/ ...
- IEEE754 32位浮点数表示范围
6.1浮点数的数值范围 根据上面的探讨,浮点数可以表示-∞到+∞,这只是一种特殊情况,显然不是我们想要的数值范围. 以32位单精度浮点数为例,阶码E由8位表示,取值范围为0-255,去除0和255这两 ...
- 封装和@property
封装和@property 一.复习 1.接口类和抽象类 python中没有接口类,有抽象类,abc模块中的metaclass=ABCMeta,@abstructmethod,本质是做代码规范用的,希望 ...
- React 组件的生命周期方法
React 组件的生命周期方法 按渲染顺序: 1: componentWillMount() – 在渲染之前执行,在客户端和服务器端都会执行. 2: componentDidMount() – 仅在第 ...
- 微信支付 第一篇 JSAPI 支付配置与获取 OpenID
开通微信支付支付产品 首先要在微信支付申请成为 微信支付商户. 选择开通具体的支付产品 成为微信支付商户后在管理后台选择微信支付中的具体支付产品并申请开通如 JSAPI . 将支付商户与公众号关联 这 ...
- Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战
Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...
- 为Dynamics 365 USD设置打开调试面板的自定义快捷键
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 你真的理解Java 注解吗?
你真的理解Java 注解吗? 1.什么是注解? 官方解释: Java 注解用于为 Java 代码提供元数据.作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的.Java ...