【发布时间】:2018-02-16 11:37:44
【问题描述】:
我正在尝试抓取具有标题和 cmets 的网站。加载页面时,会呈现 40 cmets,但单击“加载 cmets”按钮后会出现新的 40 cmets,依此类推。我想先加载所有的cmets,然后把它们都拿走。 问题是我只得到前 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 个 cmets,在这种情况下,我只会获得加载页面时可见的前 40 个。
我尝试了options.addArguments("--headless"); 和ChromeDriver(options);,但速度很慢。
PS: load-cmets 按钮在所有 cmets 加载完成时隐藏,如果页面正在加载新 cmets,则显示 loading 元素。
【问题讨论】:
标签: java selenium web-crawler