¿Selenio, python, haciendo clic en un enlace de javascript regularmente?

¿Cuál debería ser la forma correcta de hacer clic en un enlace generado en javascript en un intervalo de tiempo regular utilizando enlaces de python y selenium? ¿Debería estar usando un hilo?

Como necesitaría continuar procesando los datos de entrada, necesito actualizar / restablecer un temporizador para continuar recibiendo datos, haciendo clic en este enlace dado para hacer esta actualización (y este enlace es html generado directamente por javascript).

atentamente

No necesitas hilo para hacer esto.

Use la función javascript setInterval para hacer clic continuamente en el enlace.

Por ejemplo:

 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) 

NOTA

Si obtienes un error como el siguiente, actualiza selenium a una versión reciente. Experimenté el siguiente error con Firefox 23.0 + selenium 2.32.0 . El error se fue con el selenium 2.35.0 .

 Traceback (most recent call last): File "t2.py", line 12, in  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/fxdriver@googlecode.com/components/driver_component.js:8360) at fxdriver.Timer.prototype.runWhenTrue/g (file:///tmp/tmpm1sJhH/extensions/fxdriver@googlecode.com/components/driver_component.js:392) at fxdriver.Timer.prototype.setTimeout/<.notify (file:///tmp/tmpm1sJhH/extensions/fxdriver@googlecode.com/components/driver_component.js:386) 

Alternativa: usando hilo

 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)