Java selenium操作下拉滚动条的几种方法
数据采集中,经常遇到动态加载的数据,我们经常使用selenium模拟浏览器操作,需要多次下拉刷新页面才能采集到所有的数据,就此总结了几种selenium操作下拉滚动条的几种方法
我这里演示的是Java版本的,使用chromedriver,当然你可以换成python或其他语言,浏览器用firefox或者phantomjs(无头浏览器),大部分都是适用的,不同浏览器有略微的差异。
初始化一个浏览器
首先要允许浏览器运行js脚本
DesiredCapabilities sCaps = new DesiredCapabilities();
sCaps.setJavascriptEnabled(true);
System.getProperties().setProperty("webdriver.chrome.driver", "D:/tool/chromedriver.exe");
WebDriver webDriver = new ChromeDriver(sCaps);
1.直接操作页面
#下拉到页面底部
((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0,document.body.scrollHeight)");
#上拉到页面顶端
((JavascriptExecutor) webDriver).executeScript("window.scrollTo(document.body.scrollHeight,0)");
或:
#下拉到页面1000位置
((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0,1000)");
#上拉到页面顶端 0,0位置
((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0,0)");
### 2.拖动到页面元素位置
经过测试这种方式最靠谱,在Chrome和phantomjs都测试通过,而其他方式有些网站在Chrome中没问题,但到了phantomjs中就有问题了,页面根本不动。
不过这几种方式对大部分网站应该还是都可以的。
比如要把页面拖动到id为test的元素位置,当然findElement方法还支持xpath和css选择器等多种方式
String script = "return arguments[0].scrollIntoView();";
WebElement element = webDriver.findElement(By.id("#test"));
((JavascriptExecutor) webDriver).executeScript(script, element);
3. 发送PAGE_DOWN、END等键盘事件
- END:可以让页面直接下拉到底
- HOME:上拉到顶端
- PAGE_DOWN:小幅度下拉
org.openqa.selenium.Keys 模块中常用的变量属性 含义
- Keys.DOWN, Keys.UP, Keys.LEFT,Keys.RIGHT 键盘箭头键
- Keys.ENTER, Keys.RETURN 回车和换行键
- Keys.HOME, Keys.END,
- Keys.PAGE_DOWN,Keys.PAGE_UP
- Home 键、End 键、PageUp 键和Page Down 键
- Keys.ESCAPE, Keys.BACK_SPACE,Keys.DELETE Esc、Backspace 和字母键
- Keys.F1, Keys.F2, . . . , Keys.F12 键盘顶部的F1 到F12 键
- Keys.TAB Tab 键
- ...
WebElement webElement = webDriver.findElement(By.cssSelector("body"));webElement.click(); // 有的时候必须点击一下,下拉才能生效(有的网站是这样,原因未找到)
#小幅度下拉webElement.sendKeys(Keys.PAGE_DOWN);
#或者直接下拉到底webElement.sendKeys(Keys.END);
查看源码可以看出来,selenium封装了键盘上的Key,意思是我们可以通过sendKeys发送键盘事件,比如搜索的时候点击ENTER事件
public enum Keys implements CharSequence {NULL('\ue000'),CANCEL('\ue001'),HELP('\ue002'),BACK_SPACE('\ue003'),TAB('\ue004'),CLEAR('\ue005'),RETURN('\ue006'),ENTER('\ue007'),SHIFT('\ue008'),LEFT_SHIFT(SHIFT),CONTROL('\ue009'),LEFT_CONTROL(CONTROL),ALT('\ue00a'),LEFT_ALT(ALT),PAUSE('\ue00b'),ESCAPE('\ue00c'),SPACE('\ue00d'),PAGE_UP('\ue00e'),PAGE_DOWN('\ue00f'),END('\ue010'),HOME('\ue011'),LEFT('\ue012'),ARROW_LEFT(LEFT),UP('\ue013'),ARROW_UP(UP),RIGHT('\ue014'),ARROW_RIGHT(RIGHT),DOWN('\ue015'),ARROW_DOWN(DOWN),INSERT('\ue016'),DELETE('\ue017'),SEMICOLON('\ue018'),EQUALS('\ue019'),NUMPAD0('\ue01a'),NUMPAD1('\ue01b'),NUMPAD2('\ue01c'),NUMPAD3('\ue01d'),NUMPAD4('\ue01e'),NUMPAD5('\ue01f'),NUMPAD6('\ue020'),NUMPAD7('\ue021'),NUMPAD8('\ue022'),NUMPAD9('\ue023'),MULTIPLY('\ue024'),ADD('\ue025'),SEPARATOR('\ue026'),SUBTRACT('\ue027'),DECIMAL('\ue028'),DIVIDE('\ue029'),F1('\ue031'),F2('\ue032'),F3('\ue033'),F4('\ue034'),F5('\ue035'),F6('\ue036'),F7('\ue037'),F8('\ue038'),F9('\ue039'),F10('\ue03a'),F11('\ue03b'),F12('\ue03c'),META('\ue03d'),COMMAND(META),ZENKAKU_HANKAKU('\ue040');private final char keyCode;...
}
一个完整的示例
public class SeleniumTest {public static void main(String[] args) throws Exception {System.setProperty("webdriver.chrome.driver", "D:/tool/chromedriver.exe");WebDriver webDriver = new ChromeDriver();webDriver.get("https://m.weibo.cn/");Thread.sleep(1000);for (int i = 0; i < 10; i++) {System.out.println("sleep 1s");Thread.sleep(1000);((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0,"+(i * 500)+")");}}
}
Java selenium操作下拉滚动条的几种方法相关推荐
- python滚动条_python中selenium操作下拉滚动条的几种方法汇总
UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等:但有一种是在当前显示的页面元素不可见,拖动下拉条后元素就出来了. 比如下面这样一个网页 ...
- python select模块安装_python+selenium select下拉选择框定位处理方法
一.前言 总结一下python+selenium select下拉选择框定位处理的两种方式,以备后续使用时查询: 二.直接定位(XPath) 使用Firebug找到需要定位到的元素,直接右键复制XPa ...
- java excel 数据有效性_Excel设置数据有效性实现单元格下拉菜单的3种方法
Excel设置数据有效性实现单元格下拉菜单的3种方法 一.直接输入: 1.选择要设置的单元格,譬如A1单元格: 2.选择菜单栏的"数据"→"有效性"→出现&qu ...
- 设置数据有效性实现单元格下拉菜单的3种方法
设置数据有效性实现单元格下拉菜单的3种方法 一.直接输入: 1.选择要设置的单元格,譬如A1单元格: 2.选择菜单栏的"数据"→"有效性"→出现 ...
- python爬虫selenium操作下拉框详解
使用python爬虫的selenium操作网页的下拉框. 以该网站为例:https://www.17sucai.com/pins/demo-show?id=5926 该网页下存在多个可供测试的下拉框. ...
- 生成下拉框的几种方法总结——数据来源:数据库
下拉框的内容可以来自数据库.枚举.自己在程序中的定义等,我们今天来介绍一下先介绍来自数据库的数据进行下拉列表的实现. 使用场景:客户下拉列表等 1.确保数据库中有相关客户信息数据. 2.获取数据格式( ...
- 生成下拉框的几种方法总结——数据来源:枚举
上节介绍数据来源是数据库,这节介绍对枚举进行数据获取,形成下拉列表. 使用场景:某些状态值获取等,一般是数据量小,不需要在数据库中进行维护的数据集 1.前提要有枚举数据 package com.tes ...
- layui表单mysql_layui表单验证支持select下拉框的一种方法
背景: 1.layui在select选择后可以通过layui.event.call触发form.on('select(##)',function...)事件 2.layui的select被渲染后会变成 ...
- layui表单验证支持select下拉框的一种方法
背景: 1.layui在select选择后可以通过layui.event.call触发form.on('select(##)',function...)事件 2.layui的select被渲染后会变成 ...
最新文章
- Java提高——多线程(二)join、sleep、yield
- 一文告诉你 Java RMI 和 RPC 的区别!
- nRF5_SDK_12.3.0 编译micro-ecc摘要
- java外围设计_Java 编程(23 种设计模式)
- iOS HTML标签字符实体,转译字符串归类大全 【转载】
- easyui-textbox锁定按钮不锁定_不放水了!湖人G5改穿曼巴球衣,热火输定了,詹姆斯提前锁定FMVP!...
- css 外弧_css 弧度
- python图像库_Python常用图像处理库整理
- 重建控制文件--Rebuild controlfile
- 湘苗培优|从入门到精通
- 表格识别----基于模板的文字识别结果结构化处理技术
- winform textbox文本框根据内容自动调整高度
- 医护人员计算机专业培训内容,电子病历-住院医生工作站的前期培训
- html5dragw3c,HTML5拖拽功能drag
- java线程死锁例子_java死锁例子 - 无情小白龙的个人空间 - OSCHINA - 中文开源技术交流社区...
- Python超市进销存管理系统!老妈开超市有系统了!
- POJ 1565 Skew Binary
- python实现打电话功能_使用python代码调用三汇语音卡硬件拨打电话
- 赛效:WPS何把文档里竖排的文字变成横排的
- Java把xx年xx月xx日(星期x) 上午xx点xx分转换Date类型
热门文章
- android4.0 菜单,Android 4.0.4系统曝光 增新Power菜单
- java表达式由什么组成_必知必会之Lambda表达式
- 液晶电视服务器无响应时间,液晶电视响应速度时间是多少更好啊?
- Eclipse安装SVN插件方式简明介绍
- Java线程:线程的调度-优先级
- windows/linux服务器上java使用openoffice将word文档转换为PDF(亲测可用)
- ModelAndView学习笔记
- springboot 整合jsp过程中的一些问题
- NOIP 2016 迟来的满贯
- android AsyncTask介绍(转)