【VBA研究】方法quit作用于IWebBrowser2失败怎么办

作者在使用VBA自动化读取网页数据时遇到一个问题,即调用IWebBrowser2对象的quit方法关闭IE浏览器时失败。尽管对象的其他属性仍可正常访问,但quit方法无法执行。最终找到的解决方案是通过调用特定方法来成功关闭IE浏览器。此问题可能不适用于其他类型的浏览器,需要进一步测试确认。
摘要由CSDN通过智能技术生成

作者:iamlaosong

用VBA编程实现自动读取网页数据,在读取过程中关闭网页时遇到这样一个错误:“ 方法quit作用IWebBrowser2失败”,无法执行quit方法,但其它属性没有问题,百思未得其解,其源代码如下:

Sub login3()
    Dim ie1 As Object

    lineno = [A65536].End(xlUp).Row      '行数
    For row1 = 2 To lineno
        ems_id = Trim(Cells(row1, 1))
        Set ie1 = CreateObject("InternetExplorer.Application")
        ie1.Visible = True
        ie1.navigate "http://10.3.10.83/ems/newsystem/thesecond/ttq/ttqMailquery.jsp"
        Do Until ie1.Readystate = 4
        DoEvents
        Loop
        ie1.document.Forms(0).All("mailNum").Value = ems_id
        ie1.document.Forms(0).submit
        If MsgBox("第" & row1 - 1 & "个邮件查询完毕,继续...", vbOKCancel, "AH&#x
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
IWebBrowser2 是一个 COM 接口,可以通过它来访问和控制 Internet Explorer (IE) 浏览器。下面是读取返回 HTML 的示例代码: ```c #include <windows.h> #include <exdisp.h> #include <mshtml.h> // 定义 IWebBrowser2 接口指针 IWebBrowser2 *pWebBrowser = NULL; // 定义事件 ID 和事件处理函数 const DISPID DOWNLOAD_COMPLETE = 104; void STDMETHODCALLTYPE OnDownloadComplete(IDispatch *pDisp, VARIANT *pvararg, unsigned int cvararg, unsigned int *rgdispid) { // 获取文档接口指针 IDispatch *pHtmlDoc = NULL; pWebBrowser->get_Document(&pHtmlDoc); // 将文档接口指针转换为 HTML 文档接口指针 IHTMLDocument2 *pHtmlDoc2 = NULL; HRESULT hr = pHtmlDoc->QueryInterface(IID_IHTMLDocument2, (void**)&pHtmlDoc2); if (SUCCEEDED(hr)) { // 获取 HTML 源码 BSTR bstrHtml; pHtmlDoc2->get_body()->get_outerHTML(&bstrHtml); // 输出 HTML 源码 wprintf(L"%s\n", bstrHtml); // 释放字符串内存 SysFreeString(bstrHtml); // 释放 HTML 文档接口指针 pHtmlDoc2->Release(); } // 释放文档接口指针 pHtmlDoc->Release(); } // 主函数 int main() { // 初始化 COM CoInitialize(NULL); // 创建 IE 实例 CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&pWebBrowser); // 显示 IE 窗口 pWebBrowser->put_Visible(VARIANT_TRUE); // 注册下载完成事件 IConnectionPointContainer *pCPC = NULL; pWebBrowser->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC); if (pCPC) { IConnectionPoint *pCP = NULL; pCPC->FindConnectionPoint(DIID_DWebBrowserEvents2, &pCP); if (pCP) { DWORD dwCookie = 0; pCP->Advise((IDispatch*)pWebBrowser, &dwCookie); pCP->Release(); } pCPC->Release(); } // 载入 URL VARIANT vEmpty; VariantInit(&vEmpty); pWebBrowser->Navigate(L"https://www.baidu.com/", &vEmpty, &vEmpty, &vEmpty, &vEmpty); // 等待下载完成事件 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } // 取消注册下载完成事件 pCPC = NULL; pWebBrowser->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC); if (pCPC) { IConnectionPoint *pCP = NULL; pCPC->FindConnectionPoint(DIID_DWebBrowserEvents2, &pCP); if (pCP) { DWORD dwCookie = 0; pCP->Unadvise(dwCookie); pCP->Release(); } pCPC->Release(); } // 释放 IE 实例 pWebBrowser->Quit(); pWebBrowser->Release(); // 反初始化 COM CoUninitialize(); return 0; } ``` 这段代码会打开一个 IE 窗口,访问百度首页,并在下载完成后输出 HTML 源码。其中,OnDownloadComplete() 函数是下载完成事件处理函数,用于获取文档接口指针并输出 HTML 源码。主函数中使用 Navigate() 方法载入 URL,然后等待下载完成事件,最后使用 Quit() 方法退出 IE。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值