C # Obtém a posição de um elemento da página, e clique em simulação

Nós desenvolvemos, muitas vezes para obter a posição de um elemento da página, e clique sobre ele. Para simular um clique do mouse não é difícil, desde que uma chamada de API na linha, a chave é a forma de obter a posição do elemento, bem como para determinar se ou não para rolar a barra de rolagem para rolar quantas linhas para fazer os elementos exibidos. Claro, podemos alterar dinamicamente o CSS, ele é exibido em um local específico, mas este método só é eficaz para página web relativamente simples.

Então como podemos obtê-lo no lugar na página, que primeiro olhar para uma imagem
 

A partir daqui podemos ver as propriedades de cinco offset, onde usamos principalmente offsetParent, offsetLeft e offsetTop, temos elemento pai offsetParent offset, reciclagem, até que o corpo.

Primeiro vamos citar windows \ system32 \ mshtml.ltb este arquivo, para que possamos obter algumas características especiais, a biblioteca apresenta particularmente forte, se o fizerem editor HTML, você pode usar esta biblioteca e combinação WebBrowser, feita de edição função é muito poderoso, é o código de padrões web incompletos bits. Então nós temos que usando mshtml; por isso o seguinte código para funcionar adequadamente.

código:

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

Então temos nenhuma localização privilegiada, e foi mostrado na área visível do navegador, e parece que pode simular clicando no API, mas quando você testar e descobriu que não é o caso. Por que, então olhar para baixo

As coordenadas são coordenadas de tela, a partir do canto superior esquerdo da tela, às vezes o seu navegador não está maximizada, mesmo se o formulário não é necessariamente maximizar a única WebBrowser esse controle, mesmo que apenas este controle, como um quadro de janela série, pode ser o mouse não se move a posição correta. Além disso, se a página tem uma rolagem, temos que chegar a essa parte da rolagem.

Se você tem que clicar com o seguinte código:

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

Desta forma, pode clicar para clicar nos elementos de que precisamos. Sobre mouse_event esta API, consulte o meu tutorial MSDN online. Cursor.Position este posicionamento mouse também pode usar a função SetCursorPos API, mas C # tem essa coisa não teria de chamada.

Acho que você gosta

Origin www.cnblogs.com/soundcode/p/12583776.html
Recomendado
Clasificación