Python 硒 is_displayed 方法

Python selenium is_displayed method

我希望能够到达 else 语句并且在元素未显示时不会出现异常。

例如:

 if driver.find_element_by_xpath("/html/body/main/div/article[2]/div[4]/header/div[2]/div/div[3]/a[4]").is_displayed():
            print("yeah found it")
        else:
            print("not found")

您不能在 不存在 的元素上调用 is_displayed() 或任何其他 属性。 is_displayed() 只有在 DOM 中存在但隐藏或显示的元素时才有效。您的程序甚至在到达代码以检查它是否显示之前就失败了。所以可能的解决方法可能是改用某种 try catch

from selenium.common.exceptions import NoSuchElementException

found = False
while not found:
    try:
        link = driver.find_element_by_xpath(linkAddress)
        found = True
    except NoSuchElementException:
        time.sleep(2)

示例代码取自 here

我 运行 遇到了同样的问题,这个问答环节改变了游戏规则。我也通过 Saifur 调整了给定的代码,以满足我的需求,我认为这类似于这个问题的要求:

elementlist = []
found = False
while not found:
    try:
        element_ = browser.find_element_by_xpath("//*[@class='class' and (contains(text(),'Optional-text-contain'))]")
        if element_.is_displayed():
            value = element_.find_element_by_css_selector("*")
            elementlist.append(value.text)
            print("Element: " + value.text)
            found = True
    except NoSuchElementException:
        elementlist.append("N/A")
        print("Element: N/A")
        found = True

此代码在页面中查找交替元素(有时存在,有时不存在)。如果它存在,它会给出它的值。如果不是 - 它在附加列表时正常继续 "NaN" 样式值,只是为了匹配以后 DFing

的轴

再次,Saifur 在此问题上提供了巨大的帮助。感谢 user3691239 提出这个问题,并提到它在稍作调整后对你有用。