Selenium WebDriver无法使用Python按ID查找元素

时间:2013-02-24 01:36:31

标签: javascript python selenium webdriver

我正在尝试提取一个仅在JavaScript运行后创建的元素,但我不断收到以下错误消息:

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/fxdriver@googlecode.com/components/driver_component.js

我正试图在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")

2 个答案:

答案 0 :(得分: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(...)来允许动态创建元素以防万一。

答案 1 :(得分:0)

您可以告诉WebDriver隐式等待,直到元素可见。

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