傳統 IE 自動化登入需:Navigate 登入頁 → 等待載入 → 填表單 → 模擬點擊 → 等待跳轉。本文揭示 IWebBrowser2::Navigate 第 4 參數 PostData 的隱藏威力:直接攜帶 POST 資料導航,一次完成登入,無中間頁面閃爍,體驗更自然、速度更快、抗反爬蟲能力更強。
HRESULT Navigate(
BSTR URL,
VARIANT *Flags,
VARIANT *TargetFrameName,
VARIANT *PostData, // 關鍵!
VARIANT *Headers
);
MSDN 說明:PostData 必須為 VT_ARRAY | VT_UI1 的 SAFEARRAY,內容為原始 POST 體 (如 username=admin&password=123456),等同 HTML Form 提交。
HRESULT AutoLogin(IWebBrowser2* pBrowser, LPCWSTR url, LPCSTR postData)
{
// 1. 準備 SAFEARRAY (VT_UI1, 1 維)
SAFEARRAYBOUND bound = { static_cast(strlen(postData)), 0 };
CComSafeArray saData(bound);
memcpy(saData.GetData(), postData, bound.cElements);
// 2. 包裝成 VARIANT
CComVariant varPostData;
varPostData.vt = VT_ARRAY | VT_UI1;
varPostData.parray = saData.Detach(); // 所有權轉移
// 3. 呼叫 Navigate
CComVariant varEmpty;
return pBrowser->Navigate(CComBSTR(url), &varEmpty, &varEmpty, &varPostData, &varEmpty);
}
| 議題 | 處理方式 |
|---|---|
| 編碼 | POST 體需為 **URL Encoding (application/x-www-form-urlencoded)**,中文先 UTF-8 再 %XX。 |
| Cookie | 登入成功後,Cookie 會自動存入 IE Cookie Jar,後續導航自動攜帶。 |
| Headers | 第 5 參數可加 Content-Type: application/x-www-form-urlencoded、User-Agent、Referer 等,強烈建議補全。 |
| Redirect 處理 | Navigate 會自動追蹤 302/301,最終停留在登入後頁面,可監聽 DWebBrowserEvents2::NavigateComplete2 確認完成。 |
| 安全區域 | 目標網站需在「信任網站」或「區域網路」,否則 Protected Mode 可能阻擋跨區域導航/PostData。 |
| 指標 | DOM 填表 + Click | Navigate + PostData |
|---|---|---|
| 步驟數 | 5+ (導航、等待、查元素、填值、點擊、再等待) | 1 (單次 Navigate) |
| 頁面閃爍 | 明顯 (登入頁 → 目標頁) | 無 (直接進入目標頁) |
| 反自動化檢測 | 易被 JS 檢測 (無滑鼠軌跡、輸入速度) | 較難檢測 (類似直接表單提交) |
| 穩定性 | 依賴 DOM 結構,網頁改版即失效 | 僅依賴 Form 欄位名,相對穩定 |
| 適用場景 | 需執行 JS 邏輯 (如 RSA 加密、驗證碼) 的登入 | 純伺服器端驗證、無前端加密的傳統表單登入 |
IWebBrowser2::Navigate 的 PostData 參數是 IE 自動化的「隱藏神器」。掌握 SAFEARRAY 封裝與 Header 組裝,即可實現極速、無感、高成功率的自動登入。對於需整合大量舊系統單點登入 (SSO) 的企業級專案,此技術可大幅簡化流程、提升穩定性。