2014-09-01 104 views
2

有一个网站,列出前20项和他们,如果我向下滚动它加载下20项。说如果网站要列出100个项目,那么我必须向下滚动到最后一个项目5次以获得所有列出的100个项目。硒加载完整的网站

我在java中使用硒来获取网页,但它只获得前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();

URL中使用:

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

任何帮助吗?

+0

的当您向下滚动时,页面可能会向服务器发出另一个请求,因此您可能必须找出请求URL和POST身体(如果有的话)并重新创建它。那有意义吗? – Tyress 2014-09-01 04:14:32

+0

“你现在不工作”是什么意思?没有点击执行?例外?您可以通过视觉方式执行脚本,此时会显示“显示更多结果”按钮? – 2014-09-01 12:17:07

+0

你可以分享使用的实际网址吗? – alecxe 2014-09-01 13:09:55

回答

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 
} 
+0

是的,它的工作..谢谢 – user2186465 2014-09-01 10:55:03

+0

现在修改问题...看看你能帮忙。 – user2186465 2014-09-01 12:09:12

+0

我已经给出了上面的网址...... – user2186465 2014-09-01 13:22:00

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

请帮助修改的问题。 – user2186465 2014-09-01 12:09:54