driver.find_element 找不到元素的大坑

前端使用element框架。

登录进去使用开发人员工具能看到元素,复制xpath使用find_element死活找不到。

其中一次复制的xpath 注意红色部分:

  #先点击一下输入框

 driver.find_element(By.XPATH,'/html/body/div[1]/section/section/section/main/div/div[1]/div/form/div[1]/div/div/div/div/div/input').click()
    time.sleep(1)

#再点击弹出内容选项

driver.find_element(By.XPATH,'/html/body/div[3]/div[11]/div/div/div[1]/ul/li[1]')

我也是小白只能反复试试。

直到我关闭了几个标签页,刷新了一下页面。才发现页面div元素少了好几个。

我真是服了。

原因居然是因为是多标签页,每多打开一个页面,我找的那个元素所在div,前面就会多几个div元素。

问题难找的原因有很多,比如:

  • 框架没有使用原生控件,使用input+ul 实现下拉效果,页面没有显性value值。
  • 最坑的是我要操作的那个页面是个“”新增功能"页面,必须先打开列表页才能打开这个新增页。
  • 另外框架元素的很多值都是实时变化的。

耗费4个多小时能找到问题也是比较偶然,好在问题解决了。感谢百度,感谢努力的我。

这是查找元素方法。

def find_element_by_xpath(driver, xpath):  
    """  
    使用给定的XPath查找元素。  
  
    :param driver: Selenium WebDriver的实例。  
    :param xpath: 要查找的元素的XPath。  
    :return: 如果找到了元素,则返回True;否则返回False。  
    """  
    try:  
        # 设置隐式等待为0毫秒(通常不推荐这样做,但根据您的需求)  
        # 注意:隐式等待在这里实际上不会生效,因为是在查找元素之前设置的  
        # 且隐式等待会被每个find_element调用重置,所以这里设置为0影响不大  
        driver.implicitly_wait(0)  
          
        # 尝试找到元素  
        driver.find_element(By.XPATH, xpath)  
        return True  
    except NoSuchElementException:  
        # 如果没有找到元素,则捕获异常  
        return False  
    finally:  
        # 注意:通常我们不会在这里关闭浏览器,因为方法可能被多次调用  
        # 但如果您确定每次调用后都不再需要WebDriver,可以这样做  
        # 这里我将其注释掉,因为通常更好的做法是在方法外部管理WebDriver的生命周期  
        # driver.quit()  
        pass  
if find_element_by_xpath(driver, '/html/body/div[3]/div[2]/div/div/div[1]/ul/li[1]/span'):  
    print("找到了") 
else:  
    print("未找到指定元素")  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄色茶杯

如果我能够自由,你就能自由

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值