Página 1 de 1

[RESOLVIDO] CANNOT FOCUS ELEMENT PARA SENHAS

Enviado: Seg Mai 28, 2018 3:18 am
por eletr1c0
Olá, primeiramente obrigado por todo o conteúdo que todos aqui disponibilizam para área de WebScraping.

Gostaria de uma pequena ajuda, se possível.

Quando tento fazer login nos sites que preciso extrair informação, encontro problemas na hora de inserir a senha, estou utilizando o VBA com Selenium.

Meu código para tentar acessar o site da CPFL, por exemplo, é:

Public driver As Selenium.WebDriver
Public Sub LogaHardmob()
Dim user, pass, uc, cliques As WebElement
Set driver = New ChromeDriver
driver.Get "https://www.cpflempresas.com.br"
Set user = driver.FindElementById("ctl00_ContentPlaceHolder1_loginmenu1_txtUSUARIO").SendKeys("987654321")
Set passwd = driver.FindElementByXPath("//*[@id=""ctl00_ContentPlaceHolder1_loginmenu1_txtSENHATXT""]").SendKeys("123456")
Set uc = driver.FindElementById("ctl00_ContentPlaceHolder1_loginmenu1_txtINSTALACAO").SendKeys("23")
Set cliques = driver.FindElementById("ctl00_ContentPlaceHolder1_loginmenu1_btnLOGIN")
cliques.Click
End Sub

E o erro que dá quando ele tenta colocar o password, é "CANNOT FOCUS ELEMENT". O mesmo erro dá quando tento colocar senha no forum do HardMob por exemplo.

Se alguém puder me dar um retorno, agradeço.

Re: CANNOT FOCUS ELEMENT PARA SENHAS

Enviado: Ter Mai 29, 2018 8:28 pm
por Nill2016
Veja se agora funciona:
Public driver As Selenium.WebDriver
Public Sub LogaHardmob()
Dim user, pass, uc, cliques As WebElement

Set driver = New ChromeDriver

driver.Get "https://www.cpflempresas.com.br"

Set user = driver.FindElementByXPath("//input[@id='ctl00_ContentPlaceHolder1_loginmenu1_txtUSUARIO']").SendKeys("987654321")
Set passwd = driver.FindElementByXPath("//input[@id='ctl00_ContentPlaceHolder1_loginmenu1_txtSENHATXT']").SendKeys("123456")
Set uc = driver.FindElementByXPath("//input[@id='ctl00_ContentPlaceHolder1_loginmenu1_txtINSTALACAO']").SendKeys("23")
Set cliques = driver.FindElementByXPath("//input[@id='ctl00_ContentPlaceHolder1_loginmenu1_btnLOGIN']")

cliques.Click

driver.Quit

End Sub

Re: CANNOT FOCUS ELEMENT PARA SENHAS

Enviado: Ter Mai 29, 2018 11:00 pm
por eletr1c0
Fala Nil! Beleza? Valeu pela ajuda mano mas não funciona, continua a dar o mesmo problema segue print:
Imagem

Se alguém souber, me ajudará muito!

Re: CANNOT FOCUS ELEMENT PARA SENHAS

Enviado: Qua Mai 30, 2018 9:24 am
por Nill2016
Eu acho que esta tendo variação do elemento. Fiz um teste e deu erro, peguei outra tipo de XPath e deu certo. Deixei as duas opções para que você teste e confirmar se funciona.

Public Sub LogaHardmob()
Dim user, pass, uc, cliques As WebElement

Set driver = New FirefoxDriver

driver.Get "https://www.cpflempresas.com.br"

Set user = driver.FindElementByXPath("//form[@id='aspnetForm']/table/tbody/tr[5]/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[4]/td/table/tbody/tr/td/input").SendKeys("987654321")
'Set passwd = driver.FindElementByXPath("//form[@id='aspnetForm']/table/tbody/tr[5]/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[4]/td/table/tbody/tr[2]/td/input[2]").SendKeys("123456")
Set passwd = driver.FindElementByXPath("html/body/form/table/tbody/tr[5]/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[4]/td[1]/table/tbody/tr[2]/td/input[1]").SendKeys("123456")
Set uc = driver.FindElementByXPath("//form[@id='aspnetForm']/table/tbody/tr[5]/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[4]/td/table/tbody/tr[3]/td/input").SendKeys("23")
Set cliques = driver.FindElementByXPath("//form[@id='aspnetForm']/table/tbody/tr[5]/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[4]/td/table/tbody/tr[4]/td/input")

cliques.Click

driver.Quit

End Sub

Re: CANNOT FOCUS ELEMENT PARA SENHAS

Enviado: Qua Mai 30, 2018 4:54 pm
por eletr1c0
Nil, estou utilizando o ChromeDriver, e nele não funciona, o erro persiste o mesmo.
Tentei atualizar o FireFoxDriver usando o geckodriver mas diferente do chromedriver, o geckodriver é exe e o driver que o selenium usa no firefox é um .xpi. Logo não consegui testar usando o FireFox.

Por outro lado tentei usar o Edge atualizado para fazer esse teste, ele até executa o código todo, mas ele não coloca a senha, ele simplesmente pula a mesma.


Muito obrigado pelo retorno que já foi feito até agora e qualquer outro futuro!

Re: CANNOT FOCUS ELEMENT PARA SENHAS

Enviado: Sex Jun 01, 2018 6:31 pm
por Nill2016
Fiz vários testes no computador de casa e não vai de jeito nenhum. Depois vou testar no da empresa para ver o que acontece. Em casa ele preenche o user e o uc. Como eu tenho Firefox Quantum tem que configurar o geckodriver, também não consegui fazer o teste nele.

Re: CANNOT FOCUS ELEMENT PARA SENHAS

Enviado: Sex Jun 01, 2018 6:42 pm
por eletr1c0
Pois é! Exatamente Nil. Se funcionar e puder me dar um toque sobre como configurar o geckodriver, fico muito agradecido!

Re: CANNOT FOCUS ELEMENT PARA SENHAS

Enviado: Ter Jun 05, 2018 1:53 am
por Mikel Silveira Fraga
Bom dia a todos.

Leonardo e Nill, consegui dar foco no elemento da senha. O que ocorre que existem dois elementos para senha.

O elemento que é exibido, tem o seguinte Id: "ctl00_ContentPlaceHolder1_loginmenu1_txtSENHATXT".
O elemento que recebe a senha, que fica bloqueado ao inicializar a página, possui o seguinte Id: "ctl00_ContentPlaceHolder1_loginmenu1_txtSENHA".

Quando o campo é selecionado pelo mouse, é disparado um evento que inverte os dois elementos, permitindo que a senha seja digitada.

O que fiz foi forçar um Método Click no elemento visível, de forma que o campo seja selecionado, o evento de inversão dos elementos é disparado e a senha é inserida via VBA.

Um pouco complexo de entender. Talvez fique mais fácil com o código abaixo:

Código: Selecionar todos

Public driver As Selenium.WebDriver

Public Sub LogaHardmob()
  
  Const sUser As String = "ctl00_ContentPlaceHolder1_loginmenu1_txtUSUARIO"
  Const sHide As String = "ctl00_ContentPlaceHolder1_loginmenu1_txtSENHA"
  Const sPass As String = "ctl00_ContentPlaceHolder1_loginmenu1_txtSENHATXT"
  Const sUc As String = "ctl00_ContentPlaceHolder1_loginmenu1_txtINSTALACAO"
  Const sButton As String = "ctl00_ContentPlaceHolder1_loginmenu1_btnLOGIN"
  
  Set driver = New ChromeDriver
  
  With driver
    .Get "https://www.cpflempresas.com.br"
    
    Call .FindElementById(sUser).SendKeys("987654321")
    Call .FindElementById(sPass).Click
    Call .FindElementById(sHide).SendKeys("123456")
    Call .FindElementById(sUc).SendKeys("23")
    Call .FindElementById(sButton).Click
    
    .Quit
  End With

End Sub
Tela com preenchimento completo
Tela com preenchimento completo
TelaSite.jpg (357.67 KiB) Exibido 8846 vezes
Confesso que a muito tempo não pego uma lógica tão louca para se desvendar, mas foi divertido.

Espero que funcione e resolva o problema de vocês.

Forte abraço e excelente semana.

Re: CANNOT FOCUS ELEMENT PARA SENHAS

Enviado: Qua Jun 06, 2018 9:02 am
por eletr1c0
Mikel, primeiramente, muito obrigado. Nil, muito obrigado pela ajuda também.

Eu tinha reparado nesses 2 campos senha e senhaTXT, tinha tentado fazer várias coisas com ambos, porém, não tinha tentado clicar em um e escrever no outro. No fim acabei migrando para o Python e consegui, mas com esse código em mãos vou fazer as duas versões do código!


Valeu pessoal!

Re: CANNOT FOCUS ELEMENT PARA SENHAS

Enviado: Qua Jun 06, 2018 7:49 pm
por Nill2016
Mikel e eletr1c0, eu só tinha me atentado que variava o id mas não tinha percebido que era no clique. Agora sabendo desta pegadinha vou prestar mais atenção, valeu pela dica.