我正在通过C#和WebBrowser进行一些Web自动化。有一个我需要“点击”的链接,但由于它触发了一个Javascript函数,显然需要执行代码而不是单击该元素(即element.InvokeMember(“click”))。这是元素的href,它打开一个Ajax表单:
javascript:__doPostBack("ctl00$cphMain$lnkNameserverUpdate", "")
我试过了:
webBrowser1.Document.InvokeScript("javascript:__doPostBack", new object[] { "ctl00$cphMain$lnkNameserverUpdate", "" });
和
webBrowser1.Document.InvokeScript("__doPostBack", new object[] { "ctl00$cphMain$lnkNameserverUpdate", "" });
以及其他一些事情。代码被命中,但脚本不会被触发。任何想法都会受到最高的赞赏。
格雷格
BTW这是完整的元素,以防它有用:
<a href="javascript:__doPostBack('ctl00$cphMain$lnkNameserverUpdate','')" onmouseout="window.status=''; return true" onmouseover="window.status='Update Nameservers'; return true" id="ctl00_cphMain_lnkNameserverUpdate" onclick="javascript:Layout.ChangeIframeToSrc('DropinLoad_Domain.aspx?controlRequest=ActionNameserversWithIP');return false;">NS51.DOMAINCONTROL.COM<br/>NS52.DOMAINCONTROL.COM<br/></a>
答案 0 :(得分:0)
看一下这个链接:
http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting.aspx
我过去实际上已经使用过它了,它完美无缺。
答案 1 :(得分:0)
HtmlDocument doc = browser.Document;
HtmlElement head = doc.GetElementsByTagName("head")[0];
HtmlElement s = doc.CreateElement("script");
s.SetAttribute("text","function sayhello() { alert('hello'); }");
head.AppendChild(s);
browser.Document.InvokeScript("sayHello");