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实现的去除win下文本文件头部BOM的代码
Feb 10 Python
详解Python中for循环的使用
Apr 14 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
Feb 26 Python
解决Pycharm中import时无法识别自己写的程序方法
May 18 Python
点球小游戏python脚本
May 22 Python
python pandas库中DataFrame对行和列的操作实例讲解
Jun 09 Python
Python函数装饰器实现方法详解
Dec 22 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
Python使用lambda表达式对字典排序操作示例
Jul 25 Python
修改Pandas的行或列的名字(重命名)
Dec 18 Python
Jupyter安装链接aconda实现过程图解
Nov 02 Python
利用Python实现模拟登录知乎
May 25 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与java通过socket通信的实现代码
2013/10/21 PHP
php生成gif动画的方法
2015/11/05 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
PDO::inTransaction讲解
2019/01/28 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
js打印纸函数代码(递归)
2010/06/18 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
[53:10]完美世界DOTA2联赛决赛日 FTD vs GXR 第二场 11.08
2020/11/11 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
Python 文件操作的详解及实例
2017/09/18 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
办公室经理岗位职责
2014/01/01 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
我爱我校演讲稿
2014/05/21 职场文书
公司承诺书怎么写
2014/05/24 职场文书
5s标语大全
2014/06/23 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
食品安全责任书范本
2015/05/09 职场文书
Java集成swagger文档组件
2021/06/28 Java/Android
javascript之Object.assign()的痛点分析
2022/03/03 Javascript
MySql数据库 查询时间序列间隔
2022/05/11 MySQL