最近在公司實習,每次上班都要打卡,初來乍到,老是忘了!無奈寫了一個定時上公司OA打卡的程式!寫的過程中發現公司OA系統(網站)上的按鈕(圖片、超連結)很難Find,分析了一下網頁源碼,發現公司OA系統全是用Frame布局的,為了能精準定位,我用遞迴遍曆了一下OA系統的所有框,把每個架構裡的Html代碼都挖掘出來!以便定位自己要擷取的元素!
// webBrowser先設定Url,然後填充資料(賬戶和密碼)實現自動登入OA,等網站載入完畢之後開始分析架構
// 這裡我把架構的結構放到了樹形控制項TreeView上
private Hashtable htFrame = new Hashtable(); // key:架構名 value:架構對象
private Hashtable htFrameContent = new Hashtable(); // key:架構名 value:架構內的Html代碼
private void button1_Click(object sender, EventArgs e)
{
treeView1.Nodes.Clear();
htFrame.Clear();
htFrameContent.Clear();
treeView1.Nodes.Add("Frames"); // 根節點
FillFrame(treeView1.Nodes[0],webBrowser1.Document.Window.Frames); // 調用
}
// 遍曆所有架構
private void FillFrame(TreeNode tn, HtmlWindowCollection hwc)
{
if (hwc == null) return;
foreach (HtmlWindow hw in hwc)
{
TreeNode tmpNode = tn.Nodes.Add(tn.Text + "--" +hw.Name); // 防止不同架構內的子架構同名
htFrame.Add(tmpNode.Text, hw); // 架構名和架構對象
htFrameContent.Add(tmpNode.Text, hw.Document.Body.InnerHtml); // 架構名和架構內的Html
if (hw.Frames.Count > 0) FillFrame(tmpNode, hw.Frames);
}
}