前端使用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("未找到指定元素")  


















