我正在尝试抓取一个有标题和评论的网站。当页面加载时,会显示40个注释,但在单击“加载注释”按钮后,会有新的40个注释,依此类推。我想首先加载所有注释,然后全部收集它们。 问题是我只得到第40个。这是我的代码:
WebDriver driver = new HtmlUnitDriver();
driver.get(www.website.com);
String title = driver.findElement(By.className("title")).getText();
while(driver.findElements(By.className("load-comments")).isDisplayed() || !driver.findElement(By.className("expand-loading")).isDisplayed()){
Thread.sleep(500);
if(!driver.findElements(By.className("loading")).isDisplayed()){
driver.findElements(By.className("load-comments")).click();
}
}
List<WebElement> comments = (List<WebElement>) driver.findElements(By.className("comment"));
for(WebElement comm:comments){
System.out.print(comm.getText());
}
所以,如果我需要所有150条评论,在这种情况下,我只能获得加载页面时可见的前40条。
我用options.addArguments("--headless");
尝试ChromeDriver(options);
,但速度非常慢。
PS:加载所有注释时隐藏加载注释按钮,如果页面正在加载新注释,则显示 loading 元素。
答案 0 :(得分:0)
您提供的网站不会显示任何评论。请提供准确的网址以查找元素。 为什么使用“driver.findelements”而不是“driver.findelement”显示条件?此逻辑将为您提供编译错误。 你需要添加参数来设置屏幕分辨率,同时使用无头。我建议你首先使用带有ui的chrome,然后检查无头。