Selenium驱动遇验证码无法关闭的代码错误排查请求
问题排查与修复方案
核心问题分析
- 驱动关闭不彻底:
driver.close()仅关闭当前窗口,驱动进程仍在后台运行,导致资源占用和卡顿,需用driver.quit()彻底终止驱动服务。 - 等待时间过长:
implicitly_wait(300)设置了5分钟等待,遇到验证码时会耗尽等待时长才判定元素不存在,直接引发卡顿。 - 关闭驱动后未终止循环:关闭驱动后继续执行循环,尝试用已失效的驱动请求页面,引发无响应或异常。
- 文件操作未释放资源:直接调用
codecs.open未配合with语句,可能造成文件句柄泄漏。 - 无限循环无终止条件:
while True会持续运行,即使所有ID处理完成也不会停止。
修改后的代码
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import os import codecs # 检查元素是否存在,改用显式等待快速判断 def find_element(driver, target_id='restab') -> int: try: # 10秒内等待元素出现,超时则判定不存在 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, target_id)) ) return 1 except: return 0 # 下载页面并处理驱动逻辑 def data_fill(id_list, driver) -> int: for idx, id in enumerate(id_list): author_page = f"https://www.elibrary.ru/author_profile_new_titles.asp?id={id}" driver.get(author_page) result = find_element(driver) if result == 0: # 彻底终止驱动进程 driver.quit() # 返回当前处理到的索引,方便后续断点续传 return idx else: file_path = os.path.join("/Users/dariagerashchenko/PycharmProjects/python_practice/hist", f"j_profile{id}.html") # 用with语句自动管理文件句柄,避免泄漏 with codecs.open(file_path, "w", "utf-8") as f: f.write(driver.page_source) # 所有ID处理完成,关闭驱动并返回-1标记 driver.quit() return -1 # 主执行逻辑 k = 0 processed_idx = 0 # 记录已处理的ID索引,避免重复操作 total_ids = len(id_list) while processed_idx < total_ids: if k % 5 == 0: proxy_list = get_proxies() k += 1 driver = get_best_driver(driver_path=driver_path, proxy_list=proxy_list) if driver is None: continue # 传入未处理的ID子集 current_result = data_fill(id_list=id_list[processed_idx:], driver=driver) if current_result == -1: print("所有数据已收集完成。") break else: processed_idx += current_result print(f"当前已处理到第 {processed_idx} 个ID,更换代理继续...")
关键修改说明
- 显式等待替代隐式等待:设置10秒超时,快速判断元素是否存在,避免长时间等待卡顿。
driver.quit()替代driver.close():彻底终止驱动进程,释放系统资源,解决卡顿问题。- 新增断点续传逻辑:记录已处理ID的索引,处理中断后可从断点继续,无需重复下载。
- 文件句柄自动管理:用
with语句自动关闭文件,避免资源泄漏。 - 循环终止条件:当所有ID处理完成后自动退出循环,避免无限运行。
内容的提问来源于stack exchange,提问作者Daria
相关产品推荐
相关产品推荐

