Python Selenium ChromeDriver函数返回前冻结问题求助
Selenium脚本冻结问题排查与修复
核心问题分析
你的脚本反复出现冻结,核心原因是Chrome驱动进程未被彻底终止,导致资源占用或服务锁定。每次调用getName函数都会启动新的Chrome实例,但driver.close()仅关闭当前浏览器窗口,驱动进程仍在后台运行,积累的进程会阻塞后续执行;另外代码中还存在一处函数调用错误。
具体修复步骤
替换
driver.close()为driver.quit()close()仅关闭当前标签页/窗口,quit()会彻底终止Chrome驱动进程,释放所有关联资源。修改finally块代码:finally: driver.quit()修正循环中的函数调用错误
循环里的pName = ids(i)是错误写法,应该调用目标函数getName(i):for i in ids: pName = getName(i) print("Found name: " + pName) pData[i] = pName复用Chrome驱动实例(推荐优化)
每次创建新驱动实例会消耗大量系统资源,建议在循环外初始化一次驱动,传入函数内复用:ids = [] # some set of ids pData = {} def getName(driver, id:str) -> str: driver.get('https://someurl/page?id=' + id) try: # 添加显式等待,确保元素加载完成后再操作 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "your-element-selector")) # 替换为实际元素定位方式 ) print(element.text) except Exception as e: print(e) return "abcd" # 初始化驱动 options = Options() # 可选添加优化参数,减少资源占用 # options.add_argument('--headless=new') # options.add_argument('--disable-gpu') s = Service('C:\\WebDriver\\chromedriver103.exe') driver = webdriver.Chrome(service=s, options=options) try: for i in ids: pName = getName(driver, i) print("Found name: " + pName) pData[i] = pName finally: driver.quit()添加显式等待
直接获取元素可能因页面未加载完成导致阻塞,使用显式等待替代盲目等待,既提升稳定性又避免不必要的阻塞。
验证方式
修复后运行脚本时,可打开任务管理器查看Chrome相关进程,确认每次执行后进程都能被正确终止。如果仍有冻结问题,检查Chrome浏览器版本与chromedriver版本是否完全匹配(当前chromedriver为103,浏览器需对应103.x版本)。
内容的提问来源于stack exchange,提问作者Nathan Dsouza
相关产品推荐
相关产品推荐

