首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ Builder 利用 MSHTML 自動化網頁表單填寫與送出

     編輯:關於C++

示範在 C++ Builder 中使用 Mshtml.h 介面,透過 CppWebBrowser1 元件存取網頁 DOM,定位表單與輸入元素,自動填寫欄位並送出。核心流程:取得 IHTMLDocument2、列舉 forms 集合、依索引取得目標表單、查詢 IHTMLFormElement、再依索引取得輸入框與文字區域、設定 value 屬性、呼叫 submit()。

關鍵程式碼片段

IHTMLDocument2 *pHTMLDoc = NULL;
LPDISPATCH pDisp = CppWebBrowser1->Document;
if (pDisp && SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc))) {
    IHTMLElementCollection *pelement;
    if (SUCCEEDED(pHTMLDoc->get_forms(&pelement))) {
        tagVARIANT a, i; a.vt = VT_UI4; a.lVal = 0; // 第一個表單
        if (SUCCEEDED(pelement->item(a, i, &pDisp))) {
            IHTMLFormElement* pFormElem = NULL;
            if (pDisp && SUCCEEDED(pDisp->QueryInterface(IID_IHTMLFormElement, (LPVOID*)&pFormElem))) {
                LPDISPATCH pDisp_msg = NULL;
                tagVARIANT phone, msg, empty;
                phone.vt = VT_UI4; phone.lVal = 0; // 第一個輸入框
                msg.vt = VT_UI4; msg.lVal = 1;     // 第二個文字區域
                if (SUCCEEDED(pFormElem->item(phone, empty, &pDisp)) &&
                    SUCCEEDED(pFormElem->item(msg, empty, &pDisp_msg))) {
                    IHTMLInputTextElement* phoneElem = NULL;
                    IHTMLTextAreaElement* msgElem = NULL;
                    if (SUCCEEDED(pDisp->QueryInterface(IID_IHTMLInputTextElement, (void**)&phoneElem)) &&
                        SUCCEEDED(pDisp_msg->QueryInterface(IID_IHTMLTextAreaElement, (void**)&msgElem))) {
                        phoneElem->put_value(SysAllocString(L"888888"));
                        msgElem->put_value(SysAllocString(L"你好"));
                        pFormElem->submit();
                        // 釋放所有介面指標...
                    }
                }
            }
        }
    }
}

實作重點

  • 嚴格檢查每個 QueryInterface 與 COM 方法回傳的 HRESULT,失敗即釋放資源並返回錯誤代碼。
  • 使用 tagVARIANT 指定集合索引,VT_UI4 表示無號整數索引。
  • 元素查詢順序:Document → forms 集合 → 表單 → 表單內元素集合 → 具體元素介面(IHTMLInputTextElement、IHTMLTextAreaElement)。
  • 所有 COM 介面指標用完必須 Release(),避免洩漏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved