首先,抱歉我的英语不好。
问题很简单。我想点击C#(windows窗体)的链接
这是我使用的代码:
int number_to_show = Convert.ToInt32(listView1_new_message.SelectedItems[0].SubItems[4].Text);
int a_to_click = (number_to_show * 5) + 2;
string titel_of_message = listView1_new_message.SelectedItems[0].SubItems[1].Text;
HtmlWindow SContentFrame = webBrowser1.Document.Window.Frames[1];
HtmlWindow Frame_A = SContentFrame.Document.Window.Frames[2];
HtmlElementCollection links = Frame_A.Document.GetElementsByTagName("b");
int link_counter = 0;
foreach (HtmlElement link in links) {
if (link_counter == a_to_click && link.InnerText.Equals(titel_of_message)) {
link.InvokeMember("Click");
}
link_counter++;
}
它想要点击(我看到它在调试中发生,当我点击消息框时,会出现消息框),但网页没有反应。
这是网页上 标签中的htmlcode:
<b><a href="" onclick="OnPhoenixRead('/mail/MessageRead?sid=7613BA4BF987D55FD171D53FAA24A259C7FDE435&userid=*******&seq=+Q&auth=+A&srcfolder=INBOX&uid=3291&srch=0&style=default'); return false">Doorgest: testing 2</a></b>
所以它不会点击文本...(或者不激活onclick事件处理程序)
如何使程序按原样运行?
提前致谢:D TWCrap
编辑1 这是包含电子邮件的表格的代码......
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
<tbody><tr valign="middle" bgcolor="#f0f0f0">
<td width="20" align="center"><input type="checkbox" name="CheckAll" onclick="ToggleCheckAll()"></td>
<td width="1"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td width="20" align="center"><font face="Verdana" size="2" color="#141F78"><b>!!</b></font></td>
<td width="1"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td width="20" align="center"><img src="/graphics/telfort/mail-icon.gif" width="20" height="20" border="0" alt=""></td>
<td width="1"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td width="20" align="center"><img src="/graphics/telfort/attachments.gif" width="20" height="21" border="0" alt=""></td>
<td width="1"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td class="mailtitlebar"> <a href="" onclick="NavA('/mail/MessageSort?sid=3B886D11EEAAF546F83EFAA8506E56BC30949BC9&userid=marcmeesters%40telfort.nl&seq=+Q&auth=+A&srcfolder=INBOX&sort=1&style=default&start=100&end=1'); return false">Van </a> </td>
<td width="1"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td class="mailtitlebar"><a href="" onclick="NavA('/mail/MessageSort?sid=3B886D11EEAAF546F83EFAA8506E56BC30949BC9&userid=marcmeesters%40telfort.nl&seq=+Q&auth=+A&srcfolder=INBOX&sort=5&style=default&start=100&end=1'); return false">Onderwerp </a> </td>
<td width="1"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td class="mailtitlebar"><a href="" onclick="NavA('/mail/MessageSort?sid=3B886D11EEAAF546F83EFAA8506E56BC30949BC9&userid=marcmeesters%40telfort.nl&seq=+Q&auth=+A&srcfolder=INBOX&sort=7&style=default&start=100&end=1'); return false">Ontvangen </a> </td>
<td width="1"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td class="mailtitlebar"><a href="" onclick="NavA('/mail/MessageSort?sid=3B886D11EEAAF546F83EFAA8506E56BC30949BC9&userid=marcmeesters%40telfort.nl&seq=+Q&auth=+A&srcfolder=INBOX&sort=9&style=default&start=100&end=1'); return false">Grootte </a> </td>
</tr>
<tr><td colspan="15" bgcolor="#f0f0f0"><img src="/graphics/telfort/null.gif" height="1" width="1"></td></tr><!-- Message List Head --><!-- Message List --><tr valign="middle">
<td width="20" align="center" bgcolor="#f0f0f0"><input type="checkbox" name="msguid" value="3330"></td>
<td width="1" bgcolor="#f0f0f0"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td width="20" align="center">
<script>
var stat = '<IMG SRC="/graphics/priority_normal.gif" BORDER=0 width="10" height="18"><IMG SRC="/graphics/new.gif" BORDER=0 width="20" height="18"><IMG SRC="/graphics/attach_none.gif" BORDER=0 width="8" height="18">';
</script>
<script>
if (stat.indexOf('high.gif') > -1 )
{
document.write ('<font face="Tahoma" size="2" color="#141D7C"><b>!!</b></font>');
}
else if (stat.indexOf('low.gif') > -1 )
{
document.write ('<font face="Tahoma" size="2" color="#141D7C"><b>!</b></font>');
}
</script></td>
<td width="1" bgcolor="#f0f0f0"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td width="20" align="center" bgcolor="#ffffff"><script>
if (stat.indexOf('new.gif') > -1)
{
document.write ('<img src="/graphics/telfort/mail-icon.gif" width="20" height="20" border="0" alt="">');
}
else if (stat.indexOf('deleted.gif') > -1)
{
document.write ('<img src="/graphics/telfort/cancel.gif" width="20" height="20" border="0" alt="">');
}
else if (stat.indexOf('replied.gif') > -1)
{
document.write ('<img src="/graphics/telfort/reply.gif" width="20" height="20" border="0" alt="">');
}
else
{
document.write ('<img src="/graphics/telfort/mailopen-icon.gif" width="20" height="20" border="0" alt="">');
}
</script><img src="/graphics/telfort/mail-icon.gif" width="20" height="20" border="0" alt=""></td>
<td width="1" bgcolor="#ffffff"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td width="20" align="center" bgcolor="#ffffff"><script>
if (stat.indexOf('attach.gif') > -1)
{
document.write ('<img src="/graphics/telfort/attach-icon.gif" width="20" height="20" border="0" alt="">');
}
</script></td>
<td width="1" bgcolor="#ffffff"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td bgcolor="#ffffff" class="mailtxt"> <b><a href="" onclick="OnPhoenixRead('/mail/MessageRead?sid=3B886D11EEAAF546F83EFAA8506E56BC30949BC9&userid=marcmeesters%40telfort.nl&seq=+Q&auth=+A&srcfolder=INBOX&uid=3330&srch=0&style=default'); return false">Tweakers.net Nieuwsbrief</a></b></td>
<td width="1" bgcolor="#ffffff"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td bgcolor="#ffffff" class="mailtxt"> <b><a href="" onclick="OnPhoenixRead('/mail/MessageRead?sid=3B886D11EEAAF546F83EFAA8506E56BC30949BC9&userid=marcmeesters%40telfort.nl&seq=+Q&auth=+A&srcfolder=INBOX&uid=3330&srch=0&style=default'); return false">Samsung toont info eerste Windows Phone ...</a></b></td>
<td width="1" bgcolor="#ffffff"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td bgcolor="#ffffff" class="mailtxt"> <b>jul 30</b></td>
<td width="1" bgcolor="#ffffff"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td bgcolor="#ffffff" class="mailtxt"> <b>42.9 KB</b></td>
</tr>
<tr><td colspan="15" bgcolor="#bbbdbf"><img src="/graphics/telfort/null.gif" height="1" width="1"></td></tr>
<!-- Message List end--><tr valign="middle">
<td width="20" align="center" bgcolor="#f0f0f0"><input type="checkbox" name="msguid" value="3329"></td>
<td width="1" bgcolor="#f0f0f0"><img src="/graphics/telfort/null.gif" height="1" width="1"></td>
<td width="20" align="center">
<script>
var stat = '<IMG SRC="/graphics/priority_normal.gif" BORDER=0 width="10" height="18"><IMG SRC="/graphics/new.gif" BORDER=0 width="20" height="18"><IMG SRC="/graphics/attach_none.gif" BORDER=0 width="8" height="18">';
</script>
<script>
if (stat.indexOf('high.gif') > -1 )
{
document.write ('<font face="Tahoma" size="2" color="#141D7C"><b>!!</b></font>');
}
<!-- Message List end--></tbody></table>
答案 0 :(得分:0)
也许尝试更改
一个href ..行到一个按钮或其他具有onClick事件的结构。 你这样做的方式,似乎只是href试图去那个不存在的网址(“”)
希望这是问题。
答案 1 :(得分:0)
更改显示
的行HtmlElementCollection links = Frame_A.Document.GetElementsByTagName("b");
到
HtmlElementCollection links = Frame_A.Document.GetElementsByTagName("a");
您使用粗体标记设置等于所有元素的链接。因为链接在粗体标记内,所以innertext条件通过。然后你试图点击一个粗体标签,这显然什么也没做。
答案 2 :(得分:0)
如果我理解正确,您想要点击服务器端的链接。 我认为最好的方法是使用JS。
例如,假设我们有一个链接(简单标记)和一个服务器端按钮。单击按钮时,您希望自动单击该链接。
解决方案: 我们需要从服务器端调用返回一个单击链接的Javascript代码。这个解决方案使用jQuery。
代码隐藏:
protected void btnTest_Click(object sender, EventArgs e)
{
ClientScript.RegisterClientScriptBlock(typeof(Page), "ClickOnLink", "<script type='text/javascript'>$(document).ready(function () { var link = $('#linkToClick'); link.click(); }); </script>");
}
页面标记:
<asp:Button runat="server" ID="btnTest" OnClick="btnTest_Click" Text="Go!"/>
<a id="linkToClick" href="#" onclick="alert('Hi, Im clicked'); return false;">Click to alert</a>
答案 3 :(得分:0)
你总是可以做旧学校:用鼠标模拟输入。
首先,获取链接的可能性 - 在其ClientRectangle中使用一些点(中间工作正常)http://msdn.microsoft.com/de-de/library/system.windows.forms.htmlelement.clientrectangle.aspx
接下来,将鼠标移动到该点Simulating mouse movement (C#)
并模拟点击How to simulate Mouse Click in C#?
重要提示:这些链接必须在屏幕上,因此要使您的HTML元素足够大或插入一些聪明的逻辑来滚动..(或只是使用ScrollIntoView http://msdn.microsoft.com/de-de/library/system.windows.forms.htmlelement.scrollintoview.aspx)
答案 4 :(得分:0)
这里有两件事:
并且,是的,用户脚本可能是一种可能的解决方案。
P.S。如果我错了,请纠正我。
编辑: JavaScript引擎是浏览器的一个组件,通常与它捆绑在一起。它负责页面上的所有JavaScript。现在,cURL,或WebClient或wget没有这个引擎。他们只是提取简单的HTML内容。因此,自动化需要JavaScript的东西的更好选择是用户脚本。如果您之前没有听说过,那么用户脚本就是一段可以在您指定的页面上执行的JavaScript代码,允许您在加载后立即在页面上运行代码。查看greasemonkey和userscripts。如果您仍想了解使用JavaScript引擎,则应等待其他人回复该主题。我不太了解以独立方式使用它。