方法 is_displayed() 在返回 Selenium 中的输出之前出现错误

Method is_displayed() gets an error before returning an output in Selenium

我在 Python 中使用 Selenium。

在我的脚本中,我写了这一行来检查特定元素是否存在:

doesElementExist = driver.find_element(By.CSS_SELECTOR,'div.MediaThumbnail.Media--playButton>img').is_displayed()
print(doesElementExist)

为了测试,我 运行 我知道这个元素不存在的网站的脚本。因此,我期望 False 作为返回输出,因为 is_displayed() 方法 returns 一个布尔值。

但是,我收到一条错误消息,指出此元素不存在,这会停止脚本 运行 而不是返回 false 并继续运行脚本。

Traceback (most recent call last):

  File ~/Desktop/ImageScraping/birdsScrapeTest.py:70 in <module>
    if driver.find_element(By.CSS_SELECTOR,'div.MediaThumbnail.Media--playButton>img').is_displayed() == True:

  File /opt/anaconda3/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py:1251 in find_element
    return self.execute(Command.FIND_ELEMENT, {

  File /opt/anaconda3/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py:430 in execute
    self.error_handler.check_response(response)

  File /opt/anaconda3/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py:247 in check_response
    raise exception_class(message, screen, stacktrace)

NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"div.MediaThumbnail.Media--playButton>img"}

知道为什么会这样吗?

这不是 is_displayed() 方法的作用。此方法将告诉您 element 是否可见(隐藏但在 DOM 中)。因此,为了实现您期望的用法,您可以改为:

try:
    doesElementExist = driver.find_element(By.CSS_SELECTOR,'div.MediaThumbnail.Media--playButton>img').is_displayed()
except NoSuchElementException:
    doesElementExists = False
    print("Element doesn't exists")

print(doesElementExist)

无论元素不在页面上还是隐藏,此逻辑都应该有效