Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer un bouton avec Selenium

2 septembre 2022 à 19:15:54

Plop à toutes et à tous, c'est encore moi.
Merci de votre aide hier !

J'ai un léger soucis concernant la récupération d'un bouton sur une page de connexion.
Le code css du bouton ressemble à ca :

 

<span class="css-901oao css-16my406 r-poiln3 r-bcqeeo r-qvutc0">Suivant</span></span></div>

J'ai testé de plusieurs manières :

1- Avec CLASS_NAME:

driver.find_element(By.CLASS_NAME, 'css-18t94o4 css-1dbjc4n r-1m3jxhj r-sdzlij r-1phboty r-rs99b7 r-19yznuf r-64el8z r-1ny4l3l r-1dye5f7 r-o7ynqc r-6416eg r-lrvibr').click()

J'obtiens cette erreur :

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".css-18t94o4 css-1dbjc4n r-1m3jxhj r-sdzlij r-1phboty r-rs99b7 r-19yznuf r-64el8z r-1ny4l3l r-1dye5f7 r-o7ynqc r-6416eg r-lrvibr"}

2- j'ai donc essayé avec xpath :

WebDriverWait(driver, 5).until((EC.element_to_be_clickable((By.XPATH, "//a[@role = 'button']")))).click()

Cette fois c'est un Timeout

selenium.common.exceptions.TimeoutException: Message:


J'ai finalement cherché longtemps par moi même et j'ai trouvé un "copiez le selecteur css" en faisant F12 sur la page. J'ai donc essayé de ces 2 manières :

fin = driver.find_element(By.CSS_SELECTOR, '.r-19yznuf')
fin.click()


WebDriverWait(driver, 5).until((EC.element_to_be_clickable((By.CSS_SELECTOR, '.r-19yznuf')))).click()

Cette fois aucune erreur, en revanche rien ne se passe, le programme s'arrête net.

Quelqu'un saurait-il me sauver ?

Encore merci de toute votre aide !

Cordialement




  • Partager sur Facebook
  • Partager sur Twitter
2 septembre 2022 à 19:26:35

Avec le By.CSS_SLECTOR ou avec driver.find_elements_by_css_selector, dois pouvoir mettre plusieurs classes en les précédent par un point.

Je pense que le "souci" c'est que la div n'a pas d'événements click et que c'est le span qui doit être cliquer

  • Partager sur Facebook
  • Partager sur Twitter
2 septembre 2022 à 20:19:25

umfred a écrit:

Avec le By.CSS_SLECTOR ou avec driver.find_elements_by_css_selector, dois pouvoir mettre plusieurs classes en les précédent par un point.

Je pense que le "souci" c'est que la div n'a pas d'événements click et que c'est le span qui doit être cliquer


Autant pour moi le, le span appartient pas au bouton. (le span fait partie du flex qui contient le bouton)
Comment je peux voir quel élément contient l'évènement click() ?

EDIT : si tu veux voir par toi même c'est sur le login de twitter : https://twitter.com/i/flow/signup -> s'inscrire avec un numéro de téléphone

-
Edité par Bunnntyyy 2 septembre 2022 à 20:26:17

  • Partager sur Facebook
  • Partager sur Twitter
5 septembre 2022 à 17:04:43

De chez moi, c'est bien la div qui contient le role "button" qui est cliquable.

Après, pour cliquer sur "suivant", il faut que les autres champs soient remplis et valide sinon, pas possible de cliquer dessus.

  • Partager sur Facebook
  • Partager sur Twitter
10 septembre 2022 à 20:48:38

umfred a écrit:

De chez moi, c'est bien la div qui contient le role "button" qui est cliquable.

Après, pour cliquer sur "suivant", il faut que les autres champs soient remplis et valide sinon, pas possible de cliquer dessus.


De mon côté tout est rempli. T'arrives à cliquer sur le bouton ?

  • Partager sur Facebook
  • Partager sur Twitter
12 septembre 2022 à 10:21:54

quand c'est rempli, j'y suis arrivé (je passe par le javascript, pas par selenium, avec un document.getElementsByCLassName('r-19yznuf')[0].click() ou un document.querySelector(".r-19yznuf").click() ), ça affiche ensuite l'écran "Personnalisez votre expérience")

  • Partager sur Facebook
  • Partager sur Twitter