数据采集中,经常遇到动态加载的数据,我们经常使用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操作下拉滚动条的几种方法相关推荐

  1. python滚动条_python中selenium操作下拉滚动条的几种方法汇总

    UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等:但有一种是在当前显示的页面元素不可见,拖动下拉条后元素就出来了. 比如下面这样一个网页 ...

  2. python select模块安装_python+selenium select下拉选择框定位处理方法

    一.前言 总结一下python+selenium select下拉选择框定位处理的两种方式,以备后续使用时查询: 二.直接定位(XPath) 使用Firebug找到需要定位到的元素,直接右键复制XPa ...

  3. java excel 数据有效性_Excel设置数据有效性实现单元格下拉菜单的3种方法

    Excel设置数据有效性实现单元格下拉菜单的3种方法 一.直接输入: 1.选择要设置的单元格,譬如A1单元格: 2.选择菜单栏的"数据"→"有效性"→出现&qu ...

  4. 设置数据有效性实现单元格下拉菜单的3种方法

    设置数据有效性实现单元格下拉菜单的3种方法 一.直接输入:     1.选择要设置的单元格,譬如A1单元格:     2.选择菜单栏的"数据"→"有效性"→出现 ...

  5. python爬虫selenium操作下拉框详解

    使用python爬虫的selenium操作网页的下拉框. 以该网站为例:https://www.17sucai.com/pins/demo-show?id=5926 该网页下存在多个可供测试的下拉框. ...

  6. 生成下拉框的几种方法总结——数据来源:数据库

    下拉框的内容可以来自数据库.枚举.自己在程序中的定义等,我们今天来介绍一下先介绍来自数据库的数据进行下拉列表的实现. 使用场景:客户下拉列表等 1.确保数据库中有相关客户信息数据. 2.获取数据格式( ...

  7. 生成下拉框的几种方法总结——数据来源:枚举

    上节介绍数据来源是数据库,这节介绍对枚举进行数据获取,形成下拉列表. 使用场景:某些状态值获取等,一般是数据量小,不需要在数据库中进行维护的数据集 1.前提要有枚举数据 package com.tes ...

  8. layui表单mysql_layui表单验证支持select下拉框的一种方法

    背景: 1.layui在select选择后可以通过layui.event.call触发form.on('select(##)',function...)事件 2.layui的select被渲染后会变成 ...

  9. layui表单验证支持select下拉框的一种方法

    背景: 1.layui在select选择后可以通过layui.event.call触发form.on('select(##)',function...)事件 2.layui的select被渲染后会变成 ...

最新文章

  1. Java提高——多线程(二)join、sleep、yield
  2. 一文告诉你 Java RMI 和 RPC 的区别!
  3. nRF5_SDK_12.3.0 编译micro-ecc摘要
  4. java外围设计_Java 编程(23 种设计模式)
  5. iOS HTML标签字符实体,转译字符串归类大全 【转载】
  6. easyui-textbox锁定按钮不锁定_不放水了!湖人G5改穿曼巴球衣,热火输定了,詹姆斯提前锁定FMVP!...
  7. css 外弧_css 弧度
  8. python图像库_Python常用图像处理库整理
  9. 重建控制文件--Rebuild controlfile
  10. 湘苗培优|从入门到精通
  11. 表格识别----基于模板的文字识别结果结构化处理技术
  12. winform textbox文本框根据内容自动调整高度
  13. 医护人员计算机专业培训内容,电子病历-住院医生工作站的前期培训
  14. html5dragw3c,HTML5拖拽功能drag
  15. java线程死锁例子_java死锁例子 - 无情小白龙的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. Python超市进销存管理系统!老妈开超市有系统了!
  17. POJ 1565 Skew Binary
  18. python实现打电话功能_使用python代码调用三汇语音卡硬件拨打电话
  19. 赛效:WPS何把文档里竖排的文字变成横排的
  20. Java把xx年xx月xx日(星期x) 上午xx点xx分转换Date类型

热门文章

  1. android4.0 菜单,Android 4.0.4系统曝光 增新Power菜单
  2. java表达式由什么组成_必知必会之Lambda表达式
  3. 液晶电视服务器无响应时间,液晶电视响应速度时间是多少更好啊?
  4. Eclipse安装SVN插件方式简明介绍
  5. Java线程:线程的调度-优先级
  6. windows/linux服务器上java使用openoffice将word文档转换为PDF(亲测可用)
  7. ModelAndView学习笔记
  8. springboot 整合jsp过程中的一些问题
  9. NOIP 2016 迟来的满贯
  10. android AsyncTask介绍(转)