假设我的WebBrowser1下载了一个包含以下行的页面:
<span customattr="hamolulu">hamolulu</span>
它位于td标签内部,大表内部,iFrame内部,div内部等。
如何使用c#点击此内容?
我需要做以下事情:
int i = 0;
for (i = 0; i <= 500; i++)
{
if (webBrowser1.Document.GetElementsByTagName("span")[i].GetAttribute("customattr") == "hamolulu")
{
webBrowser1.Document.GetElementsByTagName("span")[i].InvokeMember("click");
break;
}//end if
}// end for
但由于某种原因,它不能以这种方式工作,所以我在想是否可以检查span的innerHTML或innerText?
我试过了两个:
webBrowser1.Document.GetElementsByTagName("span").InnerHTML == "hamolulu"
webBrowser1.Document.GetElementsByTagName("span").InnerText == "hamolulu"
我两次失败了。
更新:
我刚注意到这条线实际上是这样的:
<span customattr="hamolulu"><a>hamolulu</a></span>
所以我写了一个简单的函数:
int i = 0;
for (i = 0; i <= webBrowser1.Document.GetElementsByTagName("a").Count - 1; i++)
{
log(i.ToString()+ " : " +webBrowser1.Document.GetElementsByTagName("a")[i].InnerHtml);
} //log(string) is a custom function that saves all strings to a file log.txt
我所看到的是这个链接(和span)没有出现在我的日志中。 换句话说,getElementsByTagName(“span”)和getElementsByTagName(“a”)看不到该项。我的猜测是因为iFrame。你有什么想法吗?
答案 0 :(得分:1)
另一种不使用js的解决方案(因为你没有“页面”) 因为它在iframe中,所以你应该在iframe中搜索
HtmlElementCollection iframes = WebBrowser1.Document.GetElementsByTagName("iframe");
HtmlElement iframe = iframes(0 /* iframe index */); //
HtmlElementCollection spans = iframe.Document.GetElementsByTagName("span");
for (i = 0; i < spans.Count; i++) {
HtmlElement span = spans(i);
if (span.GetAttribute("customAttr") == "customAttrValue") {
string onclick = span.Children(0).GetAttribute("onclick"); //span.Children(0) should return the <a>
WebBrowser1.Document.InvokeScript(onclick);
}
}
答案 1 :(得分:0)
除非我遗漏了某些东西......
<span id="hamolulu">hamolulu</span>
然后当你想改变它时......
document.getElementById('hamolulu').innerHTML="<h1>Test!</h1>";
答案 2 :(得分:0)
您可以通过使用JavaScript并在需要时从c#调用它来简化它。
WebBrowser1 .Document .InvokeScript ("functionName")
的javascript:
function functionName(){
var spans = document.getElementsByTagName('SPAN');
for (i = 0; i < spans.length; i++)
{
var span = spans[i];
if (span.getAttribute("customattr") == "hamolulu")
{
eval(span.getAttribute('onclick')); // .. be careful "span" has no "click()" method. you should use the onlick attribute if available
break;
}//end if
}// end for
}
答案 3 :(得分:0)
如果您将span设置为HTML服务器控件:
<span runat="server" id="myspan" customattribute="customvalue">hello world</span>
然后您可以在页面加载时注册事件处理程序:
protected void Page_Load(object sender, EventArgs e)
{
myspan.Attributes["onclick"] = "this.innerText='hamolulu'";
}
另一种方法是使用Page Methods,它使用AJAX调用页面C#方法。