Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
[RESOLVIDO] CANNOT FOCUS ELEMENT PARA SENHAS
[RESOLVIDO] CANNOT FOCUS ELEMENT PARA SENHAS
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.
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.
Editado pela última vez por eletr1c0 em Qui Jun 07, 2018 8:16 am, em um total de 1 vez.
Re: CANNOT FOCUS ELEMENT PARA SENHAS
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
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
Fala Nil! Beleza? Valeu pela ajuda mano mas não funciona, continua a dar o mesmo problema segue print:
Se alguém souber, me ajudará muito!
Se alguém souber, me ajudará muito!
Re: CANNOT FOCUS ELEMENT PARA SENHAS
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
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
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!
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
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
Pois é! Exatamente Nil. Se funcionar e puder me dar um toque sobre como configurar o geckodriver, fico muito agradecido!
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: CANNOT FOCUS ELEMENT PARA SENHAS
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:
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.
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
Espero que funcione e resolva o problema de vocês.
Forte abraço e excelente semana.
Re: CANNOT FOCUS ELEMENT PARA SENHAS
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!
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
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.