Selyium, python, en cliquant sur un lien javascript régulièrement?

Quel devrait être le bon moyen de cliquer sur un lien généré par javascript sur un intervalle de temps régulier en utilisant des liaisons python et sélénium? Devrait-il utiliser un fil?

Comme je devrais continuer à traiter les données d'entrée, j'ai besoin de rafraîchir / réinitialiser une minuterie pour continuer à recevoir des données, en cliquant sur ce lien pour faire ce rafraîchissement (et ce lien est directement créé par javascript).

meilleures salutations

Vous n'avez pas besoin de fil pour le faire.

Utilisez la fonction javascript setInterval pour continuer à cliquer sur le lien.

Par exemple:

 import time from selenium import webdriver driver = webdriver.Firefox() driver.get('http://jsfiddle.net/falsetru/4UxgK/show/') # Click the link every 3000 ms. driver.execute_script(''' // argument passed from Python can be accessed by `arguments` array. var link = arguments[0]; var timer = setInterval(function() { link.click(); }, 3000); ''', driver.find_element_by_id('activity')) while True: data = driver.find_element_by_id('counter').text print(data) time.sleep(1) 

REMARQUE

Si vous obtenez une erreur comme suit, mettre à jour le selenium vers une version récente. J'ai eu l'erreur suivante avec Firefox 23.0 + selenium 2.32.0 . L'erreur était terminée avec le sélénium 2.35.0 .

 Traceback (most recent call last): File "t2.py", line 12, in <module> print driver.execute_script('''return 1 + 2;''') File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 397, in execute_script {'script': script, 'args':converted_args})['value'] File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 165, in execute self.error_handler.check_response(response) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 158, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: u'waiting for evaluate.js load failed' ; Stacktrace: at r (file:///tmp/tmpm1sJhH/extensions/[email protected]/components/driver_component.js:8360) at fxdriver.Timer.prototype.runWhenTrue/g (file:///tmp/tmpm1sJhH/extensions/[email protected]/components/driver_component.js:392) at fxdriver.Timer.prototype.setTimeout/<.notify (file:///tmp/tmpm1sJhH/extensions/[email protected]/components/driver_component.js:386) 

Alternative: utilisant le fil

 import threading import time from selenium import webdriver driver = webdriver.Firefox() driver.get('http://jsfiddle.net/falsetru/4UxgK/show/') def click_loop(link, interval): while True: link.click() time.sleep(interval) link = driver.find_element_by_id('activity') threading.Thread(target=click_loop, args=(link, 3)).start() while True: data = driver.find_element_by_id('counter').text print(data) time.sleep(1)