Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Clicar em um element XPath - Selenium/VBA
-
- Acabou de chegar
- Mensagens: 4
- Registrado em: Qua Set 23, 2020 11:25 am
Clicar em um element XPath - Selenium/VBA
Olá, bom dia!
Eu estou tentando fazer uma macro e preciso que ela clique em um elemento.
O código abaixo detecta 2 elementos, porém, eu gostaria de clicar no primeiro. Alguém tem ideia de como proceder?
Debug.Print .FindElementsByXPath("//a[contains(@href,'IN_PRECED=')]").Count
Eu estou tentando fazer uma macro e preciso que ela clique em um elemento.
O código abaixo detecta 2 elementos, porém, eu gostaria de clicar no primeiro. Alguém tem ideia de como proceder?
Debug.Print .FindElementsByXPath("//a[contains(@href,'IN_PRECED=')]").Count
Re: Clicar em um element XPath - Selenium/VBA
Qual o HTML? Pode colocar o bloco aqui?
Às vezes o elemento não é clicável. Tente forçar o clique via javascript no próprio navegador e veja se funciona.
No Chrome, selecione o elemento, abra o console e digite: $0.click()
Às vezes o elemento não é clicável. Tente forçar o clique via javascript no próprio navegador e veja se funciona.
No Chrome, selecione o elemento, abra o console e digite: $0.click()
-
- Acabou de chegar
- Mensagens: 4
- Registrado em: Qua Set 23, 2020 11:25 am
Re: Clicar em um element XPath - Selenium/VBA
Oi Tomas!
Segue a parte do codigo de interesse:
<a href="/gpi/suivi/jsp/lstSynRetardAppro.jsp?IN_CD_FOUR=&IN_ADR_FOUR=&IN_BL=&IN_REFER=&IN_CONTENEUR=&IN_CD_TGP=&IN_IT=&IN_ORD_TRI=P&IN_ID_BP=AMO&IN_SUIVANT=135060703R0062067900900180+++++0000000000000000000000000000002060.12.31.23.59.59&IN_PRECED=">
<img src="../../communs/images/btnSuivante.gif" border="0" alt="Page suivante" align="right">
</a>
Existem 2 elementos com o mesmo link, mas gostaria de clicar no primeiro.
Segue a parte do codigo de interesse:
<a href="/gpi/suivi/jsp/lstSynRetardAppro.jsp?IN_CD_FOUR=&IN_ADR_FOUR=&IN_BL=&IN_REFER=&IN_CONTENEUR=&IN_CD_TGP=&IN_IT=&IN_ORD_TRI=P&IN_ID_BP=AMO&IN_SUIVANT=135060703R0062067900900180+++++0000000000000000000000000000002060.12.31.23.59.59&IN_PRECED=">
<img src="../../communs/images/btnSuivante.gif" border="0" alt="Page suivante" align="right">
</a>
Existem 2 elementos com o mesmo link, mas gostaria de clicar no primeiro.
-
- Acabou de chegar
- Mensagens: 4
- Registrado em: Qua Set 23, 2020 11:25 am
Re: Clicar em um element XPath - Selenium/VBA
Usei o "$0.click()" como você indicou no console, deu certo. Mas como trazer isso pro Selenium no VBA?
Re: Clicar em um element XPath - Selenium/VBA
Gustavo
Tente fazer assim:
Att,
Raygsson
Tente fazer assim:
Código: Selecionar todos
.FindElementsByXPath("//a[contains(@href,'IN_PRECED=')]").item(1).click
Raygsson
-
- Acabou de chegar
- Mensagens: 4
- Registrado em: Qua Set 23, 2020 11:25 am
Re: Clicar em um element XPath - Selenium/VBA
Oi Raygsson,
Apareceu isso um "Runtime error 0" element not interactable: element has zero size
Apareceu isso um "Runtime error 0" element not interactable: element has zero size
Re: Clicar em um element XPath - Selenium/VBA
Qual o site que vc quer manipular? Fica bem mais fácil acessando e analisando.
Re: Clicar em um element XPath - Selenium/VBA
Muito bom @Raygsson, este tópico já ajudou muito e me fez avançar no meu projeto!Raygsson escreveu: ↑Qua Set 23, 2020 3:00 pm Gustavo
Tente fazer assim:Att,Código: Selecionar todos
.FindElementsByXPath("//a[contains(@href,'IN_PRECED=')]").item(1).click
Raygsson
Para não criar um outro tópico pois a dúvida é semelhante ao do colega, que a dica resolveu, mas esbarrei em outra dificuldade e gostaria de saber se conseguem me ajudar por aqui, ou se preciso criar um novo tópico!
Basicamente, estou montando um sistema para fazer o backup de chamadas gravadas no JIVE!
Consegui logar no sistema, navegar até o usuário no dia que pretendo, e lá tenho uma tabela com as ligações e um botão para ouvir/baixar a gravação, que clica com a dica acima e ele abre um elemento, que tem o botão de play e download, repeti a ideia do botão de download e funcionou também, agora eu preciso partir para os demais downloads da tabela e ai enfrentei dificuldade.
Pois bem, como disse ele abre um elemento contendo o player e download:
PASSOS 01 E 02:
E para fechar este elemento do Player/Download eu clico om outra parte do site, PASSO 03 assim repeti o processo usando outro XPath mas não deu certo, dá erro 0
Segue um trecho do código que estou fazendo:
Código: Selecionar todos
navegar.Get ("https://my.jive.com/cr/vedichindusbr/user-activity/809d452c-54d5-4ec8-894d-0a8a110278fe?userId=809d452c-54d5-4ec8-894d-0a8a110278fe&&start=2021-02-01T00:00:00&end=2021-02-01T23:59:59&tz=America%2FSao_Paulo")
'01 - Abre o Player para fazer o download do arquivo 1
navegar.FindElementsByXPath("//mat-cell[9]/mat-icon").Item(1).Click
'02 - Clica em download do arquivo 1
navegar.FindElementsByXPath("//cr-recordings-download/div/mat-icon").Item(1).Click
'03 - Clica fora para fechar o elemento do player/download
navegar.FindElementsByXPath("//cr-root/div").Item(1).Click
'04 - Abre o Player para fazer o download do arquivo 2
navegar.FindElementsByXPath("//mat-row[2]/mat-cell[9]/mat-icon").Item(1).Click
'05 - Clica em download do arquivo 2
navegar.FindElementsByXPath("//cr-recordings-download/div/mat-icon").Item(1).Click
Aproveitando se for possível, mas duas dúvidas...
A primeira seria a manipulação do download do arquivo, é possível manipular?
Quando digo manipular, seria, consigo definir parâmetro de onde vai salvar este download?
É possível definir o nome do arquivo que está baixando?
Se tiver como e puderem me dar uma luz para que possa estudar!
E a outra dúvida é com relação a estes downloads ai, precisarei montar um loop pegando todos os downloads a serem feitos, pelo que vi o XPath seguirá este padrão para cada linha que tiver download disponível...
Código: Selecionar todos
navegar.FindElementsByXPath("//mat-row[2]/mat-cell[9]/mat-icon").Item(1).Click
navegar.FindElementsByXPath("//mat-row[3]/mat-cell[9]/mat-icon").Item(1).Click
navegar.FindElementsByXPath("//mat-row[5]/mat-cell[9]/mat-icon").Item(1).Click
navegar.FindElementsByXPath("//mat-row[9]/mat-cell[9]/mat-icon").Item(1).Click
Ou alguma condição para validar se existe a //mat-row[4] por exemplo, não existindo não clica?
Ufa
Acho que é isso, desde já agradeço pela atenção!
Re: Clicar em um element XPath - Selenium/VBA
Opa, bom dia. São muitas perguntas rs
Esse print de erro que mostrou é porque está tentando clicar num elemento que não está acessível, este elemento existe, porém pode estar "por baixo" de outro ou pode estar desabilitado esperando outra ação antes, tente achar o elemento que está algumas linhas acima no HTML, pode ser uma tag "img" ou outra qualquer.
Quanto ao diretório pra download, tem que ajustar o "SetPreference", veja este vídeo https://youtu.be/2BYeh1-0zU0 . Não sei se é possível renomear o arquivo de donwload nativamente com Selenium, vale você pesquisar. Talvez consiga com VBA puro, verificar se existe o arquivo na pasta do download e renomea-lo. Veja se consegue esses ajustes por enquanto...
Esse print de erro que mostrou é porque está tentando clicar num elemento que não está acessível, este elemento existe, porém pode estar "por baixo" de outro ou pode estar desabilitado esperando outra ação antes, tente achar o elemento que está algumas linhas acima no HTML, pode ser uma tag "img" ou outra qualquer.
Quanto ao diretório pra download, tem que ajustar o "SetPreference", veja este vídeo https://youtu.be/2BYeh1-0zU0 . Não sei se é possível renomear o arquivo de donwload nativamente com Selenium, vale você pesquisar. Talvez consiga com VBA puro, verificar se existe o arquivo na pasta do download e renomea-lo. Veja se consegue esses ajustes por enquanto...
Re: Clicar em um element XPath - Selenium/VBA
Obrigado pela ajuda...Raygsson escreveu: ↑Qua Fev 03, 2021 12:12 pm Opa, bom dia. São muitas perguntas rs
Esse print de erro que mostrou é porque está tentando clicar num elemento que não está acessível, este elemento existe, porém pode estar "por baixo" de outro ou pode estar desabilitado esperando outra ação antes, tente achar o elemento que está algumas linhas acima no HTML, pode ser uma tag "img" ou outra qualquer.
Quanto ao diretório pra download, tem que ajustar o "SetPreference", veja este vídeo https://youtu.be/2BYeh1-0zU0 . Não sei se é possível renomear o arquivo de donwload nativamente com Selenium, vale você pesquisar. Talvez consiga com VBA puro, verificar se existe o arquivo na pasta do download e renomea-lo. Veja se consegue esses ajustes por enquanto...
Eu havia deduzido algo assim, qualquer gerência que peguei acima da posição não funcionou, todos retornaram erro 0
O Código fonte mesmo da página é só isso:
Código: Selecionar todos
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Call Reports</title>
<base href="/cr/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet">
<!-- TypeKit fonts -->
<script src="https://use.typekit.net/brf5com.js"></script>
<script>try{Typekit.load({ async: true });}catch(e){}</script>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="env.js"></script>
<link rel="stylesheet" href="styles.ba428b4a170d631a84d3.css"></head>
<body class="app jive-ui">
<cr-app-root>Loading…</cr-app-root>
<!-- Used by login procedure to insert login controls -->
<div id="jiveSdk" class="text-center" style="width: 100%;"></div>
<script src="runtime.c51bd5b1c616d9ffddc1.js" defer></script><script src="polyfills-es5.ff9ff81b6d2b265cb32e.js" nomodule defer></script><script src="scripts.0f7416a5c047fc06a84f.js" defer></script><script src="main.307bc09454d2f752d093.js" defer></script></body>
</html>
Código: Selecionar todos
navegar.SendKeys (Keys.Escape)
Ou se tem como fazer uma condição para saber se ela existe antes de clicar!