有一个网站列出了前 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/