首页 > 解决方案 > 如何使用 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,但没有结果。我什至不确定这是否可以在无头模式下工作。

问题

  1. 如何获取元素“Storskogen”?
  2. “scrollIntoView”滚动是否在无头模式下工作?
  3. 如何实现 pageup 并在无头模式下工作?
  4. 如何验证无头模式下的滚动?

不回答所有问题也没关系。我使用 Java 来实现。

标签: selenium

解决方案


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);");

推荐阅读