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

Python/Selenium中zip()函数返回结果不符合预期的问题排查

问题分析与解决方案:Selenium遍历商品时信息匹配错误

Hey there, let's break down what's going wrong with your script and fix it step by step.

核心问题所在

  • 全局列表遍历逻辑错误:你提前获取了全站的shirts和colors列表,在找到第一个有货商品时,用zip(shirts, colors)循环了所有商品的信息——这就是为什么你看到最后一个商品的内容被输出,因为这个循环会跑完所有条目,最后留下的是最后一条的结果。你应该在当前遍历的article内部获取对应商品的信息,而非依赖全局列表。
  • 库存判断逻辑不稳定:用article.find_element_by_tag_name('a').text == ""判断有货太脆弱,页面元素的文本可能因加载延迟、布局差异出现偏差。更可靠的方式是检查是否存在"sold out"元素——不存在则代表商品有货。
  • 链接定位不准确:你用article.find_element_by_xpath('div/a')获取链接,这个路径可能指向颜色标签或其他无关的a标签,需要精准定位到商品标题的链接。

修正后的代码

from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains

articles = driver.find_elements_by_tag_name('article')
for article in articles:
    # 移动到元素确保所有子元素加载完成
    ActionChains(driver).move_to_element(article).perform()
    
    try:
        # 尝试查找"sold out"标签,找到则判定为售罄
        article.find_element_by_xpath(".//a[text()='sold out']")
        print("sold out")
    except NoSuchElementException:
        # 未找到售罄标签,判定为有货
        print("available")
        # 在当前article内精准获取商品信息
        shirt_name = article.find_element_by_xpath(".//div/h1/a").text
        color_name = article.find_element_by_xpath(".//div/p/a").text
        product_link = article.find_element_by_xpath(".//div/h1/a").get_attribute('href')
        
        print(f"{shirt_name} {color_name}")
        print(product_link)

关键修正说明

  • 移除全局商品列表:现在每个article只处理自身内部的元素,确保商品信息与当前条目一一对应。
  • 异常捕获判断库存:用try-except捕获NoSuchElementException来判断库存状态,比文本匹配更稳定,只要页面上没有"sold out"元素,就代表商品可购买。
  • 相对路径定位元素:所有xpath都以.开头,代表仅在当前article元素内部查找,避免定位到页面其他区域的元素。
  • 直接输出当前商品信息:不再循环全局列表,只输出当前有货商品的名称、颜色和链接,完全符合你的预期。

内容的提问来源于stack exchange,提问作者cyber1337

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:17:53