Selenium Python程序二级循环未执行,多级悬停功能异常求助
解决Selenium二级悬停循环不执行的问题
问题分析及修复点:
循环变量重复覆盖
内外两层循环都使用了变量i,内部循环会直接覆盖外部循环的i值,导致外部循环迭代逻辑混乱,这是二级循环不执行的核心原因之一。二级分类定位器不通用
.Level_1_Category_No1是绑定第一个一级分类的固定类名,切换到其他一级分类时,二级菜单的父容器类名会变化,导致找不到二级分类元素,循环自然无法执行。需要改用更通用的定位方式,针对所有一级分类悬停后显示的二级菜单容器。固定等待不可靠
time.sleep(1)是固定时长等待,若页面加载延迟,二级分类元素未渲染完成就执行查找操作,会得到空元素列表,导致循环不触发。建议用显式等待确保元素可见后再操作。
修改后的代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://www.daraz.com.bd/") wait = WebDriverWait(driver, 10) # 获取所有一级分类元素 main_categories = driver.find_elements(By.CSS_SELECTOR, '.lzd-site-menu-root-item span') for main_item in main_categories: # 悬停一级分类 ActionChains(driver).move_to_element(main_item).perform() # 显式等待二级菜单加载完成并可见 sub_menu_container = wait.until( EC.visibility_of_element_located((By.CSS_SELECTOR, '.lzd-site-menu-sub')) ) # 获取当前一级分类下的所有二级分类 sub_categories = sub_menu_container.find_elements(By.CSS_SELECTOR, '[data-spm-anchor-id] span') # 遍历二级分类并悬停 for sub_item in sub_categories: ActionChains(driver).move_to_element(sub_item).perform() # 若需处理三级分类,可在此添加等待及查找逻辑 driver.quit()
额外说明:
- 改用
main_item和sub_item作为循环变量,避免变量冲突。 - 通过
WebDriverWait等待二级菜单容器可见,确保元素加载完成后再查找二级分类。 - 基于二级菜单容器查找内部元素,确保只获取当前一级分类下的二级元素,而非全局元素。
内容的提问来源于stack exchange,提问作者boyenec
相关产品推荐
相关产品推荐

