Python/Selenium如何实现衬衫与对应颜色的关联列表展示?
解决Python/Selenium中衬衫与对应颜色关联展示的问题
你现在的问题在于代码是先把所有衬衫名称一次性打印完,再打印所有颜色,导致两者是完全分开的独立列表。要让它们关联起来,核心思路是找到每个商品的独立容器,然后在每个容器内分别提取衬衫名称和对应的颜色,这样就能保证两者一一对应啦。
先说说原始代码的问题:你用两个全局XPath分别抓取所有衬衫和所有颜色,这就导致两者的顺序即便逻辑上对应,但输出是完全割裂的。我们可以调整思路,先定位每个商品的父元素(也就是页面里的<article>标签,你的原始XPath里也能看到每个商品都在//*[@id="container"]/article下),然后在每个article内部单独查找衬衫名称和颜色。
修改后的代码(单颜色场景)
# 先定位所有商品的容器 items = driver.find_elements_by_xpath('//*[@id="container"]/article') # 遍历每个商品容器 for item in items: # 注意XPath前的`.`:表示在当前元素范围内查找,而非整个文档 shirt_name = item.find_element_by_xpath('.//div/h1/a').text color = item.find_element_by_xpath('.//div/p/a').text # 关联打印衬衫和颜色 print(f"{shirt_name}: {color}")
如果商品有多个颜色的适配版本
如果部分衬衫对应多种颜色,把find_element改成find_elements,再遍历颜色列表即可:
items = driver.find_elements_by_xpath('//*[@id="container"]/article') for item in items: shirt_name = item.find_element_by_xpath('.//div/h1/a').text # 抓取当前商品下的所有颜色 color_elements = item.find_elements_by_xpath('.//div/p/a') color_list = [color.text for color in color_elements] # 用逗号拼接颜色列表后打印 print(f"{shirt_name}: {', '.join(color_list)}")
这样输出就会变成每个衬衫名称后面紧跟它对应的颜色,再也不会是两个分开的列表了~
内容的提问来源于stack exchange,提问作者cyber1337
相关产品推荐
相关产品推荐

