TEXTAREA HTML WEBBROWSER
Tenho o seguinte codigo em uma pagina html que tem um formulario de texto a ser preenchido:
<div id=[Ô]chatMessageSend[Ô] data-joyride=[Ô]data-joyride[Ô] ng-model=[Ô]text[Ô] name=[Ô]text[Ô] bp-textarea=[Ô]bp-textarea[Ô] contenteditable=[Ô]true[Ô] tabindex=[Ô]1[Ô] class=[Ô]ng-valid ng-dirty[Ô]>uiiiuyyyu</div>
Uso o componente WebBrowser1 e uso a função abaixo para preencher esse formulario:
Dim elm As Object
For i As Integer = 0 To WebBrowser1.Document.All.Count - 1
elm = WebBrowser1.Document.All.Item(i)
If Not elm.TagName Is Nothing Then
If CType(elm, System.Windows.Forms.HtmlElement).Name = [Ô]text[Ô] Then [ô]Capta User ID
CType(elm, System.Windows.Forms.HtmlElement).InnerText = TextBox1.Text
[ô]CType(elm, System.Windows.Forms.HtmlElement).Focus()
WebBrowser1.Document.ActiveElement.Focus()
[ô]SendKeys.SendWait([Ô] [Ô])
End If
End If
Next
porem quando clico no botão postar mensagem com a função:
For Each ele As HtmlElement In WebBrowser1.Document.GetElementsByTagName([Ô]a[Ô])
If ele.OuterHtml.Contains([Ô]enviar[Ô]) Then
ele.InvokeMember([Ô]click[Ô])
End If
Next
nada funciona, somente funciona caso eu use o comando SendKeys.SendWait([Ô] [Ô]) na hora de preencher o campo de texto porem para usa-la o programa deve estar em primeiro plano como posso resolver isso, é como se eu tivesse que preencher o campo e apos isso validar clicando nele. porem nada da certo. ajuda .... .
<div id=[Ô]chatMessageSend[Ô] data-joyride=[Ô]data-joyride[Ô] ng-model=[Ô]text[Ô] name=[Ô]text[Ô] bp-textarea=[Ô]bp-textarea[Ô] contenteditable=[Ô]true[Ô] tabindex=[Ô]1[Ô] class=[Ô]ng-valid ng-dirty[Ô]>uiiiuyyyu</div>
Uso o componente WebBrowser1 e uso a função abaixo para preencher esse formulario:
Dim elm As Object
For i As Integer = 0 To WebBrowser1.Document.All.Count - 1
elm = WebBrowser1.Document.All.Item(i)
If Not elm.TagName Is Nothing Then
If CType(elm, System.Windows.Forms.HtmlElement).Name = [Ô]text[Ô] Then [ô]Capta User ID
CType(elm, System.Windows.Forms.HtmlElement).InnerText = TextBox1.Text
[ô]CType(elm, System.Windows.Forms.HtmlElement).Focus()
WebBrowser1.Document.ActiveElement.Focus()
[ô]SendKeys.SendWait([Ô] [Ô])
End If
End If
Next
porem quando clico no botão postar mensagem com a função:
For Each ele As HtmlElement In WebBrowser1.Document.GetElementsByTagName([Ô]a[Ô])
If ele.OuterHtml.Contains([Ô]enviar[Ô]) Then
ele.InvokeMember([Ô]click[Ô])
End If
Next
nada funciona, somente funciona caso eu use o comando SendKeys.SendWait([Ô] [Ô]) na hora de preencher o campo de texto porem para usa-la o programa deve estar em primeiro plano como posso resolver isso, é como se eu tivesse que preencher o campo e apos isso validar clicando nele. porem nada da certo. ajuda .... .
Cara eu particularmente não manjo nada de javascript, mas de PHP sim. Quero contribuir para sua resposta com a seguinte pergunta:
esses seus campos:
estão realmente dentro da tag <form></form> ? ou no javascript não há necessidade disso?
se estão qual action ou method você utiliza?
esses seus campos:
<div id=[Ô]chatMessageSend[Ô] data-joyride=[Ô]data-joyride[Ô] ng-model=[Ô]text[Ô] name=[Ô]text[Ô] bp-textarea=[Ô]bp-textarea[Ô] contenteditable=[Ô]true[Ô] tabindex=[Ô]1[Ô] class=[Ô]ng-valid ng-dirty[Ô]>uiiiuyyyu</div>
estão realmente dentro da tag <form></form> ? ou no javascript não há necessidade disso?
se estão qual action ou method você utiliza?
Ao invés do InvokeMember, tenta usar o método RaiseEvent
Acciolly,
O PHP é uma linguagem que roda do lado do servidor, assim como o ASP.NET. E seus controles devem estar dentro da tag <form> para poder ser reconhecido no lado do servidor.
Javascript trabalha no lado do cliente, então não existe essa necessidade. Ali no exemplo do amigo, provavelmente deve estar dentro do form porque tem um botão submit que deve gerar alguma instrução no servidor. Mas isso não interfere no código dele. Já que o VB.NET faz tudo de forma automática e depois gera uma requisição para o click.
Sou meio iniciante com essa parte de Web ainda, mas isso é o que sei. Se eu tiver errado, ficaria feliz de ser corrigido.
Abraços!
ele.RaiseEvent([Ô]onclick[Ô])
Acciolly,
O PHP é uma linguagem que roda do lado do servidor, assim como o ASP.NET. E seus controles devem estar dentro da tag <form> para poder ser reconhecido no lado do servidor.
Javascript trabalha no lado do cliente, então não existe essa necessidade. Ali no exemplo do amigo, provavelmente deve estar dentro do form porque tem um botão submit que deve gerar alguma instrução no servidor. Mas isso não interfere no código dele. Já que o VB.NET faz tudo de forma automática e depois gera uma requisição para o click.
Sou meio iniciante com essa parte de Web ainda, mas isso é o que sei. Se eu tiver errado, ficaria feliz de ser corrigido.
Abraços!
Citação:Sou meio iniciante com essa parte de Web ainda, mas isso é o que sei. Se eu tiver errado, ficaria feliz de ser corrigido.
Que isso bicho! Já estou aprendendo com você!
Só não aprendo mais da parte de programação WEB do visual studio porque minha cabeça está um turbilhão nesse momento! rsrsrsr. estou num Projeto meio extenso em PHP com MySql.
Fiz os testes citados acima mas nada deu certo vejá so outro exemplo do mesmo problema ao qual esbarrei novamente na imagem abaixo tenho um textarea de uma pagina no webbrauser que quando utilizo o metodo:
For Each ele As HtmlElement In WebBrowserPrincipal.Document.GetElementsByTagName([Ô]textarea[Ô])
If ele.GetAttribute([Ô]name[Ô]) = [Ô]message[Ô] Then
ele.Focus()
ele.SetAttribute([Ô]value[Ô], [Ô]mensagem ....[Ô])
End If
Next
ele preenche o campo com a mensagem porem quando eu clico no botão enviar mesmo que manualmente não posta nada, somente depois que eu clico no campo de texto e digito mais alguma coisa ou dou um enter no final do texto que funciona. é como se o texto fosse postado no campo porem não fosse validado, tem como validar esse texto sem usar o SendKeys.Send([Ô]{ENTER}[Ô]) ? alguem ? ou seja o problema é o mesmo do anterior, somente funciona se for com SendKeys.Send() a proposito esse campo citado é o chat do OLX
For Each ele As HtmlElement In WebBrowserPrincipal.Document.GetElementsByTagName([Ô]textarea[Ô])
If ele.GetAttribute([Ô]name[Ô]) = [Ô]message[Ô] Then
ele.Focus()
ele.SetAttribute([Ô]value[Ô], [Ô]mensagem ....[Ô])
End If
Next
ele preenche o campo com a mensagem porem quando eu clico no botão enviar mesmo que manualmente não posta nada, somente depois que eu clico no campo de texto e digito mais alguma coisa ou dou um enter no final do texto que funciona. é como se o texto fosse postado no campo porem não fosse validado, tem como validar esse texto sem usar o SendKeys.Send([Ô]{ENTER}[Ô]) ? alguem ? ou seja o problema é o mesmo do anterior, somente funciona se for com SendKeys.Send() a proposito esse campo citado é o chat do OLX
Você já conhece o AngularJS? Ele é dividido em vários scripts, incluindo controllers, models e muitos outros. é justamente o caso do seu form. Ele usa AngularJS, vide as propriedades ng-xxxx dos elementos. Quando o post é efetuado, o controller e a model assumem e é neles que os valores são verificados. Ao alterar os valores do HTML você não está atualizando os valores na model automaticamente. O seu caso é bem mais complicado do que parece...
Cara, tente usar a biblioteca mshtml para executar este clique.
Veja um exemplo meu aqui: ESTUDO DO HTML E VB.NET
Veja um exemplo meu aqui: ESTUDO DO HTML E VB.NET
Citação::
Cara, tente usar a biblioteca mshtml para executar este clique.
Veja um exemplo meu aqui: ESTUDO DO HTML E VB.NET
PEGUDO:
Teria como alem de clicar no botão tambem colar o texto no campo usando [Ô]a biblioteca mshtml [Ô] teria algum exemplo pratico de como fazer isso? não conheço esse método, mas dÊs de já estarei o estudando.
KERPLUNK:
Sua resposta ficou mais complexa para mim porem entendi meio que superficialmente, mas teria alguma forma algum script ou ate mesmo algo que me permita colar o texto naquele campo e fazer ele ser validado e posteriormente clicar no botão enviar ?
Tópico encerrado , respostas não são mais permitidas