python集成包地址 Anaconda 一键安装拥有所有包
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/82495040 点击进入官网下载https://www.anaconda.com/download/
数据采集中,经常遇到动态加载的数据,我们经常使用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);
#下拉到页面底部
((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);
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)+")");
}
}
}
微信关注我们
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。
Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。
Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。