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操作SQLite简明教程
Jul 10 Python
跟老齐学Python之有容乃大的list(1)
Sep 14 Python
零基础写python爬虫之打包生成exe文件
Nov 06 Python
Python实现list反转实例汇总
Nov 11 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 Python
详解django的serializer序列化model几种方法
Oct 16 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
Feb 22 Python
Django框架模板的使用方法示例
May 25 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
jenkins+python自动化测试持续集成教程
May 12 Python
Python drop方法删除列之inplace参数实例
Jun 27 Python
Python3获取cookie常用三种方案
Oct 05 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 高手之路(三)
2006/10/09 PHP
php的memcache类分享(memcache队列)
2014/03/26 PHP
php自定义分页类完整实例
2015/12/25 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
PHP fopen函数用法实例讲解
2019/02/15 PHP
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
通用JS事件写法实现代码
2009/01/07 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
教你如何编写Vue.js的单元测试的方法
2018/10/17 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
[33:17]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
Python Gitlab Api 使用方法
2019/08/28 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
python scatter函数用法实例详解
2020/02/11 Python
积极分子思想汇报
2014/01/04 职场文书
实验室的标语
2014/06/20 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript