2017/02/01

【自動化網頁】Watin瀏覽器尋找元件技巧

首先,大部分的網頁元件都可以被Watin辨識搜尋到。
可以從這裡找到各種標籤對應的名稱 。
如果沒有符合條件的標籤,也可以由以下方式尋找,例如h1標籤:

_IE.ElementWithTag("h1", Find.First)

預設情況下,會以標籤中的ID參數來尋找,例如最簡單的尋找連結:
browser.Link(linkId);
等同於下面這一句的效果:
browser.Link(Find.ByID(linkId));
另外還有很多的參數搜尋方式,以下列出常用的:
ByAlt
ByClass
ById
ByName
BySrc
ByText
ByUrl
ByValue (沒有任何符合條件的參數時使用)
First (直接找第一個符合標籤條件的元素)
ByIndex(1) (第二個符合標籤條件的元素)

要注意的是上述的方法旨在尋找第一個符合條件的標籤,因此無法動態挑出多個標籤,如果有多個目標時,可使用複數目標標籤,但這個條件下還要再加上Filter。
_IE.Links.Filter(Find.ByID(linkId))

配合foreach迴圈,便可以更簡單地進行操作。
foreach(Link _Link in _IE.Links.Filter(Find.ByID(linkId))){ ... }

最後,如果標籤中沒有特別明顯的特徵,也可以只尋找部分的字串
_IE.Image(Find.BySrc(src => src.Contains("key")))

Read More...

2017/01/31

【自動化網頁】Watin瀏覽器基本設定

以下設定將會直接影響整個專案,無法分別對每個IE實體進行不同設定

預設情況下,Watin在開啟網頁時會將滑鼠游標自動移動至視窗左上角,以避免額外的操作影響。但當使用者需要動態進行多個視窗進行的時候,使用者的視窗會一直被移動到視窗左上,變得很難進行其他作業。好在可以由以下方式取消這個動作。

Settings.AutoMoveMousePointerToTopLeft = false; //不移動滑鼠

另外一個會經常遇到的問題是,有時不小心移動或是點擊了Watin操作中的視窗,會造成失焦的問題,這邊建議可以直接隱藏產生的瀏覽器視窗。
這樣除了不會打擾程式之外,也可以做出更少介面更簡單的程式。
但是這樣一來也會讓使用者無法看到目前的操作情況,因此建議在除錯與編程階段先不要使用這個設定
Settings.MakeNewIeInstanceVisible = false;      //不顯示視窗

最後,Watin內建兩種逾時錯誤,預設時間皆為等待30秒,如果確定該網頁不會需要讀取這麼久的話,可以透過以下設定減少秒數。
Settings.WaitForCompleteTimeOut = 10;           //等待網頁完成逾時秒數
Settings.WaitUntilExistsTimeOut = 10;           //等待元件出現逾時秒數

Read More...

【自動化網頁】使用C#的WebClient下載網路資源

自動化網頁可以實現的功能除了自動操作填寫表單之外,自動下載資源也是很方便的功能,很可惜的是Watin並沒有包含這個功能,不過如果只是簡單的下載檔案,也可以直接透過C#本身的WebClient服務來實現。

1.命名空間

using System.Net;

2.定義與釋放資源
WebClient _myWebClient = new WebClient();
_myWebClient.Dispose();

3.同步下載網路資源
_myWebClient.DownloadFile("https://Source.jpg", "D:\\NewName.jpg");
其中參數1為欲下載的網路資源完整路徑,參數2為本機下載路徑以及完整檔名。

Read More...

2017/01/27

【自動化網頁】於C#視窗程式專案安裝Watin

透過Watin套件可以實做自動化網頁操作的程式。 目前對於IE的支援比較穩定,操作其他瀏覽器暫時還有點困難。
1.於專案管理原中按右鍵選擇『管理NuGet套件...』


2.於『瀏覽』標籤中搜尋『watin』


3.選擇第一個出現的Watin套件


4.安裝穩定的版本即可



5.之後安裝程式便會自動執行,至此安裝完成之後專案還不能正常運行Watin套件,需要將必要的DLL移動到執行檔資料夾之下。
開啟專案資料夾底下的packages\WatiN.2.1.0\lib\net40資料夾,並將『Interop.SHDocVw.dll』以及『Microsoft.mshtml.dll』兩個檔案複製至專案生成的執行檔資料夾,缺少這兩個檔案將會使Watin無法正常運行。
6.為了方便呼叫WatiN,於命名空間宣告中宣告使用『WatiN.Core』。


7.這一個宣告將會造成WatiN的Form與Windows的Form命名衝突,因此於Form的宣告時皆必須清楚標明完整的命名空間。



8.如此一來便可以使用最基本的功能了。

Read More...