selenium - 如何使用 Java 在 selenium 无头模式下滚动?
问题描述
描述
因为我还没有从我的帖子中得到任何答案: How to get all stock from the specified URL in selenium headless mode? 我必须努力解决问题才能让我的工作取得进展!而不是试图强制在网站上更新以使所有股票都可见(如我的帖子中所述),我将转到页面末尾,然后向上滚动以强制所有股票可见(当我手动执行时工作正常) . 所有这些都必须在 selenium 无头模式下工作!
问题
我知道如何在 selenium 正常模式(不是无头模式)下实现这一点,但我无法让它在无头模式下工作。我认为这条线在正常和无头模式下都可以转到页面的结尾:
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, document.body.scrollHeight);");
我正在努力解决的问题是如何从页面末尾向上滚动或向上翻页。我想这样的事情会起作用:
WebElement e = driver.findElement(By.xpath("element to be returned like Storskogen"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", e);
我无法获取元素“e”,我无法让它工作(抛出 NoSuchElementException)。我已经从 Chrome 复制了 xpath 或 css,但没有结果。我什至不确定这是否可以在无头模式下工作。
问题
- 如何获取元素“Storskogen”?
- “scrollIntoView”滚动是否在无头模式下工作?
- 如何实现 pageup 并在无头模式下工作?
- 如何验证无头模式下的滚动?
不回答所有问题也没关系。我使用 Java 来实现。
解决方案
Selenium 无头窗口/显示大小默认为800x600。
因此,如果您的网页上有很多内容,那么您最终可能会在无头浏览器上看到水平滚动条和垂直滚动条。因此,取决于您的网页,您所追求的元素可能不会被绘制,因此您必须上下滚动才能显示它。
为了获得向上和向下滚动的最佳效果,您需要最大化您的浏览器窗口。由于您想在无头模式下操作,实际浏览器不会处于活动状态,因此driver.manage().window().maximize();
不是一个选项。
请执行下列操作:
- 使用特定的窗口大小更新浏览器驱动程序,以确保没有水平滚动条。当我使用多个浏览器进行测试时,我在 BrowserDriverFactory 中使用了以下内容:
driver.manage().window().setSize(new Dimension(1920, 1280));
您也可以管理特定的浏览器驱动程序,即chromedriver
使用options.addArguments("window-size=1920,1080");
然后使用 JavascriptExecutor,如上所述:
- 向下滚动 -
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, document.body.scrollHeight);");
- 向上滑动 -
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, document.body.scrollTop);");
推荐阅读
- c++ - c++ 错误分配应用程序失败
- angular - 到嵌套模块的角度路由
- php - 在每个请求上更新“last_active”
- r - which.max 不起作用,但 which.min 是(在 R 中)
- jquery - wbraganca/yii2-dynamicform 值在编辑时复制到克隆字段,但不是在创建时
- swift - 改变方向时无法自动旋转
- scala - Spark:获取操作/写入结束的时间戳
- html - 如果下拉列表中没有数据,如何在下拉列表中隐藏插入符号图标
- python - Pandas pd.Grouper 和每组的顺序日期差异
- excel - 根据附属列的长度复制数据