0

我正在尝试提取仅在 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")
4

2 回答 2

1

您要查找的元素位于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(...)以允许动态创建元素以防万一。

于 2013-02-24T15:32:33.820 回答
0

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

browser.implicitly_wait(30)
result = browser.find_element_by_id("post-count")
于 2015-11-20T11:21:15.747 回答