我的Windows窗体应用程序承载了一个WebBrowser
控件,该控件显示一个充满链接的页。我正在尝试查找加载的HtmlDocument
中的所有锚元素,并读取它们的href
属性,以便可以用C#提供一个多文件下载接口。下面是查找和处理锚元素的函数的简化版本:
public void ListAnchors(string baseUrl, HtmlDocument doc) // doc is retrieved from webBrowser.Document
{
HtmlElementCollection anchors = doc.GetElementsByTagName("a");
foreach (HtmlElement el in anchors)
{
string href = el.GetAttribute("href");
Debug.WriteLine("el.Parent.InnerHtml = " + el.Parent.InnerHtml);
Debug.WriteLine("el.GetAttribute(\"href\") = " + href);
}
}
锚标记都被<PRE>
标记包围,我加载HTML的主机名是网络上的本地机器(lts930411),其中一个条目的源HTML如下所示:
<PRE><A href="/A/a150923a.lts">a150923a.lts</A></PRE>
上述C#代码对一个锚元素的输出如下:el.Parent.InnerHtml = <A href="/A/a150923a.lts">a150923a.lts</A>
el.GetAttribute("href") = http://lts930411/A/a150923a.lts
为什么el.GetAttribute("href")
要添加方案和主机名前缀(http://lts930411
),而不是从源HTML返回href
属性的文本值?这种行为我可以信赖吗?这种“特性”在哪里有文档记录吗?(我自己在前面加上了基本URL,但这给了我像http://lts930411http://lts930411/A/a150923a.lts
这样的地址。如果我能找到承诺这将永远发生的文档,我可以只期待完整的URL。)
3条答案
按热度按时间kognpnkq1#
如
IHTMLAnchorElement.href
文档所述,相对url根据包含a
元素的文档的位置进行解析。作为获取未触及的
href
属性值的选项,您可以使用以下代码:上面的代码返回文档中所有
a
标记的未触及href
属性值。cgyqldqp2#
请尝试以下代码:
mklgxw1f3#
首次引用Microsoft.mshtml