Selenium脚本异常:item.find_elements未在当前元素内检索,全局查找div
解决Selenium中WebElement范围内查找子元素失效的问题
你遇到的问题是遍历<cw-item>元素时,调用item.find_elements(By.TAG_NAME, "div")未在当前元素范围内查找,而是全局检索所有div。这是因为部分场景下By.TAG_NAME结合WebElement的查找逻辑可能出现异常,可通过以下两种方式解决:
方案一:使用相对XPATH定位
通过相对路径的XPATH限定查找范围,.//表示从当前元素上下文开始查找子元素,代码修改如下:
try: tradeables = WebDriverWait(driver, 50).until( EC.presence_of_all_elements_located((By.XPATH, "//cw-item")) ) for item in tradeables: # 用相对XPATH限制在当前cw-item内查找div divs = item.find_elements(By.XPATH, ".//div") print(divs) except Exception as e: print(e)
方案二:使用CSS选择器定位
WebElement调用find_elements(By.CSS_SELECTOR, "div")默认会在当前元素的子范围内查找,兼容性更稳定,代码如下:
try: tradeables = WebDriverWait(driver, 50).until( EC.presence_of_all_elements_located((By.XPATH, "//cw-item")) ) for item in tradeables: divs = item.find_elements(By.CSS_SELECTOR, "div") print(divs) except Exception as e: print(e)
原方法失效的原因大概率是页面Angular封装的元素(带有_ngcontent属性)干扰了By.TAG_NAME的默认查找逻辑,改用上述两种定位方式即可解决范围错误的问题。
内容的提问来源于stack exchange,提问作者Karafakeu
相关产品推荐
相关产品推荐

