Ruft C #, um die Position eines Elements auf der Seite, und klicken Sie auf Simulation

Wir entwickeln, oft die Position eines Elements der Seite zu bekommen, und klicken Sie darauf. Um einen Mausklick zu simulieren ist nicht schwierig, solange ein API-Aufruf auf der Linie, der Schlüssel ist, wie die Position des Elements zu erhalten, sowie um festzustellen, ob oder ob nicht die Bildlaufleiste blättern zu blättern, wie viele Zeilen auf die Elemente machen angezeigt. Natürlich können wir dynamisch die CSS ändern, wird es in einer bestimmten Stelle angezeigt, aber diese Methode ist für relativ einfache Web-Seite nur dann wirksam.

Wie können wir es an Ort und Stelle auf der Seite bekommen wir einen ersten Blick auf ein Bild
 

Von hier aus können wir die Eigenschaften von fünf versetzt sehen, wo wir vor allem offset verwenden, und offsetleft offsetTop, wir offsetElternElement versetzt, Recycling, bis Körper.

Zuerst zitieren wir windows \ system32 \ mshtml.ltb diese Datei, so dass wir einige Besonderheiten bekommen, die Bibliothek verfügt über besonders stark, wenn sie HTML-Editor tun, können Sie diese Bibliothek und WebBrowser-Kombination verwenden, hergestellt aus Bearbeitung Funktion ist sehr mächtig, ist der Code ein wenig unvollständig Webstandards. Dann haben wir mshtml zu verwenden, so dass der folgende Code ordnungsgemäß ausgeführt wird.

Code:

            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;
                }
            }

So haben wir keine Toplage bekommen, und wurden im sichtbaren Bereich des Browsers, und es scheint, dass wir die API klicken, können simulieren gezeigt, aber wenn Sie testen und festgestellt, dass nicht der Fall ist. Warum, dann nach unten schauen

Die Koordinaten sind Bildschirmkoordinaten, von der oberen linken Ecke des Bildschirms starten, manchmal Ihr Browser nicht maximiert wird, auch wenn die Form WebBrowser dieser Steuerung nur maximiert nicht unbedingt, auch wenn nur diese Steuerung, wie ein Fensterrahmen Serie, kann es sein, Ihre Maus nicht die richtige Position bewegt. Außerdem, wenn die Seite einen Bildlauf hat, haben wir zu diesem Teil der Rolle zu holen.

Wenn Sie den folgenden Code klicken haben:

            //被卷去的部分
            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);

Auf diese Weise können wir klicken Sie auf die Elemente klicken, die wir brauchen. Über mouse_event dieser API finden Sie unter Online-mein Tutorial MSDN. Cursor.Position diese Maus Positionierung auch die API-Funktion SetCursorPos verwenden können, aber C # diese Sache hat nicht zu verlangen.

Ich denke du magst

Origin www.cnblogs.com/soundcode/p/12583776.html
Empfohlen
Rangfolge