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基于列表list实现的CRUD操作功能示例
Jan 05 Python
python机器学习理论与实战(二)决策树
Jan 19 Python
分享一下Python数据分析常用的8款工具
Apr 29 Python
将python运行结果保存至本地文件中的示例讲解
Jul 11 Python
Django Rest framework权限的详细用法
Jul 25 Python
python绘图模块matplotlib示例详解
Jul 26 Python
Mac安装python3的方法步骤
Aug 09 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
Jan 10 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
Python任务自动化工具tox使用教程
Mar 17 Python
Python爬虫爬取、解析数据操作示例
Mar 27 Python
python中altair可视化库实例用法
Jan 26 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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
php注册登录系统简化版
2020/12/28 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
Smarty保留变量用法分析
2016/05/23 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
Javascript模块化编程详解
2014/12/01 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
微信小程序如何使用云开发
2019/05/17 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
Python采集腾讯新闻实例
2014/07/10 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
Python类的继承和多态代码详解
2017/12/27 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
用python做游戏的细节详解
2019/06/25 Python
Python交互式图形编程的实现
2019/07/25 Python
深入学习python多线程与GIL
2019/08/26 Python
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
小学生运动会报道稿
2014/09/12 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js
MySQL创建管理LIST分区
2022/04/13 MySQL