我为此course website创建了一个抓取实用程序。但是,有时在抓取会话(讲座或部分)时,“报名”字符串会被抓取为“-/-”,而不是例如我访问网站时显示的“ 5/5”。
我尝试添加一些相同数据的额外刮擦,以查看刮板刮得是否太快的问题,但这不是问题(特别是因为刮板的原样速度不是那么快) 。我还尝试检查用于获取正确的WebElement的“ allData”结构的索引是否正确,以及每次正确时是否正确。
private JSONObject getEnrollment(WebElement element) {
int current, max;
JSONObject enrollmentObj = new JSONObject();
int retry = 0;
String enrollment = "";
List<WebElement> allInfo;
try {
// Odd behavior of ChromeDriver parsing enrollment <int> / <int> incorrectly.
do {
allInfo = element.findElements(By.tagName("td"));
enrollment = allInfo.get(46).getText();
} while (enrollment.equals("- / -") && ++retry < 5);
current = Integer.parseInt(enrollment.substring(0, enrollment.indexOf("/")).trim());
max = Integer.parseInt(enrollment.substring(enrollment.indexOf("/") + 2));
} catch (NumberFormatException e) {
LOGGER.error("ERROR at element: " + element.findElement(By.id("CourseTitle")).getText().trim());
LOGGER.error("Enrollment string was: " + enrollment + ", but expected \"<int> / <int>\"");
current = -1;
max = -1;
}
enrollmentObj.put("current", current);
enrollmentObj.put("max", max);
return enrollmentObj;
}
对于此功能,我给它一个会话WebElement(讲座或部分),它应该还给我course website的注册信息。但是,似乎有一些奇怪的未定义行为,或者只是我尚未看到文档的行为,由于某种原因,只有该元素被不适当地删除。它将在一个(看似)随机的会话元素上返回“-/-”,因为重新运行整个程序会在其他课程上产生这种不确定的行为,并正确地刮擦以前以不确定的方式刮擦的那些。 为了澄清起见,据我所知,我使用的所有其他刮除方法似乎都可以正常工作。只有报名刮板可以更改。