WebBrowser 页面控制
HTML5 页面单页应用,我们需要触发Click事件,并且Click完毕后再触发下个Click。
InvokeMember
具体写法如下:
public partial class Frm_WebBrowser : Form { public Frm_WebBrowser() { InitializeComponent(); this.webBrowser1.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser1_DocumentCompleted); this.webBrowser1.Navigated += new System.Windows.Forms.WebBrowserNavigatedEventHandler(this.webBrowser1_Navigated); } private bool flg_tag = false; private string tagurl = null; private void Form2_Load(object sender, EventArgs e) { HtmlElement Html_navigation_cont = webBrowser1.Document.GetElementById("content-navigation-panel"); if (Html_navigation_cont == null) { return; } while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } Regex reg = new Regex("scroll-to-frx[0-9]{1,10}"); MatchCollection mLink = reg.Matches(Html_navigation_cont.OuterHtml); //循环点击,需要等点击完毕之后才继续点击. for (int i = 0; i < mLink.Count; i++) { HtmlElement Tag_a = webBrowser1.Document.GetElementById(mLink[i].Value); Tag_a.InvokeMember("click"); while (!flg_tag) { //等待调用完毕后往下走 //之后触发 Navigated,DocumentCompleted 事件 Application.DoEvents(); } } } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (e.Url.ToString() == tagurl) { flg_tag = true; } } private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { tagurl = e.Url.ToString(); } }
javascript 注入,有时候需要注入段javascript 来控制网页
InvokeScript
var htmlDoc = (IHTMLDocument3)webBrowser1.Document.DomDocument; HTMLHeadElement head = htmlDoc.getElementsByTagName("head").Cast<HTMLHeadElement>().First(); var script = (IHTMLScriptElement)((IHTMLDocument2)htmlDoc).createElement("script"); script.text = "window.cc = function(){ alert('test'); }"; head.appendChild((IHTMLDOMNode)script);
webBrowser1.Document.InvokeScript("cc");
浙公网安备 33010602011771号