日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#获取网页中某个元素的位置,并模拟点击

發布時間:2024/9/20 C# 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#获取网页中某个元素的位置,并模拟点击 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們在開發中,往往要得到網頁中某個元素的位置,并且點擊它。要模擬一次鼠標點擊并不難,只要調用一個API就行了,關鍵就是怎么樣得到這個元素的位置,還有判斷是否要滾動滾動條,要滾動多少行能讓元素顯示出來。當然我們可以動態改變它的CSS,讓它在特定的位置顯示出來,但這個方法只對比較簡單的網頁有效。

那我們怎么才能得到網頁的位置呢,首先我們來看一張圖片

從這里我們可以看到五個offset的屬性,這里我們主要利用offsetparent, offsetleft 和offsettop,我們用offsetparent得到元素offset的父元素,再循環,直到BODY為止。

首先我們引用windows\system32\mshtml.ltb這個文件,這樣我們才可以得到一些特殊的功能,這個庫的功能特別強大,如果自己要做HTML編輯器,可以利用這個庫和webBrowser結合,做出來的編輯器功能很強大,就是代碼有點不全WEB標準。然后我們要using mshtml;這樣以下的代碼才能正常運行。

代碼:

??????????? HTMLDocument doc = webBrowser1.Document.DomDocument as HTMLDocument;
??????????? //getElementsByName,getElementById 這里也可以用這兩個方法
??????????? IHTMLElementCollection els = doc.getElementsByTagName("a");
??????????? Point p = new Point();
??????????? foreach (IHTMLElement em in els)
??????????? {
??????????????? if ((em.getAttribute("href").ToString() == "javascript:fGoto()") && (em.innerText == "添加附件"))
??????????????? {????????????????????
??????????????????? IHTMLElement pem = em;
??????????????????? //元素中間
??????????????????? p.X = em.offsetWidth / 2;
??????????????????? p.Y = em.offsetHeight / 2;
??????????????????? do
??????????????????? {
??????????????????????? pem = pem.offsetParent;
??????????????????????? p.X += pem.offsetLeft;
??????????????????????? p.Y += pem.offsetTop;
??????????????????? } while (pem.tagName.ToLower() != "body");
??????????????????????em.scrollIntoView();//顯示元素
??????????????????? break;
??????????????? }
??????????? }

這樣我們已經得到了無素的位置,并已經顯示在瀏覽器的可見區域了,似乎我們用API就可以模擬點擊了,然而你測試的時候,發現情況并不是這樣的。為什么,接著往下看

這個坐標是屏幕坐標,從屏幕的左上角開始,有時你的瀏覽器并不是最大化的,即使是最大化也不一定窗體中只有webBrowser這個控件,就算只有這個控件,窗體的邊框等一系列的,也可能是你的鼠標不移動正確位置上。而且,如果頁面有滾動,我們也要得到滾動去的那一部分。

如果要點擊則必須要以下代碼:

????????????//被卷去的部分
??????????? int sl, st;
??????????? sl = int.Parse(doc.documentElement.getAttribute("ScrollLeft").ToString());
??????????? st = int.Parse(doc.documentElement.getAttribute("ScrollTop").ToString());??
????????????//加上窗體的位置及控件的位置及窗體邊框,30和8是窗體邊框???????????
??????????? p.X += em.offsetLeft + this.Left + webBrowser1.Left - sl + 8;??????????????
??????????? p.Y += em.offsetTop + this.Top + webBrowser1.Top + 30 - st;
????????????//定位鼠標
??????????? Cursor.Position = p;????????????
????????????//單擊
????????????mouse_event(6, 0, 0, 0, this.Handle);

這樣我們就可以點擊到我們需要點擊的元素了。關于mouse_event這個API請去看MSDN我網上的教程。Cursor.Position這個鼠標定位也可以用API函數SetCursorPos,但C#有這個東西就不必去調用了。

總結

以上是生活随笔為你收集整理的C#获取网页中某个元素的位置,并模拟点击的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。