Python Selenium如何用if语句避免无法定位元素报错
问题根源
Selenium的find_element系列方法在定位不到目标元素时,不会返回None,而是直接抛出NoSuchElementException异常,因此你的== None判断逻辑还没执行,代码就已经报错中断,这是逻辑不生效的核心原因。
解决方案
方案1:使用find_elements替代find_element
find_elements方法定位不到元素时会返回空列表,不会抛出异常,你可以通过判断列表长度来确认元素是否存在,实现逻辑和你最初的思路高度贴合:
# 定位私有账号提示元素,返回结果为列表 private_account_tip = driver.find_elements_by_xpath('//div[@class="QlxVY"]/h2') if len(private_account_tip) == 0: # 不存在私有账号提示,说明是公开账号,执行点击关注等操作 # 你的业务代码写在这里
该方案代码简洁,无需额外引入依赖,是同类场景的首选实现方式。
方案2:捕获NoSuchElementException异常
你也可以通过异常捕获的逻辑处理元素不存在的场景:
from selenium.common.exceptions import NoSuchElementException try: # 尝试定位私有账号提示 driver.find_element_by_xpath('//div[@class="QlxVY"]/h2') # 没有抛出异常说明是私有账号,直接跳过操作 except NoSuchElementException: # 抛出异常说明找不到私有提示,是公开账号,执行操作 # 你的业务代码写在这里
内容的提问来源于stack exchange,提问作者Caio Scaravajar
相关产品推荐
相关产品推荐

