我正在尝试使用webBrowser1编写一种方法来通过href获取下载链接,但问题是我必须使用其类名来找到它。
<body>
<iframe scrolling="no" frameborder="0" allowtransparency="true" tabindex="0" name="twttrHubFrame" style="position: absolute; top: -9999em; width: 10px; height: 10px;" src="http://platform.twitter.com/widgets/hub.html">
¶
<div id="main">
¶→
<div id="header">
<div style="float:left;">
¶→
<div id="content">
¶→
<h1 style="background-image:url('http://static.mp3skull.com/img/bgmen.JPG'); background-repeat:repeat-x;">Rush·Mp3·Download</h1>
¶→
<a id="bitrate" onclick="document.getElementById('ofrm').submit(); return false;" rel="nofollow" href="">
<form id="ofrm" method="POST" action="">
¶→¶→→
<div id="song_html" class="show1">
¶→→→
<div class="left">
¶→→→
<div id="right_song">
¶→→→→
<div style="font-size:15px;">
¶→→→→
<div style="clear:both;"></div>
¶→→→→
<div style="float:left;">
¶→→→→→
<div style="float:left; height:27px; font-size:13px; padding-top:2px;">
¶→→→→→→
<div style="float:left; width:27px; text-align:center;">
¶→→→→→→
<div style="margin-left:8px; float:left;">
<a style="color:green;" target="_blank" rel="nofollow" href="http://dc182.4shared.com/img/1011303409/865387c9/dlink__2Fdownload_2F6QmedN8H_3Ftsid_3D20111211-54337-a79f8d10/preview.mp3">Download</a>
</div>
·¶→→→→→→
<div style="margin-left:8px; float:left;">
¶→→→→→→
<div style="margin-left:8px; float:left;">
·¶→→→→→→
<div style="clear:both;"></div>
¶→→→→→
</div>
¶→→→→→
<div id="player155580779" class="player" style="float:left; margin-left:10px;"></div>
¶→→→→
</div>
→¶→→→→
<div style="clear:both;"></div>
¶→→→
</div>
¶→→→
<div style="clear:both;"></div>
¶→→
</div>
我在谷歌搜索和搜索,但我发现了PHP示例?
我知道你会按照这个
的方式做点什么HtmlElement downloadlink = webBrowser1.Document.GetElementById("song_html").All[0];
URL = downloadlink.GetAttribute("href");
但是我不明白如何通过“show1”类来完成它。
请通过我可以访问的示例和/或网站向我指出正确的方向,以便我可以在搜索时学习如何执行此操作并且不知道。
编辑:我非常需要href链接(“http://dc182.4shared.com/img/1011303409/865387c9/dlink__2Fdownload_2F6QmedN8H_3Ftsid_3D20111211-54337-a79f8d10/preview.mp3”),那我该如何获得呢? / p>
答案 0 :(得分:14)
WebBrowser
控件中没有内置任何内容来按类名检索元素。既然您知道它将是a
元素,那么您可以做的最好的事情就是获取所有a
元素并搜索您想要的元素:
var links = webBrowser1.Document.GetElementsByTagName("a");
foreach (HtmlElement link in links)
{
if (link.GetAttribute("className") == "show1")
{
//do something
}
}
答案 1 :(得分:1)
HtmlDocument的扩展方法
返回具有特定标记的元素列表,该标记与给定的className
一致它可用于仅在标记上捕获元素,或仅用于类名
internal static class Utils
{
internal static List<HtmlElement> getElementsByTagAndClassName(this HtmlDocument doc, string tag = "", string className = "")
{
List<HtmlElement> lst = new List<HtmlElement>();
bool empty_tag = String.IsNullOrEmpty(tag);
bool empty_cn = String.IsNullOrEmpty(className);
if (empty_tag && empty_cn) return lst;
HtmlElementCollection elmts = empty_tag ? doc.All : doc.GetElementsByTagName(tag);
if (empty_cn)
{
lst.AddRange(elmts.Cast<HtmlElement>());
return lst;
}
for (int i = 0; i < elmts.Count; i++)
{
if (elmts[i].GetAttribute("className") == className)
{
lst.Add(elmts[i]);
}
}
return lst;
}
}
用法:
WebBrowser wb = new WebBrowser();
List<HtmlElement> lst_div = wb.Document.getElementsByTagAndClassName("div");// all div elements
List<HtmlElement> lst_err_elmnts = wb.Document.getElementsByTagAndClassName(String.Empty, "error"); // all elements with "error" class
List<HtmlElement> lst_div_err = wb.Document.getElementsByTagAndClassName("div", "error"); // all div's with "error" class
答案 2 :(得分:1)
我遵循了这些答案,并使我的方法按类名隐藏div。
我分享了对谁的关注。
iRowCount1 = objASheets.UsedRange.Rows.Count
iRowCount2 = objBSheets.UsedRange.Rows.Count
objASheets.Range("$O$2:O").SpecialCells(xlCellTypeVisible).Copy
objBSheets.Range("$C$2:C").PasteSpecial Paste:=xlPasteAll
objASheets.Range("J$2:J").SpecialCells(xlCellTypeVisible).Copy
objBSheets.Range("$D$2:D").PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False
objBSheets.Range("$G$2:G").Value = "FAIL"
objBSheets.Range("$H$2:H").Value = "Not found"