2

首先,对不起我的英语不好。

问题很简单。我想点击 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++;
            }

它想点击(我看到它发生在调试中,当我点击一个消息框时,会出现消息框),但网页没有反应。

这是在网页上的标签:

<b><a href="" onclick="OnPhoenixRead('/mail/MessageRead?sid=7613BA4BF987D55FD171D53FAA24A259C7FDE435&amp;userid=*******&amp;seq=+Q&amp;auth=+A&amp;srcfolder=INBOX&amp;uid=3291&amp;srch=0&amp;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">&nbsp;<a href="" onclick="NavA('/mail/MessageSort?sid=3B886D11EEAAF546F83EFAA8506E56BC30949BC9&amp;userid=marcmeesters%40telfort.nl&amp;seq=+Q&amp;auth=+A&amp;srcfolder=INBOX&amp;sort=1&amp;style=default&amp;start=100&amp;end=1'); return false">Van&nbsp;</a>&nbsp;</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&amp;userid=marcmeesters%40telfort.nl&amp;seq=+Q&amp;auth=+A&amp;srcfolder=INBOX&amp;sort=5&amp;style=default&amp;start=100&amp;end=1'); return false">Onderwerp&nbsp;</a>&nbsp;</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&amp;userid=marcmeesters%40telfort.nl&amp;seq=+Q&amp;auth=+A&amp;srcfolder=INBOX&amp;sort=7&amp;style=default&amp;start=100&amp;end=1'); return false">Ontvangen&nbsp;</a>&nbsp;</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&amp;userid=marcmeesters%40telfort.nl&amp;seq=+Q&amp;auth=+A&amp;srcfolder=INBOX&amp;sort=9&amp;style=default&amp;start=100&amp;end=1'); return false">Grootte&nbsp;</a>&nbsp;</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">&nbsp;&nbsp;<b><a href="" onclick="OnPhoenixRead('/mail/MessageRead?sid=3B886D11EEAAF546F83EFAA8506E56BC30949BC9&amp;userid=marcmeesters%40telfort.nl&amp;seq=+Q&amp;auth=+A&amp;srcfolder=INBOX&amp;uid=3330&amp;srch=0&amp;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">&nbsp;&nbsp;<b><a href="" onclick="OnPhoenixRead('/mail/MessageRead?sid=3B886D11EEAAF546F83EFAA8506E56BC30949BC9&amp;userid=marcmeesters%40telfort.nl&amp;seq=+Q&amp;auth=+A&amp;srcfolder=INBOX&amp;uid=3330&amp;srch=0&amp;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">&nbsp;&nbsp;<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">&nbsp;&nbsp;<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>
4

5 回答 5

0

也许尝试改变

将 href .. 行插入按钮或其他具有 onClick 事件的结构中。你这样做的方式,似乎只是 href 试图转到不存在的 url ("")

希望这是问题所在。

于 2012-07-18T17:35:03.263 回答
0

更改显示的行

HtmlElementCollection links = Frame_A.Document.GetElementsByTagName("b");

HtmlElementCollection links = Frame_A.Document.GetElementsByTagName("a");

您设置的链接等于所有带有粗体标签的元素。因为链接在粗体标记内,内部文本条件通过。然后,您尝试单击一个粗体标记,这显然没有任何作用。

于 2012-07-30T14:56:42.567 回答
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>
于 2012-08-03T08:42:11.150 回答
0

你总是可以做到老派:用鼠标模拟输入。

首先,获取链接的位置 - 在其 ClientRectangle 中使用某个点(中间效果很好)http://msdn.microsoft.com/de-de/library/system.windows.forms.htmlelement.clientrectangle.aspx

接下来,将鼠标移动到该点模拟鼠标移动(C#)

并模拟点击如何在 C# 中模拟鼠标点击?

重要提示:这些链接必须在屏幕上,因此使您的 HTML 元素足够大或插入一些巧妙的逻辑来滚动..(或简单地使用 ScrollIntoView http://msdn.microsoft.com/de-de/library/system。 windows.forms.htmlelement.scrollintoview.aspx )

于 2012-08-03T10:05:10.697 回答
0

这里有两件事:

  1. 您想单击链接转到页面。
  2. 您想触发链接的 onClick 事件。

第一个是小菜一碟。如果你想要第二个,你正在寻找一个用于 c# 的 javascript 引擎:D

而且,是的,用户脚本可能是一个可能的解决方案。

ps如果我错了,请纠正我。

编辑:JavaScript 引擎是浏览器的一个组件,通常与它捆绑在一起。它负责页面上的所有 JavaScript。现在,cURL,或 WebClient 或 wget 没有这个引擎。他们只是为您获取纯 html 内容。因此,自动化需要 JavaScript 的东西的更好选择是用户脚本。如果您以前没有听说过用户脚本,那么它是一段 javascript 代码,可以在您指定的页面上执行,从而允许您在加载页面后立即在页面上运行代码。查看greasemonkey用户脚本。如果您仍然想了解如何使用 JavaScript 引擎,您应该等待其他人对该主题做出回应。我对以独立方式使用一个没有太多想法。

于 2012-08-03T10:19:56.317 回答