You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用HtmlUnit点击HtmlAnchor后获取目标URL的技术求助

解决HtmlUnit获取HtmlAnchor指向URL的问题

问题分析

你的代码核心问题是使用link.click().getWebResponse().toString()获取的是整个WebResponse的字符串内容,而非目标页面的URL。另外,你已禁用JavaScript,目标链接大概率是静态href,完全不需要点击页面就能直接提取URL,这样更高效。

解决方案

方案1:直接提取静态href(推荐)

如果链接的URL写在href属性里,直接调用HtmlAnchor的getHrefAttribute()方法即可:

public List<String> clickURLs(String searchAttribute) {
    List<String> list = new ArrayList<>(); // 初始化list变量
    try {
        wc.getOptions().setCssEnabled(false); 
        wc.getOptions().setJavaScriptEnabled(false); 
        wc.getOptions().setUseInsecureSSL(true); 
        wc.getOptions().setPrintContentOnFailingStatusCode(false); 
        wc.getOptions().setThrowExceptionOnFailingStatusCode(false); 
        wc.getOptions().setThrowExceptionOnScriptError(false);
        
        HtmlPage page = wc.getPage(url);
        List<HtmlAnchor> links = page.getAnchors();
        
        for (HtmlAnchor link : links) {
            if (link.getTextContent().contains(searchAttribute)) {
                String href = link.getHrefAttribute();
                // 若需要绝对URL,可转换:
                // String absoluteUrl = link.getPage().getFullyQualifiedUrl(href).toString();
                System.out.println(href);
                list.add(href);
            }
        }
    } catch (Exception e) {
        System.out.println("An error occured: " + e);
    } finally {
        wc.close();
    }
    return list;
}

方案2:点击后获取目标页面URL

如果确实需要模拟点击(比如特殊跳转逻辑),点击后通过新页面的getUrl()方法获取URL:

public List<String> clickURLs(String searchAttribute) {
    List<String> list = new ArrayList<>(); // 初始化list变量
    try {
        wc.getOptions().setCssEnabled(false); 
        wc.getOptions().setJavaScriptEnabled(false); 
        wc.getOptions().setUseInsecureSSL(true); 
        wc.getOptions().setPrintContentOnFailingStatusCode(false); 
        wc.getOptions().setThrowExceptionOnFailingStatusCode(false); 
        wc.getOptions().setThrowExceptionOnScriptError(false);
        
        HtmlPage page = wc.getPage(url);
        List<HtmlAnchor> links = page.getAnchors();
        
        for (HtmlAnchor link : links) {
            if (link.getTextContent().contains(searchAttribute)) {
                HtmlPage targetPage = link.click();
                String targetUrl = targetPage.getUrl().toString();
                System.out.println(targetUrl);
                list.add(targetUrl);
            }
        }
    } catch (Exception e) {
        System.out.println("An error occured: " + e);
    } finally {
        wc.close();
    }
    return list;
}

额外注意点

  • 方法内的list变量必须提前初始化,否则会出现未定义问题。
  • 若提取的是相对URL,可使用link.getPage().getFullyQualifiedUrl(href)转换为绝对URL。

内容的提问来源于stack exchange,提问作者Felix Steindorff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:55:18