C#在客户端与 JS 交互
说说背景吧,公司的EIP 说白 了 就是sharePoint 2007 当 文件服务器使用。 SharePoint 2007 会把 文档 做为2进制放在数据。 以致数据库文件巨大。
老板为了保证系统能正常使用, 命我吧数据缩小。 SharePoint 2007 的结构 不难,但保险起见, 还是通过它的 页面去删。
大量的文件在白天删 肯定会造成系统宕机。所以选择 晚上。
但是人又不能一直盯着,所以 用winform +webbrowser 的形式 写了个小程序, 然后用windows schedule 定时的去调用就搞定了 。
说说重点吧 :
首先在winform 上放上一个webbrowser, 吧 URL设置成我们EIP 回收站的地址。 当一面一旦加载 完毕, 就 调用 页面的JS 和自己写的 JS 方法, 提交表单。 然后程序退出。主要的思想是这个。 说说实现:
//获取页面指定控件 HtmlElementCollection webUser = webBrowser1.Document.All.GetElementsByName("selectall"); //webBrowser1.Document.InvokeScript("alert('111')"); //调用空间的方法, 如果有参数需要调用这个方法重载的一个函数 webUser[0].InvokeMember("click"); //嵌入自己的js 函数 HtmlElement ele = webBrowser1.Document.CreateElement("script"); ele.SetAttribute("type", "text/javascript"); ele.SetAttribute("text", @" function helloworld(){ var strItems = GetSelectedItems(); if (strItems == ''){ return; } document.forms['usrpage'].binitems.value = strItems; document.forms['usrpage'].actionID.value = 'Delete'; document.forms['usrpage'].submit(); } helloworld(); "); webBrowser1.Document.Body.AppendChild(ele);
全部代码:
using System; using System.IO; using System.Net; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace WindowsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Load += new EventHandler(Form1_Load); } void Form1_Load(object sender, EventArgs e) { } //根据Url地址得到网页的html源码 private string GetWebContent(string Url) { string strResult = ""; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); //声明一个HttpWebRequest请求 request.Timeout = 30000; //设置连接超时时间 request.Headers.Set("Pragma", "no-cache"); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream streamReceive = response.GetResponseStream(); Encoding encoding = Encoding.GetEncoding("GB2312"); StreamReader streamReader = new StreamReader(streamReceive, encoding); strResult = streamReader.ReadToEnd(); } catch { MessageBox.Show("出错"); } return strResult; } private void button1_Click(object sender, EventArgs e) { try { string Url = textBox1.Text; webBrowser1.Navigate(Url); //要抓取的URL地址 //webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); } catch (Exception ex) { MessageBox.Show(ex.Message); } } void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { //while (true) //{ //button2_Click(null, null); //Thread.Sleep(10000); //} } int iii = -1; private void button2_Click(object sender, EventArgs e) { HtmlElementCollection webUser = webBrowser1.Document.All.GetElementsByName("selectall"); //webBrowser1.Document.InvokeScript("alert('111')"); webUser[0].InvokeMember("click"); HtmlElement ele = webBrowser1.Document.CreateElement("script"); ele.SetAttribute("type", "text/javascript"); ele.SetAttribute("text", @" function helloworld(){ var strItems = GetSelectedItems(); if (strItems == ''){ return; } document.forms['usrpage'].binitems.value = strItems; document.forms['usrpage'].actionID.value = 'Delete'; document.forms['usrpage'].submit(); } helloworld(); "); webBrowser1.Document.Body.AppendChild(ele); // System.Environment.Exit(0); } private void test(object sender, WebBrowserDocumentCompletedEventArgs e) { //HtmlElementCollection webUser = webBrowser1.Document.All.GetElementsByName("User"); HtmlElementCollection webUser= webBrowser1.Document.All.GetElementsByName("selectall"); //if (iii < Convert.ToInt32(dataGridView1.Rows.Count.ToString())) //{ // this.dataGridView1.CurrentCell = this.dataGridView1[0,iii]; // webUser[0].InnerText = dataGridView1.CurrentCell.Value.ToString().Trim(); // HtmlElementCollection webSub = webBrowser1.Document.All.GetElementsByName("submitInvite"); // webSub[0].InvokeMember("click"); //} //else //{ // MessageBox.Show("弄完了!"); //} } } }