Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Acessar link [RESOLVIDO]
-
- Acabou de chegar
- Mensagens: 5
- Registrado em: Qui Mai 05, 2016 12:03 pm
Acessar link [RESOLVIDO]
Minha ideia é acessar um site, fazer login flegar uma radiobox e clicar em um link de pesquisa...
Estou com dificuldade para acessar esse link.
Poderiam me ajudar??
Segue abaixo o trecho do código fonte referente à pesquisa em questão.
<td style="width:3px;"></td><td onmouseover="Menu_HoverStatic(this)" onmouseout="Menu_Unhover(this)" onkeyup="Menu_Key(this)" id="ctl00_ContentMenu_Ucmenu_Menu1n1"><table class="menuitem ctl00_ContentMenu_Ucmenu_Menu1_4" cellpadding="0" cellspacing="0" border="0" width="100%"><tr>
<td style="white-space:nowrap;"><a class="ctl00_ContentMenu_Ucmenu_Menu1_1 menuitem ctl00_ContentMenu_Ucmenu_Menu1_3" href="frmPesquisaManifesto.aspx" style="border-style:none;font-size:1em;">Pesquisa Manifesto</a></td>
Segue trecho em VBA.
A parte do acesso, o login e senha, flegar o radiobox está funcionando ok, não estou conseguindo acessar o link de pesquisa de manifesto.
Dim ie As Object
Dim ULogin As Boolean, ieForm
Set ie = New InternetExplorerMedium
With ie
.Visible = True
.Navigate ("endereço do site")
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
.document.getElementById("txtlogin").Focus
.document.getElementById("txtlogin").Value = "login" 'digita o login
.document.getElementById("txtsenha").Focus
.document.getElementById("txtsenha").Value = "senha" 'digita a senha
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
.document.all("btn_login_ext").Click 'clica em fazer login/entrar
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
.document.all("ibtManifesto").Click 'clica em novo manifesto de resíduo
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
.document.all.Item("ctl00_ContentPlaceHolder1_rblTipoUnidade_0").Checked = "checked" 'seleciona participação como gerador
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
.document.all("ctl00_ContentPlaceHolder1_rblTipoUnidade_0").Click
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
.document.getElementById("ctl00_ContentMenu_Ucmenu_Menu1n1").Selected = True 'Essa parte não está funcionando
Estou com dificuldade para acessar esse link.
Poderiam me ajudar??
Segue abaixo o trecho do código fonte referente à pesquisa em questão.
<td style="width:3px;"></td><td onmouseover="Menu_HoverStatic(this)" onmouseout="Menu_Unhover(this)" onkeyup="Menu_Key(this)" id="ctl00_ContentMenu_Ucmenu_Menu1n1"><table class="menuitem ctl00_ContentMenu_Ucmenu_Menu1_4" cellpadding="0" cellspacing="0" border="0" width="100%"><tr>
<td style="white-space:nowrap;"><a class="ctl00_ContentMenu_Ucmenu_Menu1_1 menuitem ctl00_ContentMenu_Ucmenu_Menu1_3" href="frmPesquisaManifesto.aspx" style="border-style:none;font-size:1em;">Pesquisa Manifesto</a></td>
Segue trecho em VBA.
A parte do acesso, o login e senha, flegar o radiobox está funcionando ok, não estou conseguindo acessar o link de pesquisa de manifesto.
Dim ie As Object
Dim ULogin As Boolean, ieForm
Set ie = New InternetExplorerMedium
With ie
.Visible = True
.Navigate ("endereço do site")
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
.document.getElementById("txtlogin").Focus
.document.getElementById("txtlogin").Value = "login" 'digita o login
.document.getElementById("txtsenha").Focus
.document.getElementById("txtsenha").Value = "senha" 'digita a senha
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
.document.all("btn_login_ext").Click 'clica em fazer login/entrar
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
.document.all("ibtManifesto").Click 'clica em novo manifesto de resíduo
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
.document.all.Item("ctl00_ContentPlaceHolder1_rblTipoUnidade_0").Checked = "checked" 'seleciona participação como gerador
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
.document.all("ctl00_ContentPlaceHolder1_rblTipoUnidade_0").Click
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
.document.getElementById("ctl00_ContentMenu_Ucmenu_Menu1n1").Selected = True 'Essa parte não está funcionando
Editado pela última vez por Juliano Oliveira em Qui Mai 12, 2016 9:16 am, em um total de 1 vez.
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: Acessar link
Juliano Oliveira, boa tarde e seja muito bem vindo ao fórum.
Bem, antes de mais nada, não sei se a dica abaixo vai funcionar. Já tentei ajudar outros usuários sem ter acesso ao projeto e não foi muito bem sucedido. Mas vamos tentar.
De acordo com o trecho do Código Fonte da parte referente a pesquisa, adiciona abaixo do seu código, as instruções abaixo:
Com esse código, acredito que você conseguirá realizar o acesso ao link de pesquisa.
Teste e nos retorne com o resultado.
Bons estudos.
Bem, antes de mais nada, não sei se a dica abaixo vai funcionar. Já tentei ajudar outros usuários sem ter acesso ao projeto e não foi muito bem sucedido. Mas vamos tentar.
De acordo com o trecho do Código Fonte da parte referente a pesquisa, adiciona abaixo do seu código, as instruções abaixo:
Código: Selecionar todos
Dim elemUnique, elemCollection As Object
Set elemCollection = ie.document.getElementsByTagName("a")
For Each elemUnique In elemCollection
'MsgBox elemUnique.innerText
If elemUnique.innerText = "Pesquisa Manifesto" Then
elemUnique.Click
Exit For
End If
Next elemUnique
Teste e nos retorne com o resultado.
Bons estudos.
-
- Acabou de chegar
- Mensagens: 5
- Registrado em: Qui Mai 05, 2016 12:03 pm
Re: Acessar link
Bom dia Mikel, o código que você me passou funcionou bem.
Porém estou enfrentando um problema em relação ao tempo de execução...
Sempre que eu acesso algum link ou clico em algum botão, o código seguinte executa antes da página carregar por completo.
Já tentei os seguintes códigos:
Do Until ie.readyState = READYSTATE_COMPLETE
Loop
Do While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
ie.ReadyState <> 4 DoEvents Wend
Poderia me ajudar com algum código que só permita avançar após o carregamento completo da página?
Desde já agradeço, sua dica foi fundamental para a sequência do estudo em questão...
Porém estou enfrentando um problema em relação ao tempo de execução...
Sempre que eu acesso algum link ou clico em algum botão, o código seguinte executa antes da página carregar por completo.
Já tentei os seguintes códigos:
Do Until ie.readyState = READYSTATE_COMPLETE
Loop
Do While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
ie.ReadyState <> 4 DoEvents Wend
Poderia me ajudar com algum código que só permita avançar após o carregamento completo da página?
Desde já agradeço, sua dica foi fundamental para a sequência do estudo em questão...
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: Acessar link
Juliano, bom dia.
Cara, como havia dito, tentar adivinhar o que deseja fazer, sem ter como testar os códigos é muito difícil. Outro ponto importante é que este tipo de rotina não é 100%, já que dependemos da velocidade da Conexão de Internet para conclusão da tarefa que esta se automatizando.
Uma sugestão que dou para esse caso, seria acrescentar uma função de comparação (IF), verificando se o próximo Elemento HTML que será utilizado, existe na página carregada (existe = já foi carregado no navegador). Caso não tenha sido, pode desviar a rotina, utilizando a Instrução GoTo. Seria algo parecido com o código abaixo:
Faça uma pesquisa sobre os comando utilizados nesse exemplo.
Teste e nos retorne com o resultado.
Cara, como havia dito, tentar adivinhar o que deseja fazer, sem ter como testar os códigos é muito difícil. Outro ponto importante é que este tipo de rotina não é 100%, já que dependemos da velocidade da Conexão de Internet para conclusão da tarefa que esta se automatizando.
Uma sugestão que dou para esse caso, seria acrescentar uma função de comparação (IF), verificando se o próximo Elemento HTML que será utilizado, existe na página carregada (existe = já foi carregado no navegador). Caso não tenha sido, pode desviar a rotina, utilizando a Instrução GoTo. Seria algo parecido com o código abaixo:
Código: Selecionar todos
NovoTeste: 'Ponto de referência para desvio de rotina.
'Realiza os 3 testes sequencialmente.
Do Until ie.ReadyState = READYSTATE_COMPLETE: Loop
Do While ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE: DoEvents: Loop
While ie.ReadyState <> 4: DoEvents: Wend
'Testa se o elemento foi carregado. Caso o resultado da propriedade Length seja menor igual a 0,
'será executada a Instrução GoTo, que desviará a rotina de volta para a linha "NovoTeste:"
If ie.Document.getElementById("Id do próximo elemento").Length <= 0 Then GoTo NovoTeste
... Continua com a rotina.
Teste e nos retorne com o resultado.
-
- Acabou de chegar
- Mensagens: 5
- Registrado em: Qui Mai 05, 2016 12:03 pm
Re: Acessar link
Bom dia!
Realmente depende da conexão, em alguns momentos funciona e em outros não...
Resolvi colocando Application.wait e determinei um tempo de espera.
Muito obrigado pela ajuda!!!
Realmente depende da conexão, em alguns momentos funciona e em outros não...
Resolvi colocando Application.wait e determinei um tempo de espera.
Muito obrigado pela ajuda!!!