StaleElementReferenceException dans selenium

Le problème exposé dans ce sujet a été résolu.

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

+0 -0

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.

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.

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

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.

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

Donne le code que tu as fait, j’essaierai de t’aider.

Mais sinon, oui, si tu veux que l’exception de soit pas bloquante, il suffit, dans la boucle qui fait le clic de faire un try/catch ou un

with contextlib.suppress(StaleElementReferenceException):
    element.click()
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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