代码如下:
HtmlDocument html = webbrowser1.Document;
FindHelper.FindControlByAttValue("a", "class", "W_btn_d", "登录", html.All)
public static HtmlElement FindControlByAttValue(string Tag, string AttName, string AttValue, string innerText, HtmlElementCollection listOfHtmlControls)
{
try
{
int aa = listOfHtmlControls.Count;
foreach (HtmlElement element in listOfHtmlControls)
{
string str = element.OuterHtml;
if (!string.IsNullOrEmpty(element.OuterHtml))
{
string tagName = element.TagName;
if (element.TagName.ToLower() == Tag.ToLower())
{
string OuterHtml = element.OuterHtml;
if (OuterHtml == null) continue;
OuterHtml = OuterHtml.Substring(0, OuterHtml.IndexOf(">"));
OuterHtml = OuterHtml.ToLower();
if (OuterHtml.Contains(AttName.ToLower()) && OuterHtml.Contains(AttValue.ToLower()))
{
string e = element.InnerText;
if (e == null) e = "";
if (e.Trim().ToLower().Contains(innerText.ToLower()))
{
return element;
}
}
}
}
}
}
程序刚开始没问题,运行一段时间会报这个错,格式转换的不对?要怎么做?
报错:
Unable to cast COM object of type 'mshtml.HTMLDocumentClass' to interface type 'IHTMLDocument2'.
(Exception from HRESULT: 0x80028019 (TYPE_E_UNSUPFORMAT)).
at System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, Boolean& pfNeedsRelease)
at System.Windows.Forms.UnsafeNativeMethods.IHTMLDocument2.GetAll()
at System.Windows.Forms.HtmlDocument.get_All()
mshtml.HTMLDocumentClass不就是继承IHTMLDocument2接口的吗?不会你自己也定义了一个IHTMLDocument2接口吧?还是引入了不同版本的 Microsoft HTML Object Library COM程序集啊?可以开启vs的异常,看看具体是那段代码抛的异常。
怀疑是不同版本的 Microsoft HTML Object Library COM程序集问题,因为程序在个别服务器上会报错,别的服务器没有问题。
请问下如何查看Microsoft HTML Object Library COM程序集版本?
@t-h: 在vs的引用中就可以看
或者你使用Reflector来反编译看
@滴答的雨: 最后更新了下服务器上ie版本为最新版
用 IHTMLDocument2 html = webBrowser1.Document.DomDocument as IHTMLDocument2
试试