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实现数通设备tftp备份配置文件示例
Apr 02 Python
python判断字符串是否包含子字符串的方法
Mar 24 Python
python中PIL安装简单教程
Apr 21 Python
python数据类型_字符串常用操作(详解)
May 30 Python
Python字典,函数,全局变量代码解析
Dec 18 Python
python简单实现操作Mysql数据库
Jan 29 Python
Pycharm之快速定位到某行快捷键的方法
Jan 20 Python
python实现的自动发送消息功能详解
Aug 15 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
python 常见的反爬虫策略
Sep 27 Python
python库Tsmoothie模块数据平滑化异常点抓取
Jun 10 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连接access数据库
2008/03/27 PHP
php 函数使用方法与函数定义方法
2010/05/09 PHP
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
php读取csc文件并输出
2015/05/21 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
PHP7新特性
2021/03/09 PHP
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
基于python的七种经典排序算法(推荐)
2016/12/08 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
求职简历的自我评价怎样写好
2013/10/07 职场文书
自我评价格式
2014/01/06 职场文书
JAVA程序员自荐书
2014/01/30 职场文书
技术比武方案
2014/05/19 职场文书
cf战队收人口号
2014/06/21 职场文书
英语复习计划
2015/01/19 职场文书
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技