加载新元素并使用Selenium和HtmlUnitDriver获取它们

时间:2018-02-16 11:37:44

标签: java selenium web-crawler

我正在尝试抓取一个有标题和评论的网站。当页面加载时,会显示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 元素。

1 个答案:

答案 0 :(得分:0)

您提供的网站不会显示任何评论。请提供准确的网址以查找元素。 为什么使用“driver.findelements”而不是“driver.findelement”显示条件?此逻辑将为您提供编译错误。 你需要添加参数来设置屏幕分辨率,同时使用无头。我建议你首先使用带有ui的chrome,然后检查无头。