2
respostas

[Dúvida] Buscar botões sem ID usando o selenium no Python

Pessoal, estou com uma dúvida em meu projeto, tenho um sistema ERP onde utilizamos o mozila onde posso fazer algumas automações utilizando a biblioteca selenium e pyautogui, porém alguns botões eu não consigo selecioná-los pois não tem um ID de referência ( Foto da Pagina de Loguin ) esse tem class mas não consigo pega-los, e outros tem a class mas com o nome repetido onde a unica diferença entre eles é o texto. Já tentei usar o navegador.find_element(By.CLASS_NAME,'btn btn-primary btn-bordred btn-block waves-effect') não dá certo, tentei também o navegador.find_element(By.LINK_TEXT,"Entrar") tbm não deu certo

Esse é o meu código

from selenium import webdriver
from selenium.webdriver.common.by import By

navegador = webdriver.Firefox()
navegador.get("http://192.168.0.254:8080/Majmoreno/sgw0001.do?method=login")

navegador.implicitly_wait(5)

navegador.find_element('xpath','//*[@id="login"]').send_keys("adminteste")
navegador.find_element('xpath','//*[@id="senha"]').send_keys("adminteste")
entrar = navegador.find_element(By.CLASS_NAME,'btn btn-primary btn-bordred btn-block waves-effect') 
#entrar = navegador.find_element(By.LINK_TEXT,"Entrar")
entrar.click

Esse é o codigo fonte da pagina, em azul o botão que quero pegarBotão entrar

Esse são os botões que tem o mesmo nome na class Botões com a mesma class

Usando o Pyautogui consigo fazer, porém não acho tão eficiente no meu caso que irá rodar em computadores com telas diferentes

2 respostas

Oii, Luiz! Tudo joia?

Agradeço por interagir aqui no fórum trazendo o seu projeto.

Como é um projeto externo no qual não possuo conhecimento total do contexto, onde é preciso realizar testes para entender qual melhor se encaixa, mas posso te sugerir alguns pontos. Vamos lá!

Uma abordagem que você pode tentar é usar seletores CSS que sejam mais específicos e que combinem outras propriedades dos botões além das classes. Suponhamos que os botões de login são os únicos botões na página com um determinado conjunto de classes ou se estão contidos em um elemento específico, você pode usar isso para construir um seletor CSS mais preciso.

Um ponto que notei é que no seu método click está com um pequeno erro de sintaxe, é preciso acrescentar os parênteses ():

entrar.click()

Deixo aqui também a documentação do Selenium que aborda com mais variedades e para expandir o seu conhecimento:

Espero que te ajude de alguma forma, realize os testes para entender qual funcionará melhor para projeto.

Conte sempre conosco, bons estudos!

Olá Nathalia , tudo bem? Corrigi a sintaxe do click obrigado. Percebi que meu projeto possui varios iframes onde estou tendo dificuldades em percorre-los, um botão está dentro de um iframe que está dentro de outro iframe sabe ?

Com esse código eu consigo chegar no 1° iframe

Frame_inicial = navegador.find_element(By.XPATH,'/html/body/iframe[1]')
navegador.switch_to.frame(Frame_inicial)

Utilizando o mesmo método para chegar no 2° iframe onde está meu botão aparece o seguinte erro NoSuchElementException: Message: Unable to locate element: //*[@id="ifmDiagrama"] Já tentei o CSS Seletor, XPATH ou o iD mas fica na mesma :(

Frame_central = navegador.find_element(By.XPATH, '//*[@id="ifmDiagrama"]')
navegador.switch_to.frame(Frame_central)

Código da pagina