如何在Selenium中检测<div>内是否存在指定元素?代码else分支未触发
问题分析与解决
你的代码有两个核心问题导致else分支永远无法触发:
find_element会直接抛出异常:当目标<img>不存在时,find_element不会返回None,而是抛出NoSuchElementException,程序直接中断,根本走不到else判断。- XPath路径错误:
//img是从整个文档根节点开始查找,不是在当前<div>内部查找,会把页面上所有符合条件的<img>都找出来,哪怕不在当前循环的div里,导致判断逻辑完全错误。
修正后的代码
picUrl = [] eachDiv = self.find_elements(By.XPATH, "//div[@class='NiLAwe y6IFtc R7GTQ keNKEd j7vNaf nID9nc']") for individualDiv in eachDiv: # 用find_elements查找当前div内的目标img,找不到返回空列表 target_imgs = individualDiv.find_elements(By.XPATH, ".//img[@class='tvs3Id QwxBBf']") if target_imgs: # 取第一个匹配的img的src picUrl.append(target_imgs[0].get_attribute('src')) print('present') else: picUrl.append(" no pic ") print('not') return picUrl
关键改动说明
- 把
find_element换成find_elements:找不到元素时返回空列表,不会抛出异常,能正常进入else分支。 - XPath前缀加
.:.//img表示在当前<div>的上下文范围内查找,确保只检查当前循环的div内部的img元素。 - 避免重复查找:先把查找结果存到
target_imgs变量里,不用重复调用查找方法,提升执行效率。
内容的提问来源于stack exchange,提问作者Aavash Kc
相关产品推荐
相关产品推荐

