ChromeDriver抓取与特定数据元素不一致

时间:2019-04-28 09:24:23

标签: java selenium webdriver selenium-chromedriver

我为此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的注册信息。但是,似乎有一些奇怪的未定义行为,或者只是我尚未看到文档的行为,由于某种原因,只有该元素被不适当地删除。它将在一个(看似)随机的会话元素上返回“-/-”,因为重新运行整个程序会在其他课程上产生这种不确定的行为,并正确地刮擦以前以不确定的方式刮擦的那些。 为了澄清起见,据我所知,我使用的所有其他刮除方法似乎都可以正常工作。只有报名刮板可以更改。

0 个答案:

没有答案