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 相关文章推荐
在Django的视图中使用数据库查询的方法
Jul 16 Python
python实现ID3决策树算法
Dec 20 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 Python
详解Python基础random模块随机数的生成
Mar 23 Python
python字符串和常用数据结构知识总结
May 21 Python
TensorFlow tf.nn.max_pool实现池化操作方式
Jan 04 Python
pytorch进行上采样的种类实例
Feb 18 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
浅析python中的del用法
Sep 02 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
python 利用matplotlib在3D空间中绘制平面的案例
Feb 06 Python
Python多个MP4合成视频的实现方法
Jul 16 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中检查文件或目录是否存在的代码小结
2012/10/22 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
python 不关闭控制台的实现方法
2011/10/23 Python
Python base64编码解码实例
2015/06/21 Python
详解Python3的TFTP文件传输
2018/06/26 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
如何在存储过程中使用Loop
2016/01/05 面试题
个人实用的自我评价范文
2013/11/23 职场文书
大学军训通讯稿
2014/01/13 职场文书
小学数学课后反思
2014/04/23 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
机电系毕业生求职信
2014/07/11 职场文书
授权委托书范文
2014/07/31 职场文书
离婚案件原告代理词
2015/05/23 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
为什么中国式养孩子很累?
2019/08/07 职场文书
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python