使用undetected-chromedriver出现WinError 6,求控制台干净退出方案
脚本完成任务后,控制台抛出如下异常(不影响功能,但希望实现干净退出):
Exception ignored in: <function Chrome.del at 0x00000241A36A6700>
Traceback (most recent call last): File "C:\Users\Desktop\22.12.06 Vehicle Scrapper\v2\venv\Lib\site-packages\undetected_chromedriver_init_.py", line 769, in del
self.quit()
File "C:\Users\Desktop\22.12.06 Vehicle Scrapper\v2\venv\Lib\site-packages\undetected_chromedriver_init_.py", line 758, in quit
time.sleep(0.1)
OSError: [WinError 6] Controlador no válido
以下是几种可行的解决方法:
手动调用quit()并禁用__del__方法
脚本结束前显式调用driver.quit(),同时将driver.__del__设为空函数,避免垃圾回收时重复执行quit逻辑触发异常:from undetected_chromedriver import Chrome driver = Chrome() # 执行爬虫逻辑 # 退出处理 try: driver.quit() except Exception: pass # 禁用__del__方法,防止后续触发异常 driver.__del__ = lambda self: None使用上下文管理器+自定义退出逻辑
用with语句管理driver实例,同时覆盖默认的quit方法,捕获可能的OSError:from undetected_chromedriver import Chrome # 自定义quit方法,捕获异常 def custom_quit(self): try: super(type(self), self).quit() except OSError: pass Chrome.quit = custom_quit with Chrome() as driver: # 执行爬虫逻辑 pass临时修改库源码
找到undetected_chromedriver/__init__.py中的quit方法,在time.sleep(0.1)处添加异常捕获:def quit(self): # 保留原有代码 try: time.sleep(0.1) except OSError: pass # 保留原有代码
内容的提问来源于stack exchange,提问作者qwerty000

