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.