有一个网站列出前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
任何帮助?
答案 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);");