Dans mes discussions, j'utilise une simple variable définie sur "1" ou "0" pour indiquer si elle est prête à recommencer. Essayer de déboguer un problème où parfois ce n'est pas réinitialisé et je pense que je pourrais l'avoir.
Je ne voulais pas que les connexions expirent dans un temps de chargement infini (je crois que la valeur par défaut pour Selenium n'est pas d'avoir un délai d'expiration), j'ai donc utilisé:
Driver.set_page_load_timeout(30)
Et plus tard dans ce fil, je vérifierais
If condition:
isrunning = 0
Au départ, je pensais que set_page_load_timeout arrêterait simplement de le charger après 30 secondes, mais si je comprends bien, il lèverait en fait une exception, donc je devrais faire quelque chose comme:
try:
Driver.set_page_load_timeout(30)
except:
isrunning = 0
Driver.Close()
-Do whatever else in function -
If condition:
isrunning = 0
Driver.Close()
Donc, s'il fonctionnait plus de 30 secondes, il se fermerait et serait réglé sur 0, sinon il continuerait et serait vérifié et réglé sur 0 plus tard.
J'apprécie que ce soit un petit extrait de code mais la chose complète est assez longue et je pense que c'est la partie importante.
J'apprécierais que quelqu'un confirme que j'ai la bonne idée ici. Je suis tout à fait prêt pour les tests, mais c'est un problème qui se produit une fois toutes les 8 heures, ce qui rend difficile le démontage, mais je pense que cela correspond potentiellement.
Presque votre code fonctionne correctement, à l'exception de la fonction Driver.Close()
. Ce doit être Driver.close()
. TimeoutException
sera lancé lorsque la page ne sera pas chargée dans un délai spécifique. Voir mon code ci-dessous:
from Selenium import webdriver
from Selenium.common.exceptions import TimeoutException
Driver = webdriver.Firefox()
try:
Driver.set_page_load_timeout(1)
Driver.get("http://www.engadget.com")
except TimeoutException as ex:
isrunning = 0
print("Exception has been thrown. " + str(ex))
Driver.close()