遍历URL或页面以查找404链接

时间:2014-09-04 17:03:04

标签: java selenium-webdriver http-status-code-404 linkchecker

我有一个工作代码遍历一个级别的URL,我需要一些帮助来实现两到三级链接遍历来检测404。

    driver().navigate().to(URL);
    driver().manage().window().maximize();
    String orgWindow = driver().getWindowHandle();

    List<WebElement> linksList = driver().findElements(By.tagName("a"));

    for (WebElement linkElement : linksList) {

        System.out.println("================ At First Level =================");

        String link = linkElement.getAttribute("href");
        if (link != null && link.contains("test")) {

            verifyLinkActive(link); //This method has HTTP URL connection to detect for 404's

            // Second Level Traversing.....
            driver().navigate().to(link);
            driver().manage().window().maximize();

            List<WebElement> SecondLinkList = driver().findElements(By.tagName("a"));

            for (WebElement linkSecondElement : SecondLinkList) {

                System.out.println("================ At Second Level =================");

                String Secondlink = linkSecondElement.getAttribute("href");
                if (Secondlink != null && Secondlink.contains("test")) {

                    verifyLinkActive(Secondlink);

                }// SecondIF

            }//Second for


        }//if

        driver().switchTo().window(orgWindow);  //Switching back to Original window


    } //for

我的问题 - 1)我是否已经为第二或第三级迭代实现了正确的方法来查找404。 2)还有一种方法可以忽略某些属于特定标签或ID的链接,因为这些标准链接是重复的并且可以在每个页面上找到,如果可能的话我可以忽略这些...

期待一些投入!!

1 个答案:

答案 0 :(得分:0)

如果您的意思是如何构建程序本身,也许最简单的方法是保留要检查的URL列表(to-check-urls),以及一组已经检查过的URL(checked-urls)。

当你的程序启动时,to-check-urls只包含要访问的第一页,而checked-urls显然是空的。

然后你有一个循环重复,直到要检查的URL列表为空,并执行此操作:

  1. 如果列表为空,请退出,完成
  2. 从检查网址中取出一个网址并将其删除
  3. 如果URL已经存在于checked-urls中,请返回1
  4. 将网址添加到checked-urls
  5. 按照您的方式打开网址
  6. 如果是404,请根据需要报告错误并返回1
  7. 按原样解析HTML
  8. 将所有找到的网址放入to-check-urls
  9. 返回1
  10. 代码主要在那里,只需要使用两个列表在循环中进行排列。这样,您不会检查两次网址,也不关心它们是第二级,第三级还是第四级,也因为网站是图形而不是树,所以无论您添加多少级别,仍然可以更多。