Очистка ChromeDriver несовместима с конкретным элементом данных - PullRequest
0 голосов
/ 28 апреля 2019

Я создал утилиту очистки для этого сайта курса .Однако иногда при очистке сеанса (лекции или раздела) строка «регистрации» очищается как «- / -» вместо, например, «5/5», как это показано на веб-сайте, когда я посещаю его.

Я попытался добавить несколько дополнительных скрепок с теми же данными, чтобы проверить, не является ли это проблемой слишком быстрого удаления скребка, но это не проблема (тем более что скребок как есть, нечто быстро).Я также пытался проверить правильность индекса структуры "allData", которую я использую для получения правильного WebElement, и каждый раз, когда он был правильным.

    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 (либо лекция, либо раздел), и он должен вернуть мне информацию о регистрации на веб-сайте курса .Тем не менее, кажется, что есть какое-то странное неопределенное поведение, или просто поведение, которое мне еще предстоит увидеть в документации, где по какой-то причине только этот элемент неправильно обработан.Он вернет «- / -» в (казалось бы) случайном элементе сеанса, так как перезапуск всей программы дает это неопределенное поведение на других курсах и должным образом очищает те, которые ранее были очищены неопределенным образом.Для пояснения все остальные методы очистки, которые я использовал, по-видимому, работают безошибочно из того, что я могу сказать.Изменения могут быть только в записке.

...