【发布时间】:2017-01-22 14:50:11
【问题描述】:
您好,我是Selenium的新手
我正在使用Java library,已经尝试过Chrome 和Firefox 驱动程序。
我正在运行一个循环。有趣的是,循环有时会工作 3、2 次,它并不总是在同一次迭代中失败。我认为它与某种竞争条件有关(例如等待页面加载)。如果我在调试模式下运行,它似乎工作得很好。
我已经尝试过来自其他答案的建议,例如 wait explicitly 和 implicitly,但仍然没有帮助。也许如果你看到代码,你可以帮我一把。
这进入一个循环。
WebDriverWait wait = new WebDriverWait(driver,20);
WebElement searchResults = driver.findElement(new By.ById("searchresults"));
searchResults = searchResults.findElement(new By.ByClassName("table"));
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.tagName("a")));
List<WebElement> list=searchResults.findElements(By.tagName("a"));
for(WebElement w: list) {
result.add(w.getAttribute("href")); //EXCEPTION HAPPENS ALWAYS HERE
}
解决方案
解决方案是彻底破解。我仍然不明白,但它的工作。如果有人明白为什么,请告诉我。
我只是将所有的等待时间提高,它的性能会更好。我还接受了@Cyril 的建议,如果在一些数据检查中抛出异常以确保我得到了我想要的一切,则重新运行迭代。
WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(new By.ById("searchresults")));
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(new By.ByClassName("table")));
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.tagName("a")));
【问题讨论】:
标签: java selenium web-crawler