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解决计数原理问题的方法
Aug 04 Python
python 捕获 shell/bash 脚本的输出结果实例
Jan 04 Python
Python用threading实现多线程详解
Feb 03 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
windows下python和pip安装教程
May 25 Python
Python中pip更新和三方插件安装说明
Jul 08 Python
python中while和for的区别总结
Jun 28 Python
python单例模式的多种实现方法
Jul 26 Python
用Python将Excel数据导入到SQL Server的例子
Aug 24 Python
Python模块zipfile原理及使用方法详解
Aug 04 Python
Python如何telnet到网络设备
Feb 18 Python
手把手教你使用TensorFlow2实现RNN
Jul 15 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命令行用法入门实例教程
2014/10/27 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
php创建类并调用的实例方法
2019/09/25 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
2017/01/19 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
vue 运用mock数据的示例代码
2017/11/07 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
JavaScript实现网页跨年倒计时
2020/12/02 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
pyside写ui界面入门示例
2014/01/22 Python
python实现360皮肤按钮控件示例
2014/02/21 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
python实现字符串加密成纯数字
2019/03/19 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
numba提升python运行速度的实例方法
2021/01/25 Python
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
优秀班干部事迹材料
2014/01/26 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
报告会主持词
2014/04/02 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
2015年度党员个人总结
2015/02/14 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
SQL Server Agent 服务无法启动
2022/04/20 SQL Server