Selenium及python实现滚动操作多种方法


Posted in Python onJuly 21, 2020

selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了。

  当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的。

这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上。滚动条是无法直接用定位工具来定位的。

selenium里面也没有直接的方法去控制滚动条,这时候只能借助J了,还好selenium提供了一个操作js的方法:execute_script(),可以直接执行js的脚本。

方法一:使用js脚本直接操作

# 滚动到顶部
  def scroll_top(self):
    if self.driver.name == "Chrome":
      js = "var q=document.body.scrollTop=0"
    else:
      js = "var q=document.documentElement.scrollTop=0"
    return self.driver.execute_script(js)

  # 滚动到底部
  def scroll_foot(self):
    if self.driver.name == "Chrome":
      js = "var q=document.body.scrollTop=1000"
    else:
      js = "var q=document.documentElement.scrollTop=1000"
    return self.driver.execute_script(js)

或者:

js="var q=document.getElementById('***').scrollTop=10000"
driver.execute_script(js)

这里的id为滚动条的id,但js中没有xpath的方法,所以滚动条没有id的网页此方法不适用

上面展示的是上下方向的滚动条,接下来介绍左右方向的滚动条的操作方法

#左右方向的滚动条可以使用window.scrollTo(左边距,上边距)方法
#example
js="window.scrollTo(200,1000)"
driver.execute_script(js)

方法二:使用 js 脚本拖动到指定位置

target = driver.find_element_by_id("***")
driver.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去

该方法可以将滚动条拖动到需要显示的元素位置,此方法用途比较广

方法三:根据页面显示进行变通,发送tab键

比如,密码是输入框,正常手工操作时,可以通过tab键会切换到密码框中,所以根据此思路,在python中也可以发送tab键来切换,使元素显示

from selenium.webdriver.common.keys import Keys
driver.find_element_by_id("****").send_keys(Keys.TAB)

方法四:

scrollTo函数

--scrollHeight 获取对象的滚动高度。

--scrollLeft 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离。

--scrollTop 设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离。

--scrollWidth 获取对象的滚动宽度

#滚动到底部
js = "window.scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js)
#滚动到顶部
js = "window.scrollTo(0,0)"
driver.execute_script(js)

其他:

robotframe work框架中,selenium2library里面有一个非常好用的功能Focus,会自动定位到元素。

Selenium及python实现滚动操作多种方法

代码块

driver.find_element_by_xpath("//div[@id='search']/div/span/input").click()
target = driver.find_element_by_id("_easyui_tree_17")
driver.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去
driver.find_element_by_xpath("//span[@class='tree-title'][text()='专业测试.修改后/123456']").click()

此方法与我们在python自己写的方法二)一致,工具给我们做了封装。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
常用python数据类型转换函数总结
Mar 11 Python
python多重继承实例
Oct 11 Python
Python加pyGame实现的简单拼图游戏实例
May 15 Python
Python中threading模块join函数用法实例分析
Jun 04 Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
Python自动发送邮件的方法实例总结
Dec 08 Python
django迁移数据库错误问题解决
Jul 29 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
Python3连接Mysql8.0遇到的问题及处理步骤
Feb 17 Python
Python操作MongoDb数据库流程详解
Mar 05 Python
python自动化调用百度api解决验证码
Apr 13 Python
如何在mac版pycharm选择python版本
Jul 21 #Python
python如何变换环境
Jul 21 #Python
零基础学Python之前需要学c语言吗
Jul 21 #Python
Python常驻任务实现接收外界参数代码解析
Jul 21 #Python
python中np是做什么的
Jul 21 #Python
从python读取sql的实例方法
Jul 21 #Python
python3.7调试的实例方法
Jul 21 #Python
You might like
详解PHP归并排序的实现
2016/10/18 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
原生js实现旋转木马轮播图效果
2017/02/27 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
2018/12/16 Javascript
layui表格数据重载
2019/07/27 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
js 获取扫码枪输入数据的方法
2020/06/10 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
struct和class的区别
2015/11/20 面试题
英文自荐信格式
2013/11/28 职场文书
女娲补天教学反思
2014/02/05 职场文书
优良学风班申请材料
2014/02/13 职场文书
高中教师个人总结
2015/02/10 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
湘江北去观后感
2015/06/15 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL
python解析照片拍摄时间进行图片整理
2022/07/23 Python