java - Selenium 加载完整的网站

标签 java javascript jquery html selenium

有一个网站列出了前 20 个项目,如果我向下滚动它们,它会加载接下来的 20 个项目。假设网站要列出 100 个项目,那么我必须向下滚动到最后一个项目 5 次才能列出所有 100 个项目。

我在 java 中使用 selenium 获取网页,但它只获取前 20 个项目。我希望它加载页面中的所有项目并获取页面的 html。

在显示大约 100 个项目后,页面会生成一个 div,其作用如下所示。

 <div id="show-more-results" class="dont-show">
 Show more results
 </div>

现在我想点击show more results。在这部分之前我有一个工作代码。 但是点击 show-more-results 部分不起作用。

public class seleniumTest
{
public static void main(String[] args) throws InterruptedException
{
    String link = "http://www.some.com";
    System.setProperty("webdriver.chrome.driver","path");
    WebDriver driver = new ChromeDriver();
    driver.get(link);
    JavascriptExecutor jse = (JavascriptExecutor)driver;
        for (int i = 0; i < 4; i = i + 1) {
        jse.executeScript("window.scrollBy(0, 5000)", "");
        Thread.sleep(1000L);
    }
    driver.findElement(By.id("show-more-results")).click();
}
}

代码的最后一行现在不起作用。即 driver.findElement(By.id("show-more-results")).click();

使用的网址:

http://www.flipkart.com/mobiles/micromax~brand/pr?p%5B%5D=sort%3Dprice_asc&sid=tyy%2C4io&ref=d92e01d2-38f2-46bb-82be-752e93e9ce88

有什么帮助吗?

最佳答案

您需要调用 window.scrollBy() javascript 函数:

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0, 3000)", "");

而且,您可能希望在一个循环中多次执行此操作:

JavascriptExecutor jse = (JavascriptExecutor)driver;
for (int i = 0; i < 5; i = i + 1) {
    jse.executeScript("window.scrollBy(0, 3000)", "");
    Thread.sleep(1000L);  // needed to wait for the page load
}

关于java - Selenium 加载完整的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25598729/

相关文章:

java - 获取 Java 时区的区域规则时出现异常?

java - Android:如何更新特定行的文本文件

javascript - 将 Meteor iron-router 中的 onBeforeAction 钩子(Hook)移动到不同的文件

javascript - 多个 JavaScript worker

jquery - $.getJSON 对我不起作用

jquery - 在 Hover 上通过 CSS 内容方法淡入文本

java - 使用 jQuery 或 JavaScript 读取属性文件

java - 在 Android JUnit 测试中加载 native 库

java - 日期转换无法正常工作

javascript - 谷歌地图 API : cannot click on clickable polygon behind datalayer