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

Posted

技术标签:

【中文标题】使用 Selenium WebDriver 和 Java 从页面源中获取所有 href 链接【英文标题】:Fetching all href links from the page source using Selenium WebDriver with Java 【发布时间】:2015-03-25 15:54:20 【问题描述】:

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

代码sn-p获取锚标签的链接:

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

但是我的页面有更多没有锚标记&lt;a&gt; 的href 链接,并且可能位于页眉部分的页面主体之外。一些示例如下所示。上面的 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 链接的类似问题,我将不胜感激。

【问题讨论】:

从来没有经历过这个,但是你可以尝试使用getPageSource函数来实现它,并获取包含href的每一行并用="分割它。 【参考方案1】:

可以使用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);
       

【讨论】:

嗨,那么如何在同一个for循环中点击每个链接并获取每个链接的pagesource。【参考方案2】:

链接存在于正文之外是什么意思?

所有链接都可以通过 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"));

【讨论】:

问题清楚地表明并非所有元素都有'a'标签。 抱歉延迟响应,Vinoth 展示的方式对我使用 xpath("//*[@href or @src]")) 有效

以上是关于使用 Selenium WebDriver 和 Java 从页面源中获取所有 href 链接的主要内容,如果未能解决你的问题,请参考以下文章

appium的webdriver和selenium有啥区别?

Selenium Webdriver概述

无法使用Selenium和Java 11导入org.openqa.selenium.WebDriver

无法使用 Selenium 和页面工厂在页面对象类中调用“org.openqa.selenium.WebDriver.getTitle()”

Selenium & webdriver.io 如何使用 executeScript?

org.openqa.selenium.InvalidCookieDomainException:文档是使用 Selenium 和 WebDriver 的 cookie-averse