在selenium python中找不到元素时继续

在selenium python中找不到元素时继续,python,selenium,Python,Selenium,以下脚本位于Instagram中的一个页面之后: browser = webdriver.Chrome('./chromedriver') # GO INSTAGRAM PAGE FOR LOGIN browser.get('https://www.instagram.com/accounts/login/?hl=it') sleep(2) # ID AND PASSWORD elem = browser.find_element_by_name("username").send_ke

以下脚本位于Instagram中的一个页面之后:

browser = webdriver.Chrome('./chromedriver')

# GO INSTAGRAM PAGE FOR LOGIN

browser.get('https://www.instagram.com/accounts/login/?hl=it')

sleep(2)

# ID AND PASSWORD

elem = browser.find_element_by_name("username").send_keys('test')

elem = browser.find_element_by_name("password").send_keys('passw')

# CLICK BUTTON AND OPEN INSTAGRAM

sleep(5)

good_elem = browser.find_element_by_xpath('//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/span/button').click()

sleep(5)

browser.get("https://www.instagram.com")


# GO TO PAGE FOR FOLLOW
browser.get("https://www.instagram.com/iam.ai4/")

sleep(28)

segui = browser.find_element_by_class_name('BY3EC').click()

如果找不到类为
BY3EC
的元素,我希望脚本继续工作。

如果找不到元素,它会抛出
NoTouchElementException
,因此您可以使用
try/except
来避免这种情况,例如:

from selenium.common.exceptions import NoSuchElementException

try:
    segui = browser.find_element_by_class_name('BY3EC').click()

except NoSuchElementException:
    print('Element BY3EC not found') # or do something else here

您可以查看一下它们各自的用途。

用try-catch围绕它们,这样您就可以创建一条愉快的路径并处理失败,因此您的测试用例将始终有效。

最佳实践是不使用异常来控制流。例外应该是例外。。。罕见的和意想不到的。执行此操作的简单方法是使用定位器获取集合,然后查看集合是否为空。如果是,您就知道元素不存在

在下面的示例中,我们在页面中搜索所需的元素,并检查集合是否包含元素,如果包含元素。。。点击它

segui = browser.find_elements_by_class_name('BY3EC')
if segui:
    segui[0].click()

您无法在selenium中检查元素的状态,因为find元素在元素不存在时会抛出错误,但这在位于Ruby selenium绑定上的WATIR中得到了有效处理,您可以在其中简单地写入'b.element(id:'something').exists?`如果元素存在,则返回true;如果元素不存在,则返回false。@Rajagopalan,这根本不是真的。。。你谈论的是Rudy/WATIR,这个问题与Ruby无关,也没有用。如果你有答案,就把它贴出来。注释是为了澄清。@JeffC我所说的完全正确,当给出隐式等待时,您不能检查selenium中元素的状态。@Rajagopalan在这个问题中没有提到隐式等待,那么您为什么要把它带到讨论中?即使您确实使用了它们(请参阅我下面的评论,不推荐使用),您也可以将其关闭并检查。@enigmaok您还在寻找答案吗?@enigmaok很乐意提供帮助,如果您觉得有用,请随意使用:)大多数项目都使用隐式等待,因此此方法不适合,这就是我说的,你不能在selenium中正确检查元素的状态。@Rajagopalan我不认为大多数项目只是隐式等待。我的人都没有,Selenium贡献者建议不要使用隐式等待。即使您使用隐式等待,您也可以将等待时间设置为0,使用上面的代码,然后将其设置回您想要的任何值。这就是我们在selenium项目中将其设置为0时所做的,因此我发现在这里设置为0,然后恢复时间很困难。这就是我建议他使用的,它位于Ruby Selenium绑定的顶部,在它的核心中建立了一种显式的等待,所以当你检查元素的状态时它不会应用它的等待行为,当你采取行动时它会应用它的等待行为。