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

Java 遍历URL或页面以查找404链接,java,selenium-webdriver,http-status-code-404,linkchecker,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(

我有一个工作代码,它遍历一个级别的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
driver().navigate().to(URL);
驱动程序().manage().window().maximize();
字符串orgWindow=driver().getWindowHandle();
List linksList=driver().findElements(按.tagName(“a”));
对于(WebElement linkElement:linksList){
System.out.println(“==========================================================================================================”);
String link=linkElement.getAttribute(“href”);
if(link!=null&&link.contains(“测试”)){
verifyLinkActive(link);//此方法具有要检测404的HTTP URL连接
//第二级遍历。。。。。
驱动程序()。导航()。到(链接);
驱动程序().manage().window().maximize();
List SecondLinkList=driver().findElements(按.tagName(“a”));
for(WebElement链接SecondElement:SecondLinkList){
System.out.println(“==========================================================================================================”);
字符串Secondlink=linkSecondElement.getAttribute(“href”);
if(Secondlink!=null&&Secondlink.contains(“测试”)){
验证链接活动(第二链接);
}//第二
}//第二
}//如果
driver().switchTo().window(orgWindow);//切换回原始窗口
}//为了
我的问题- 1) 对于第二级或第三级迭代来说,找到404是正确的方法吗。 2) 还有一种方法,我可以忽略特定标签或ID的某些链接,因为这些标准链接是重复的,可以在每个页面上找到,如果可能的话,我可以忽略这些


期待一些投入

如果您指的是如何构造程序本身,那么最简单的方法可能是保留一个要检查的URL列表(检查URL)和一组已检查的URL(检查URL)

当程序启动时,要检查的URL仅包含要访问的第一个页面,并且检查的URL显然是空的

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

  • 如果列表为空,退出,则完成
  • 从中获取一个url以检查url并将其删除
  • 如果该URL已存在于选中的URL中,请返回1
  • 将url添加到选中的url
  • 像以前一样打开url
  • 如果是404,则根据您的喜好报告错误并返回1
  • 像您已经做的那样解析HTML
  • 将找到的所有URL放入以检查URL
  • 返回到1

  • 代码大部分都在那里,只需要使用两个列表将其安排在一个循环中。这样,你就不必检查url两次,也不必关心它们是第二级、第三级还是第四级,这也是因为网站是一个图形而不是一棵树,所以无论你添加多少级,都可能有更多的级别。

    我如何忽略特定标记之间的链接,例如:忽略标记内的所有链接?而不是按.tagName(“a”)进行操作请尝试使用.xpath(“body//a”)或.cssSelector(“body a”)