【问题标题】:Getting "Message: h is null"获取“消息:h 为空”
【发布时间】:2015-05-12 15:31:04
【问题描述】:

我最近在使用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() - 我看不到任何错误
  • 如果我使用不同的 URL,例如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 浏览/定位此特定网页上的元素?

【问题讨论】:

  • selenium 2.45.0 是否支持 ff 37?查看更改日志 (code.google.com/p/selenium/source/browse/java/CHANGELOG),selenium 2.44 支持 FF33。 Selenium 2.45 于 2015 年 2 月 26 日左右发布,而 FF37 于 2015 年 3 月 31 日发布。
  • @Amey 是的,这是有道理的,我会尝试降级 firefox 并报告。谢谢!
  • 只是提出了一个 Firefox 兼容性问题,但似乎已经提出了建议。 Firefox 与 Selenium 的“兼容性最好”,同时,它的兼容性最差,因为每个版本的兼容性都非常严格。
  • @Amey 就是这样! 将 Firefox 降级 到 36 没有帮助,但 到 35.0.1 有效,不再出现类似错误。请将其发布为答案,我会接受。
  • @aholt 是的,我怀疑这是一个 selenium-firefox 兼容性问题,因为他们之前已经解决过,但决定发布一个问题,以防将来有人会遇到这样的错误。

标签: python firefox selenium selenium-webdriver


【解决方案1】:

看起来像selenium 2.45.0 does not support ff 37。

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

【讨论】:

  • 确认中。降级到 Firefox 35.0.1 有助于解决问题。谢谢!
【解决方案2】:

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

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

并将这行代码保留在 try 块下:

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

【讨论】:

  • 不,正如我在问题中指出的那样,我尝试添加显式等待并得到相同的错误。无论如何,问题已经解决,这是由于firefox和selenium之间的兼容性问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-06-26
  • 2021-01-26
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2017-09-06
  • 1970-01-01
相关资源
最近更新 更多