Selenium WebDriver无法通过ID找到元素,使用Python

0 投票
2 回答
4932 浏览
提问于 2025-04-17 16:54

我正在尝试获取一个元素,这个元素只有在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(...),这样可以确保元素动态创建的时候也能被找到。

撰写回答