Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Acessar link [RESOLVIDO]

A Web está aí, não há como negar. Ela é onipresente em praticamente toda operação eletrônica realizada nos dias de hoje. Como não podia ser diferente, o Excel, ferramenta máxima para analistas e profissionais das mais diversas áreas do mercado precisa estar alinhado com esta necesssidade. E ele está! Neste forum, o debate é focado em expor dúvidas, sugestões, modelos de código e exemplos de uso do Excel na Integração com tecnologias Web.
Juliano Oliveira
Acabou de chegar
Acabou de chegar
Mensagens: 5
Registrado em: Qui Mai 05, 2016 12:03 pm

Acessar link [RESOLVIDO]

Mensagem por Juliano Oliveira »

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
Editado pela última vez por Juliano Oliveira em Qui Mai 12, 2016 9:16 am, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Acessar link

Mensagem por Mikel Silveira Fraga »

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:

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
Com esse código, acredito que você conseguirá realizar o acesso ao link de pesquisa.

Teste e nos retorne com o resultado.

Bons estudos.


Juliano Oliveira
Acabou de chegar
Acabou de chegar
Mensagens: 5
Registrado em: Qui Mai 05, 2016 12:03 pm

Re: Acessar link

Mensagem por Juliano Oliveira »

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...


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Acessar link

Mensagem por Mikel Silveira Fraga »

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:

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.
    
Faça uma pesquisa sobre os comando utilizados nesse exemplo.

Teste e nos retorne com o resultado.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Juliano Oliveira
Acabou de chegar
Acabou de chegar
Mensagens: 5
Registrado em: Qui Mai 05, 2016 12:03 pm

Re: Acessar link

Mensagem por Juliano Oliveira »

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!!!


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder