从C#控制IE?

时间:2009-06-14 08:26:02

标签: c# internet-explorer com

如何控制IE表单C#?我知道通过COM你可以做各种有趣的事情,但是一旦我将引用导入到我的项目中,查看 SHDocVw 命名空间似乎没有那么多方法。例如,如何强制单击按钮?或者设置或读取页面上特定控件的值?一般来说,如何通过.NET单独控制IE中的对象?

3 个答案:

答案 0 :(得分:4)

以下是我编写的用于控制IE的代码的一些示例,也许它可以提供帮助:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

//...

void SetField(WebBrowser wb, string formname, string fieldname, string fieldvalue) {
  HtmlElement f = wb.Document.Forms[formname].All[fieldname];
  f.SetAttribute("value", fieldvalue);
}

void SetRadio(WebBrowser wb, string formname, string fieldname, bool isChecked) {
  HtmlElement f = wb.Document.Forms[formname].All[fieldname];
  f.SetAttribute("checked", isChecked ? "True" : "False");
}

void SubmitForm(WebBrowser wb, string formname) {
  HtmlElement f = wb.Document.Forms[formname];
  f.InvokeMember("submit");
}

void ClickButtonAndWait(WebBrowser wb, string buttonname,int timeOut) {
  HtmlElement f = wb.Document.All[buttonname];
  webReady = false;
  f.InvokeMember("click");
  DateTime endTime = DateTime.Now.AddSeconds(timeOut);
  bool finished = false;
  while (!finished) {
    if (webReady)
      finished = true;
    Application.DoEvents();
    if (aborted)
      throw new EUserAborted();
    Thread.Sleep(50);
    if ((timeOut != 0) && (DateTime.Now>endTime)) {
      finished = true;
    }
  }
}

void ClickButtonAndWait(WebBrowser wb, string buttonname) {
  ClickButtonAndWait(wb, buttonname, 0);
}

void Navigate(string url,int timeOut) {
  webReady = false;
  webBrowser1.Navigate(url);
  DateTime endTime = DateTime.Now.AddSeconds(timeOut);
  bool finished = false;
  while (!finished) {
    if (webReady)
      finished = true;
    Application.DoEvents();
    if (aborted)
      throw new EUserAborted();
    Thread.Sleep(50);
    if ((timeOut != 0) && (DateTime.Now > endTime)) {
      finished = true;
    }
  }
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
  webReady = true;
}

答案 1 :(得分:1)

This可能会有所帮助。

答案 2 :(得分:0)

This也许是个好地方。我知道它的目标是单元测试,但它可以自动控制IE和Firefox,它是开源的,所以你可以下载代码来看看它们是如何做到的。

希望有所帮助