2013-02-24 218 views
0

我試圖拉起,只有得到JavaScript的運行後創建的元素,但我不斷收到以下錯誤信息:硒的webdriver無法找到元素的標識,使用Python

selenium.common.exceptions.NoSuchElementException: Message: u'Unable to locate element: {"method":"id","selector":"post-count"}' ; Stacktrace: Method FirefoxDriver.prototype.findElementInternal_ threw an error in file:///tmp/tmpittNsw/extensions/[email protected]/components/driver_component.js 

我m試圖把這個元素放在cnn.com上。我的代碼:

socket.setdefaulttimeout(30) 
browser = webdriver.Firefox() # Get local session of firefox 
browser.get(article_url_txt) # Load page 

result = browser.find_element_by_id("post-count") 
+0

也許你沒有花時間完成加載,是否沒有'onready'事件你可以調用你的'find元素'? – NickSlash 2013-02-24 02:53:01

回答

0

您正在查找的元素位於iframe之內。

以下的伎倆對我來說:

from selenium.webdriver.support.wait import WebDriverWait 

# ... 

frame = WebDriverWait(browser, 30).until(lambda x: x.find_element_by_id("dsq1")) 
browser.switch_to_frame(frame) 
result = WebDriverWait(browser, 30).until(lambda x: x.find_element_by_id("post-count")) 

注意,我包括使用WebDriverWait(...).until(...)允許動態以防萬一要創建的元素。

0

您可以讓WebDriver隱式等待,直到元素可見。

browser.implicitly_wait(30) 
result = browser.find_element_by_id("post-count")