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

Elemento está presente mas não consigo acessar

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.
wagaoss
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Qua Nov 25, 2020 9:12 am

Elemento está presente mas não consigo acessar

Mensagem por wagaoss »

Olá amigos, estou com um problema estou tentando automatizar a extração de dados de um site, porem após acessar o mesmo com a automação não consigo localizar os elementos, já conferi no fonte da pagina pelo inspetor e os elementos estão lá, porem a macro não localiza.
Abaixo o código:

Código: Selecionar todos

Dim driver As WebDriver, Keys As New Keys
Sub CanalCliente()
Dim Por As New By
Dim valor As String

    Set driver = New ChromeDriver
 
 tLogin = "/html/body/div[2]/div[1]/div[2]/form[1]/input[1]"
 usuario = "txtUsuario"
 With driver
     .Start
    .Get "https://www.canalcliente.com.br/portal/canal_cliente/index.htm"
    
    If .IsElementPresent(Por.XPath(tLogin)) Then
    
    .FindElementById(usuario).SendKeys ("teste")
     
    Else
    MsgBox "não localizado"
    
    End If
     
 End With
    driver.Quit

End Sub
Coloquei o .IsElementPresent para retornar a mensagem ao inves do erro de execução
NoSuchElementError
Element not found for id=txtUsuario

já tentei por xpath, id, name, class, mas nesse site não localiza.
agradeço a atenção.


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
webmaster
Administrador
Mensagens: 3114
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Elemento está presente mas não consigo acessar

Mensagem por webmaster »

Algumas alternativas:

- O elemento é removido dinamicamente, por isso não está la
- O elemento está dentro de um iframe
- A hierarquia do HTML muda dependendo do conteúdo

Esse são os únicos motivos que vejo para o código falhar


wagaoss
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Qua Nov 25, 2020 9:12 am

Re: Elemento está presente mas não consigo acessar

Mensagem por wagaoss »

Entendi, meio que comecei semana passada com o selenium, consegui um ótimo resultado consultando origem e destino no google maps, fiquei empolgado e empaquei nesse site, rsrs

Se tiver alguma ideia de algo que eu possa implementar para conseguir navegar nesta página.


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: Elemento está presente mas não consigo acessar

Mensagem por Mikel Silveira Fraga »

Boa noite a todos.

Quando eu crescer, quero ser igual o Tomás. O cara já acertou na segunda sugestão, sobre o iFrame.

Wagaoss, realmente os campos de Usuário e Password estão dentro de um iFrame, que praticamente seria um Html dentro de outro Html. O iFrame permite essa situação.

Quando você copia o xPath, utilizando as ferramentas do Google Chrome (por exemplo), ele traz o xPath do Html completo, mas somente a parte dentro do iFrame.

Para isso acessar essa parte dentro do iFrame, pode utilizar um método chamado SwitchToFrame e passar o id do iFrame, que nesse caso seria "iframe1".

Dessa forma, seu código ficará assim:

Código: Selecionar todos

Option Explicit

Dim driver As WebDriver, Keys As New Keys

Sub CanalCliente()
  Dim Por As New By
  Dim valor As String
  
  Set driver = New ChromeDriver
  
  tLogin = "/html/body/div[2]/div[1]/div[2]/form[1]/input[1]"
  usuario = "txtUsuario"
  
  With driver
  
    .Start
    .Get "https://www.canalcliente.com.br/portal/canal_cliente/index.htm"
    
    Call .SwitchToFrame("iframe1") ' ---> Foi necessário apenas adicionar essa linha.
    
    If .IsElementPresent(Por.XPath(tLogin)) Then
      .FindElementById(usuario).SendKeys ("teste")
    Else
      MsgBox "não localizado"
    End If
  
  End With
  driver.Quit

End Sub
Agora já dará certo seu código.

Boa sorte e bons estudos.


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.


wagaoss
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Qua Nov 25, 2020 9:12 am

Re: Elemento está presente mas não consigo acessar[Resolvido]

Mensagem por wagaoss »

Bom dia Mikel, fiz a modificação mudando para o iframe e funcionou perfeito o login no site.
mas infelizmente a estrutura do site após o login é muito complexa(para meus conhecimentos, rsrs), e não posso postar muito sobre esta pagina após logada, anexei um video da tela da pagina, mas não deve ter muito o que fazer só com isso.
Mas agradeço muito o retorno de ambos e acabei aprendendo mais uma com o switchtoframe, vou continuar tentando automatizar esta pagina aqui.
Sobre este assunto do Elemento pode considerar resolvido.
Anexos
Gravar_2020_12_07_09_43_10_794.rar
(2.81 MiB) Baixado 216 vezes


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