StaleElementReferenceException dans selenium

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour chers amis je rencontre toujours le probleme StaleElementReferenceException dans selenium malgré que je mets un try except.

Le probleme se situe a ce niveau de mon code:

try:
   reponsePrecedentes = post.find_elements_by_class_name("UFIPagerLink").click()

except NoSuchElementException:
   reponsePrecedentes = []
                
except StaleElementReferenceException:
   continue

Malgré le try except je reçois toujours la même erreur.

Pouvez vous m’aidez a résoudre ce problème? Merci

Édité par melo96

À la recherche de la connaissance.

+0 -0
Auteur du sujet

Ok voici tous mon code:

def cliqueSurPagerLink(self, post):
        continuer = True
        while continuer:
            try:
                reponsePrecedentes = post.find_elements_by_class_name("UFIPagerLink")

            except NoSuchElementException:
                reponsePrecedentes = []
            
            else:
                for reponsePred in reponsePrecedentes:
                    reponsePred.click()

            if not reponsePrecedentes:
                continuer = False
                

Merci pour vos réponses.

À la recherche de la connaissance.

+0 -0

c’est cette partie qui envoie ton exception. Et je diras même qu’elle l’envoie très probablement à la deuxième itération de la boucle :

for reponsePred in reponsePrecedentes:
    reponsePred.click()

Regardons ce que fait cette boucle :

elle prend le premier élément et clique dessus
le browser reagit, cela peut donner un changement de page, ou bien un élément qui vient se placer au dessus de tout, par exemple une fenêtre d’alerte.

Elle prend ensuite le second élément
tu essaies de cliquer dessus mais comme la page a probablement changé, il te dit "l’état de l’élément n’est pas bon" (en gros il n’est plus cliquable).

Si tu veux attraper l’exception c’est donc dans la boucle, pas avant.

+0 -0
Auteur du sujet

Mais le souci c est que souvent tout ce passe bien je récupère les infos que je veux mais c’est arrivé à un certains moment que le problème survient. Mais lorsque j attrape l’exception comment gerer pour qu' il clique sur l élément? Merci

À la recherche de la connaissance.

+0 -0

Pour que ça marche il faut que dans ta boucle tu fasses un Wait avec pour condition "CLICKABLE".

Après le plus dur c’est que l’explicit wait attend un locator et si tes objets n’ont pas d’id ça sera compliqué.

Après il semblerait que les "fluent wait" qui semblent récents t’aident, il te suffit de le configurer pour ignorer le staledstateexception.

+0 -0
Auteur du sujet

Ok mais j’aimerais savoir lorsque cette erreur apparaît cela ne m empêche pas de pouvoir cliquer sur tous mes liens ou bien il y a des liens qui ne seront pas cliquer. Pour moi puisque dans ma fonction j’ai mis un while il suffit que dans ma boucle for je mets un try except par rapport au staledstateexception j aurai tous mes liens qui seront cliqué. Est ce exact? Merci

À la recherche de la connaissance.

+0 -0
Auteur du sujet

Mon code ne change pas trop seulement dans la boucle for je fais ça:

Try:
    ReponsePred.click ()
Except staleReferenceException:
    Continue

Édité par melo96

À la recherche de la connaissance.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte