Python爬虫脚本报错:TensorFlow Lite警告致程序终止及Excel行删除失败
问题分析与解决思路
一、TensorFlow Lite警告导致程序终止
该警告来自Chrome浏览器内置的TensorFlow Lite组件,与脚本逻辑无关,但会触发Chrome进程异常退出。解决方法是在Chrome启动选项中禁用XNNPACK delegate:
在你的Chrome Options配置部分添加以下参数:
options.add_argument("--disable-xnnpack")
完整配置示例:
options = Options() options.add_argument("user-data-dir=C:/Users/xyzs/AppData/Local/Google/Chrome for Testing/User Data") options.binary_location = full_path_chrome # 添加禁用XNNPACK的参数 options.add_argument("--disable-xnnpack") service = Service(executable_path=full_path_cdriver) driver = webdriver.Chrome(options=options, service=service)
二、Excel未找到产品行无法删除的问题
代码存在两个关键问题导致行删除失效:
1. product_found变量未初始化
当搜索不到产品时,driver.find_elements(By.CLASS_NAME, "button-2")返回空列表,不会执行product_found = True,此时product_found变量未定义,会抛出NameError导致程序终止,无法执行后续删除逻辑。
修正方法:在循环开始时初始化product_found为False:
for i in range(1,4): product_found = False # 初始化变量 prod_id = sheet1.cell(row=i+1, column=2).value # 后续逻辑不变
2. 正序循环删除行导致索引错乱
删除某一行后,后续行的索引会自动上移,但正序循环会跳过下一行数据。比如删除第2行后,原来的第3行变成第2行,但循环i递增到2,会直接处理原来的第4行,导致遗漏。
修正方法:倒序循环,从最后一行往前处理:
# 替换原来的for循环,处理第2到第4行(对应i从3到1倒序) for i in range(3, 0, -1): product_found = False prod_id = sheet1.cell(row=i+1, column=2).value # 后续搜索逻辑不变 if not product_found: print("No product found") sheet1.delete_rows(i+1, 1) # 行号对应i+1,匹配原循环的row=i+1 book.save('updated_trial.xlsx')
3. 额外优化点
- 避免在循环内频繁调用
book.save(),可在循环结束后统一保存,减少IO操作 - 搜索后可添加更可靠的无结果判断,比如检查页面是否包含“无结果”类的元素,而非仅依赖
button-2的存在
修正后的完整onescript函数示例
def onescript(driver): book = load_workbook('trial.xlsx') sheet1 = book.active driver.get("https://www.jaquar.com/en/") #Open the web page # 倒序循环处理行,避免删除后索引错乱 for i in range(3, 0, -1): product_found = False prod_id = sheet1.cell(row=i+1, column=2).value if not prod_id: print("Empty product ID, skipping") sheet1.delete_rows(i+1, 1) continue # 搜索产品 search_product = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "small-searchterms")) ) search_product.clear() search_product.send_keys(prod_id) search_product.send_keys(Keys.ENTER) # 判断是否找到产品并处理下载 if driver.find_elements(By.CLASS_NAME, "button-2"): click_details = WebDriverWait(driver, 2).until( EC.presence_of_element_located((By.CLASS_NAME, "button-2")) ) click_details.click() download_image = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "download-image")) ) download_image.click() product_found = True if not product_found: print(f"No product found for ID: {prod_id}") sheet1.delete_rows(i+1, 1) # 循环结束后统一保存文件 book.save('updated_trial.xlsx')
内容的提问来源于stack exchange,提问作者DoubtsByDrake
相关产品推荐
相关产品推荐

