C# WebBrowser 执行自定义JS
最近在做一个项目,要用C#来自动提交一些网页表单,中间碰到了一个问题就是无法让WebBrowser执行自己定义的js, 有一些其他的DOM组件类似MSHTML,IEBrowser可以帮助实现,但是性格所致我还是尽量想不用太多的组件。 于是努力研究WebBrowser。
WebBrowser 有两个方法可以调用网页里面的js,但是那是网站的js,加入我想自己执行一串js代码好像都不行:
1. HtmlElement.InvokeMember, 只能执行一个HtmlElement对象的一个事件,比如click事件。
2. HtmlDocument.InvokeScript, 可以通过一个js的函数名称调用js,但是我们自己的js没有函数名称就算有函数名称也加载不进去WebBrowser里面。
怎么办?
后来在另外一个项目写js的时候意外发现了,javascript里面不是可以用eval来调用一段js代码吗,如果我们把eval当做函数名,利用上面的InvokeScript 不就可以搞定了:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace WindowsFormsApplication1 12 { 13 public partial class Form1 : Form 14 { 15 WebBrowser webBrowser1 = new WebBrowser(); 16 public Form1() 17 { 18 InitializeComponent(); 19 webBrowser1.Dock = DockStyle.Fill; 20 this.Controls.Add(webBrowser1); 21 webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted; 22 } 23 24 private void Form1_Load(object sender, EventArgs e) 25 { 26 webBrowser1.Navigate("http://www.baidu.com/"); 27 //MessageBox.Show(webBrowser1.Document.GetElementById("u").InnerHtml); 28 } 29 30 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 31 { 32 webBrowser1.Document.InvokeScript("eval", new object[] { "alert('FFFFFFFFFFFUUUUUUUUUUCCCCCCCCCCCCCC');"}); 33 } 34 } 35 }