Python selenium is_displayed方法

时间:2015-04-16 19:01:06

标签: python selenium webdriver

我希望能够访问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")

2 个答案:

答案 0 :(得分:1)

您不能在不存在的元素上调用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

的示例代码

答案 1 :(得分:0)

我遇到了同样的问题,这个Q& A区块是游戏改变者。我也根据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

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

同样,Saifur在这个问题上提供了巨大的帮助。感谢user3691239提出这个问题,并提到它在一个小小的问题之后为你工作了。调整。