Obteniendo “Mensaje: h es nulo”

Recientemente me he encontrado con algo que nunca había visto mientras uso selenium .

El código (bastante simple y directo):

 from selenium import webdriver driver = webdriver.Firefox() driver.get("http://www.drugs.com/drug-class/laxatives.html?condition_id=&generic=0&sort=rating&order=desc") print driver.find_element_by_tag_name("title").text 

Aquí hay un seguimiento de la stack del error que estoy recibiendo:

 Traceback (most recent call last): File "/Users/a/p/SO/selenium_scripts/test.py", line 6, in  print driver.find_element_by_tag_name("title").text File "/Users/a/.virtualenvs/so/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 328, in find_element_by_tag_name return self.find_element(by=By.TAG_NAME, value=name) File "/Users/a/.virtualenvs/so/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 664, in find_element {'using': by, 'value': value})['value'] File "/Users/a/.virtualenvs/so/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 175, in execute self.error_handler.check_response(response) File "/Users/a/.virtualenvs/so/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 166, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: h is null 

Utilizando Firefox 37.0 y selenium 2.45.0.


Observaciones:

  • Si cambio a webdriver.Chrome() , no veo ningún error.
  • si utilizo una URL diferente, por ejemplo, https://google.com – no veo ningún error
  • He intentado esperar explícitamente a que los resultados de la búsqueda sean visibles antes de realizar otras acciones, pero sigo recibiendo el mismo error, código que he usado:

     from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox() driver.get("http://www.drugs.com/drug-class/laxatives.html?condition_id=&generic=0&sort=rating&order=desc") # wait for the table list to load WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "table.data-list"))) 
  • no es fácil de googlear, lo que probablemente significa que es específico del sitio web, pero, como se señaló anteriormente, no hay errores en Chrome

¿De dónde viene el error y qué puedo hacer para prevenirlo / solucionarlo? ¿Significa esto que no puedo buscar / localizar elementos en esta página web en particular usando selenium + firefox?

Parece que el selenium 2.45.0 does not support ff 37 .

El registro de cambios muestra selenium 2.44 compatible con FF33. Selenium 2.45 se lanzó alrededor del 26 de febrero de 2015, mientras que FF37 se lanzó el 31 de marzo de 2015.

Parece que para cuando la página se carga, está ejecutando esta línea de código y lanzando un mensaje de error. tratar de esperar hasta que la página se cargue usando

 time.sleep(200) 

y mantenga esta línea de código en el bloque try como:

 try: WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "table.data-list"))) except: print("not found")