You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用undetected_chromedriver自动登录时遇OSError: [WinError 6]错误求助

网站自动登录程序的undetected_chromedriver错误解决

我开发了一个基于Python的网站自动登录程序,一开始用Selenium时Chrome会自动关闭但控制台没报错,推测是目标网站的反爬检测导致的,换成undetected_chromedriver后出现了错误,具体情况如下:

我的代码

import time
import pyperclip
import undetected_chromedriver as uc
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.alert import Alert
from webdriver_manager.chrome import ChromeDriverManager


class LoginService():

    def __init__(self):
        self.driver = None

    def open_web_mode(self):
        self.driver = uc.Chrome()
        self.driver.set_page_load_timeout(10)

    def close_browser(self):
        if self.driver:
            self.driver.quit()
            self.driver = None

    def login(self):
        browser = self.driver.get("https://www.kftcvan.or.kr/member/login/form.do#")
        time.sleep(2) 
        Alert(self.driver).dismiss()

if __name__ == "__main__":
    Login = LoginService()
    Login.open_web_mode()
    Login.login()
    time.sleep(5)
    Login.close_browser()

错误信息

Exception ignored in: <function Chrome.__del__ at 0x0000016EF99FD6C0>
Traceback (most recent call last):
  File "C:\Users\wonky\anaconda3\Lib\site-packages\undetected_chromedriver\__init__.py", line 846, in __del__
    self.quit()
  File "C:\Users\wonky\anaconda3\Lib\site-packages\undetected_chromedriver\__init__.py", line 801, in quit
    time.sleep(0.1)
OSError: [WinError 6] Handle is invalid

解决方法

这个WinError 6错误是因为undetected_chromedriver的__del__析构函数在驱动已经quit后,仍尝试调用quit方法导致的,可通过以下方式解决:

  • 升级版本(最优方案):
    该问题在新版本的undetected_chromedriver中已修复,执行命令升级到最新版:

    pip install --upgrade undetected-chromedriver
    
  • 修改close_browser方法(临时适配):
    在调用quit后,手动清空驱动的析构函数,避免垃圾回收时重复执行quit:

    def close_browser(self):
        if self.driver:
            self.driver.quit()
            # 防止析构函数再次触发quit
            self.driver.__del__ = lambda self: None
            self.driver = None
    
  • 优化登录逻辑(额外建议):
    原代码中browser = self.driver.get(...)无意义,get方法不返回浏览器对象;同时处理Alert时建议添加等待,避免页面未加载完成就执行操作:

    def login(self):
        self.driver.get("https://www.kftcvan.or.kr/member/login/form.do#")
        # 等待Alert出现再处理
        WebDriverWait(self.driver, 10).until(EC.alert_is_present())
        Alert(self.driver).dismiss()
    

内容的提问来源于stack exchange,提问作者hi1207

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:54:58