Selenium WebDriver无法通过ID找到元素,使用Python
我正在尝试获取一个元素,这个元素只有在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
你可以让WebDriver隐式等待,直到元素变得可见。
browser.implicitly_wait(30)
result = browser.find_element_by_id("post-count")
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(...)
,这样可以确保元素动态创建的时候也能被找到。