2012-05-08 83 views
3

我一直在尋找到試圖讓我的C++應用程序執行以下操作:控制的Internet Explorer,以輸入用戶名/密碼

  1. 打開Internet Explorer
  2. 打開網頁
  3. 輸入一個名稱,密碼輸入到網頁中的特定形式
  4. 點擊提交網頁上的按鈕,打開一個新頁面

從我的變奏在互聯網上興奮似乎使用COM可能會使這成爲可能,雖然我可能是不正確的。我正在盡我所能學習COM,但有些幫助會很大。我正在尋找這樣做,而不使用MFC。

我注意到了this問題,我喜歡尋找什麼,但我無法理解建議的解決方案。例如,我的工具箱中沒有IWebBrowser2選項。

編輯:

爲了使我的問題更清楚,我有這個任務完成的C#版本,只需運行編碼的UI測試但這不會使用C++工作。我正在尋找打開IE瀏覽器(不是在應用程序本身),找到用戶名和密碼錶單,傳遞它們的字符串,然後找到頁面上的提交按鈕,然後單擊它。

+0

我已經刪除了我的答案 - 表格填充是一個非常難的問題,因爲你必須找到正確的框來填寫第一個地方!我沒有答案,但你可能想編輯這個問題,讓你更清楚地看到表單提交,而不僅僅是HTTP基本認證。 – Flexo

+0

謝謝,我試圖讓我的問題更清楚。 – L337BEAN

+0

這是一個現有的網頁嗎?更簡單的解決方案可能是打開_otherother_網頁並在URL中編碼用戶名和認證字符串*。 (*不是密碼本身,這不是安全的,但基本上是一個單向的密碼哈希以證明你知道它)。 – MSalters

回答

1

這是從C++很可能。你將不得不潛入winapi來做一些按鍵操作以及窗口處理。

我不會進入所有的代碼,但你必須做一些這樣的:

  • 啓動IE瀏覽器(如果你給它與網頁中的命令行參數,它會 打開該頁面)。
  • 確保IE窗口集中(或只是等待 如果你想保持它的簡單,或使用窗口的API來遍歷每個 開放HANDLE,找到你想要的窗口)
  • 使用SendInput發送Alt + D(獲得焦點地址欄,在Firefox這將是一個CTRL + L代替)
  • 使用SendInputjavascript injection修改DOM,你也可以submit the form(後一切都和你想的話)使用必要的
  • 以上JS注射能力年。
+0

謝謝@ g19fanatic。這是一個有趣的方法,我會看看。 – L337BEAN

-1

你想要做什麼沒有多大意義。

有很多API可以將瀏覽器視圖嵌入到您的程序中。例如Qt提供了這個。

然後你可以自己做你的HTTP POST請求,並顯示你在瀏覽器視圖中得到的答案。

這是一個更清潔的解決方案。

專業提示:請勿使用Internet Explorer。

+0

我不想先在應用程序中打開瀏覽器。我編輯了我的原始問題以使其更清楚。正如awoodland指出的那樣,我正在尋求在網頁上進行表格歸檔。 – L337BEAN

0

是的,這是可能的,但你必須在你的應用程序中嵌入一個Web瀏覽器控件,而且它不是直截了當的(我不認爲你可以通過COM在Internet Explorer的外部實例中自動執行DHTML)。

我看到你不想使用MFC,這使問題更加複雜化。也許你可以通過ATL來實現,我建議不要在沒有框架的情況下嘗試。

如果您可以使用MFC,那麼您可以使用CDHtmlDialog表單並訪問底層COM接口以自動執行操作。

在過去,我開發了使用HTML作爲其用戶界面的MFC應用程序,但是我用了CDHTMLView類,你可以在這裏找到:http://www.codeproject.com/Articles/1783/Integrating-DHTML-into-MFC-Views

你可以使用這個作爲切入點,學習如何處理DHTML事件以及如何玩弄IWebBrowser2界面。

+0

如果可能的話,我可能會用ATL來做這件事。你知道任何一個體面的網站學習一些ATL嗎? – L337BEAN

+0

你實際上可以通過MSW的IE瀏覽器訪問DOM; http://support.microsoft.com/kb/249232 –

+0

@AlexK .:哇,這很酷,並且自XP以來,MSAA可以集成到操作系統中。我會更新答案。 – Wizard79

0

你應該看看WebDriver,它能夠完全按照你所描述的來做。請參閱(http://code.google。com/p/selenium/wiki/InternetExplorerDriverInternals)獲取關於InternetExplorerDriver內部的更多信息。即使你不能直接使用這個項目,你也可以瀏覽源代碼,以更好地瞭解你想要做什麼。

+0

謝謝你的鏈接@Mike。我試圖做到這一點,沒有框架,儘管如此我會嘗試g19fanatics方法,看看我能否得到想要的結果。 – L337BEAN

相關問題