Selenium加载完整的网站

时间:2014-09-01 04:09:18

标签: 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

任何帮助?

2 个答案:

答案 0 :(得分:1)

您需要调用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
}

答案 1 :(得分:0)

试试这个:

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)", "");
//or
//scroll down
jse.executeScript("scroll(0, 250);");
//scroll up
jse.executeScript("scroll(0, -250);");