這一個部分咱們來說用SHDocVw對IE進行操做。php
接下來的幾篇文章咱們都會以Console Application來向你們介紹Web自動化的一些基礎。html
如下的代碼在VS2005上經過測試,相信在VS2005 express已經VS2008上也能夠經過,不過在VS2003上可能要稍微修改。使用vs2003的朋友,建議你們使用VS2005 express。express
瀏覽器使用了IE7。 IE6以及更低版本並無作過試驗。瀏覽器
首先咱們打開VS2005,創建一個Console Application項目:框架
新建一個命令行工程函數
接下來咱們須要包含兩個引用了,就是mshtml和SHDocVw。關於這兩個dll的簡單介紹,請參見:本身動手寫Web自動化測試框架(1) :概述測試
包含mshtml引用網站
第二個SHDocVw必定要在下面這個路徑找:(C:\Program Files\Microsoft Visual Studio 8\Application\PreEmptive Solutions\Dotfuscator Community Edition).net
包含SHDocVw命令行
包含兩個類庫以後,咱們就可使用C#來對IE進行一些基本的操做了。
咱們要添加幾個命名空間,來簡化咱們下面的代碼:
using System.Diagnostics; //要用到進程來啓動IE窗口 using System.Threading; //使用Thread.Sleep來等待 using SHDocVw; using mshtml; |
除了mshtml和SHDocVw以外,咱們還使用了其餘的兩個命名空間,由於咱們要使用System.Diagnostics.Process類啓動IE進程,而且獲取IE的進程信息,使用System.Threading.Thread的sleep()方法等待。
接下來,咱們就能夠寫入代碼了:
Console.WriteLine("Launching IE ..."); Process p = Process.Start("iexplore.exe","about:blank"); Thread.Sleep(3000); |
第一步,咱們要打開IE進程,這裏使用了Process的Start靜態方法生成一個進程。很好理解,傳入了兩個參數,一個是IE的exe文件名,也能夠寫入完整地址;第二個參數是IE本身的參數,表示要打開的連接地址,咱們在這裏使用一個空白頁面。
接下來的事情就是等待,等待IE進程啓動,這裏爲了讓你們更快的抓到本質,沒有使用很複雜的等待代碼,只是很機械的等待了3秒鐘,你們能夠根據本身機器的情況進行修改。
這裏爲了讓你們能夠更好的理解,我插一點Process的講解,若是你們對上面的Process打開沒有任何問題的話,直接跳過往下就行了。這裏Process.Start()方法其實有4個重載,咱們使用了第三個重載函數,也就是第一個輸入文件名,第二個輸入參數,咱們能夠在運行命令行中打"iexplore about:blank"直接打開一個空的IE窗口,也能夠打"iexplorehttp://www.colblog.net/"直接打開一個瀏覽到目標網站的IE窗口。
IE啓動了,咱們接下來的事情就是把IE附加給SHDocVw.InternetExlporer以便咱們能夠進行接下來的操做。
Console.WriteLine("Attaching to IE ..."); { |
首先,咱們先聲明瞭一個InternetExplorer的引用,這裏設爲空引用。他之後會存儲咱們的IE實例,而且經過它,咱們能夠操縱IE進行一些操做。
而後咱們判斷剛剛啓動的進程p是否是爲空,若是爲空,就報錯,說明不能啓動IE(Can not Launch IE)。若是不爲空,就能夠進行下面的操做了。
注意,這裏咱們用了比較特殊的方法來獲得InternetExplorer實例,就是經過比較當前Windows中已經存在的進程編號,來找到剛剛啓動的 IE實例,用allBrowser來獲取全部的Shell Windows,而後逐個和剛剛啓動的進程p的Handle號進行比較,若是相同,就說明是咱們想要的進程,把他的InternetExplorer實例賦給咱們ie。
最後咱們判斷一下ie引用是否有了實例,由於剛剛的循環咱們沒法保證必定有實例被賦給ie,這裏若是檢查失敗,就報錯返回。
經過上面的幾步,咱們已經啓動而且拿到了InternetExplorer的實例,咱們能夠對這個實例進行一些操做了。舉個最簡單的例子就是瀏覽到某一個網頁,下面的代碼讓這個瀏覽器指向了個人博客地址:
Console.WriteLine("Navigating ..."); object o = null; ie.Navigate("www.colblog.net", ref o, ref o, ref o, ref o); |
這裏都很簡單,只有一個讓人費解的地方就是object o。由於ie.Navigate須要5個參數,後面的4個是可選參數,因此咱們只須要象徵性的傳入一個null就能夠了,有一個同事問我爲啥不直接傳 null,還要申請一個object,其實緣由就在於參數是ref的,必須有一個引用被傳進去才行。關於後面的四個參數的講解請看msdn上的講解。
運行一下就發現,程序順利的打開一個IE窗口,而且連接到個人博客上
下面附上源代碼,不過須要登陸才能夠拿到,各位多多包含
下一次咱們來了解獲得網頁中的各個Element。