You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Python程序二级循环未执行,多级悬停功能异常求助

解决Selenium二级悬停循环不执行的问题

问题分析及修复点:

  1. 循环变量重复覆盖
    内外两层循环都使用了变量i,内部循环会直接覆盖外部循环的i值,导致外部循环迭代逻辑混乱,这是二级循环不执行的核心原因之一。

  2. 二级分类定位器不通用
    .Level_1_Category_No1是绑定第一个一级分类的固定类名,切换到其他一级分类时,二级菜单的父容器类名会变化,导致找不到二级分类元素,循环自然无法执行。需要改用更通用的定位方式,针对所有一级分类悬停后显示的二级菜单容器。

  3. 固定等待不可靠
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 02:45:12