我正在尝试提取一个仅在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")
答案 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")