Python Selenium中Try Except使用及多窗口优化问题求助
问题解决方案
1. 单窗口处理所有ASIN
你之前每个ASIN都会打开新窗口,是因为把Firefox驱动的初始化代码写在了ASIN循环内部。把驱动初始化移到循环外面,就能用同一个窗口处理所有请求:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException import pandas as pd # 初始化驱动(只执行一次,放在循环外) driver = webdriver.Firefox() driver.implicitly_wait(10) # 全局隐式等待,避免页面加载慢导致找不到元素 # 替换成你的ASIN列表 asin_list = ["B0XXXXXXX", "B0YYYYYYY", "B0ZZZZZZZ"] results = [] for asin in asin_list: # 后续提取逻辑放在这里
2. 用Try Except跳过空页面/无URL的情况
把提取主图URL的核心逻辑包裹在Try块中,针对性捕获找不到元素、表格为空这类异常,直接跳过无效ASIN:
for asin in asin_list: try: # 用同一个driver打开当前ASIN的页面 driver.get(f"你的内部站点URL?asin={asin}") # 替换成你实际提取URL的代码(示例为通过表格提取图片链接) table_row = driver.find_element(By.XPATH, "//table[@id='product-img-table']/tbody/tr") img_url = table_row.find_element(By.TAG_NAME, "img").get_attribute("src") # 额外判断URL是否为空 if not img_url.strip(): print(f"ASIN {asin}提取到空URL,跳过") continue results.append({"ASIN": asin, "主图URL": img_url}) print(f"成功提取ASIN {asin}的URL") # 捕获找不到元素、索引错误等常见异常 except (NoSuchElementException, IndexError) as e: print(f"ASIN {asin}页面无有效数据,跳过: {str(e)}") # 捕获其他意外错误 except Exception as e: print(f"处理ASIN {asin}时出错: {str(e)}") continue # 循环结束后关闭浏览器 driver.quit() # 保存结果到Excel df = pd.DataFrame(results) df.to_excel("亚马逊主图URL结果.xlsx", index=False)
关键修改说明
- 驱动初始化移到循环外:确保全程只用一个Firefox窗口,避免重复启动浏览器的开销
- 全局隐式等待:给页面加载留足够时间,减少因加载慢导致的元素找不到问题
- 针对性捕获异常:精准跳过页面无数据、找不到元素的ASIN
- 空URL判断:即使找到元素,也确保提取到的URL不是空值
内容的提问来源于stack exchange,提问作者Popeye
相关产品推荐
相关产品推荐

