2015-05-11 56 views
2

我最近遇到了一些我以前從未見過的東西,而使用selenium獲取「消息:h爲空」

的代碼(相當簡單明瞭):

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和硒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"))) 
    
  • 它是不容易googleable這可能意味着它的網站特有的,但是,如上所述之前,在Chrome中沒有錯誤

哪裏是從哪裏來的錯誤,我能做些什麼來防止/修理它?這是否意味着我無法使用selenium + firefox瀏覽/定位此特定網頁上的元素?

+1

是否硒2.45.0甚至支持FF 37?查看更改日誌(https://code.google.com/p/selenium/source/browse/java/CHANGELOG),selenium 2.44支持FF33。 Selenium 2.45於2015年2月26日左右發佈,而FF37於2015年3月31日發佈。 – Amey

+0

@Amey是的,這很合理,我會嘗試降級Firefox並報告回來。謝謝! – alecxe

+0

只是提出了一個Firefox兼容性問題,但它看起來像已經被建議。 Firefox與Selenium具有「最佳兼容性」,同時它也是最糟糕的,因爲兼容性已經深入到每個版本中。 – aholt

回答

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

確認。降級到Firefox 35.0.1有助於解決問題。謝謝! – alecxe

-1

看起來像在頁面加載時執行代碼並拋出錯誤消息。 嘗試使用

time.sleep(200) 

等到頁面加載和保留此行的代碼在try塊爲:

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

不,正如我在問題中提到的那樣,我試圖添加明確的等待並得到相同的錯誤。無論如何,這個問題已經解決,這是由於Firefox和硒之間的兼容性問題。謝謝。 – alecxe