使用Selenium WebDriver和Java从页面源获取所有href链接

时间:2015-01-27 05:09:04

标签: java html web selenium-webdriver href

我正在尝试测试页面上所有href链接的HTTP RESPONSE,使用WebDriver从页面获取所有链接,然后使用http.connect获取响应状态。

获取锚标记链接的代码段:

List<WebElement> list = driver.findElements(By.cssSelector("a"));
for (WebElement link : list) {
    System.out.println(link.getText());
}

但是我的页面有更多的href链接,它们没有锚标记<a>,并且可能位于标题部分左右的页面正文之外。一些例子如下所示。以上webdriver代码在获取所有类型的链接时不会解决。在某些情况下还需要提取src链接...

<script src="https://www.test.com/js/50/f59ae5bd.js"></script> 
<link rel="stylesheet" href="www.test.com/css/27/5a92c391c7be2e9.css" rel="stylesheet" type="text/css" />
<link sizes="72x72" href="https://www.test.com/css/27/5a92c391c7b/kj32.png" />
<li><a href="https://www.test.com/webapps/mpp/resortcheck">resortcheck</a>

如果有人可以指导如何处理或解决了从页面获取所有href链接的类似问题,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以使用Xpath获取包含属性href / src的所有元素。

List<WebElement> list=driver.findElements(By.xpath("//*[@href or @src]"));

我尝试过这样的东西来获取其他资源文件的所有链接。它工作正常。

       WebDriver driver = new FirefoxDriver();
       driver.get("http://www.google.com");

       List<WebElement> list=driver.findElements(By.xpath("//*[@href or @src]"));

       for(WebElement e : list){
           String link = e.getAttribute("href");
           if(null==link)
               link=e.getAttribute("src");
           System.out.println(e.getTagName() + "=" + link);
       }

答案 1 :(得分:1)

你在身体以外存在的链接是什么意思?

所有链接均可通过html标记识别。还有哪些其他方式来表示链接?

检查我的以下代码可能有所帮助:

public static void main(String[] args)
{
    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.google.com/");
    List<WebElement> links=driver.findElements(By.tagName("a"));
    for(WebElement ele:links)
        System.out.println(ele.getAttribute("href"));
}