获取“消息:h为空”

时间:2015-05-11 20:13:54

标签: python firefox selenium selenium-webdriver

我最近遇到了一些我在使用selenium时从未见过的东西。

代码(非常简单明了):

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

这是我得到的错误的堆栈跟踪:

Traceback (most recent call last):
  File "/Users/a/p/SO/selenium_scripts/test.py", line 6, in <module>
    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

使用Firefox 37.0和selenium 2.45.0。

观察:

  • 如果我切换到webdriver.Chrome() - 我没有看到任何错误
  • 如果我使用其他网址,例如https://google.com - 我没有看到任何错误
  • 我尝试在进行任何进一步操作之前明确等待搜索结果可见,但我仍然遇到相同的错误,我使用过的代码:

    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")))
    
  • 它不容易谷歌,这可能意味着它是特定于网站的,但是,如前所述,Chrome中没有错误

错误来自何处以及如何防止/修复错误?这是否意味着我无法使用selenium + firefox浏览/定位此特定网页上的元素?

2 个答案:

答案 0 :(得分:4)

看起来像selenium 2.45.0 does not support ff 37

change log显示硒2.44支持FF33。 Selenium 2.45于2015年2月26日左右发布,而FF37于2015年3月31日发布。

答案 1 :(得分:-1)

在页面加载时看起来正在执行这行代码并抛出错误消息。  尝试使用

等待页面加载
time.sleep(200)

并将此行代码保留在try block下:

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