Python Selenium Edge无头模式与用户数据目录共存启动崩溃求助
Edge WebDriver同时启用用户数据目录与无头模式启动崩溃
问题现象
单独配置以下任一参数时,Python Selenium爬虫可正常运行:
edge_options.add_argument("--user-data-dir=C:\\Users\\xxx\\Desktop\\Edge_user_data") edge_options.add_argument('--headless')
但同时启用两个参数时,浏览器启动直接崩溃。
报错信息
Traceback (most recent call last): File "C:\Users\xxx\Desktop\test17.py", line 3414, in <module> slower_process(urls, result_file_path) File "C:\Users\xxx\Desktop\test17.py", line 3338, in slower_process result = check_url(url) ^^^^^^^^^^^^^^ File "C:\Users\xxx\Desktop\test17.py", line 42, in check_url result = 123_check(url, username) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\xxx\Desktop\test17.py", line 534, in 123_check driver = initialize_driver5() ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\xxx\Desktop\test17.py", line 321, in initialize_driver5 driver = webdriver.Edge(options=edge_options, service=service) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\xxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\edge\webdriver.py", line 45, in __init__ super().__init__( File "C:\Users\xxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\chromium\webdriver.py", line 56, in __init__ super().__init__( File "C:\Users\xxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 206, in __init__ self.start_session(capabilities) File "C:\Users\xxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 290, in start_session response = self.execute(Command.NEW_SESSION, caps)["value"] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\xxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 345, in execute self.error_handler.check_response(response) File "C:\Users\xxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 229, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: msedge failed to start: crashed. (unknown error: DevToolsActivePort file doesn't exist) (The process started from msedge location C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe is no longer running, so msedgedriver is assuming that msedge has crashed.) Stacktrace: GetHandleVerifier [0x00007FF74D583DB2+61490] Microsoft::Applications::Events::EventProperty::~EventProperty [0x00007FF74D516002+740642] (No symbol) [0x00007FF74D2EB8AE] (No symbol) [0x00007FF74D31CBFE] (No symbol) [0x00007FF74D317F13] (No symbol) [0x00007FF74D35B7F8] (No symbol) [0x00007FF74D3536E3] (No symbol) [0x00007FF74D325EAA] (No symbol) [0x00007FF74D32518B] (No symbol) [0x00007FF74D326634] Microsoft::Applications::Events::ILogManager::DispatchEventBroadcast [0x00007FF74D748D69+1207369] (No symbol) [0x00007FF74D3A5304] Microsoft::Applications::Events::EventProperty::~EventProperty [0x00007FF74D4690F1+32273] Microsoft::Applications::Events::EventProperty::~EventProperty [0x00007FF74D4619E9+1801] Microsoft::Applications::Events::ILogManager::DispatchEventBroadcast [0x00007FF74D747944+1202212] Microsoft::Applications::Events::ILogConfiguration::operator* [0x00007FF74D51E998+19784] Microsoft::Applications::Events::ILogConfiguration::operator* [0x00007FF74D51AE54+4612] Microsoft::Applications::Events::ILogConfiguration::operator* [0x00007FF74D51AF86+4918] Microsoft::Applications::Events::EventProperty::~EventProperty [0x00007FF74D50F451+713073] BaseThreadInitThunk [0x00007FF87E917614+20] RtlUserThreadStart [0x00007FF87FD226B1+33]
当前Driver初始化代码
def initialize_driver5(): # Microsoft Edge # Define Edge options edge_options = webdriver.EdgeOptions() edgepath = "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe" edge_options.setBinary = edgepath service = webdriver.EdgeService(service_args=['--log-level=SEVERE', '--disable-build-check']) # Using the user profile edge_options.add_argument("--user-data-dir=C:\\Users\\xxx\\Desktop\\Edge_user_data") # Options logger = logging.getLogger() logger.setLevel(logging.CRITICAL) #logging.basicConfig(level=logging.WARNING) edge_options.add_argument('--remote-debugging-port=0') edge_options.add_argument('--no-first-run') edge_options.add_argument('--no-default-browser-check') edge_options.add_argument('--headless') edge_options.add_argument('--log-level=3') edge_options.add_argument("--disable-logging") edge_options.add_argument('--start-maximized') edge_options.add_argument('--disable-infobars') edge_options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=edge_options, service=service) return driver
已尝试的解决方案
- 赋予Microsoft Edge权限
- 重置Microsoft Edge浏览器
- 复制用户配置文件夹
- 删除并重新创建用户配置文件夹
- 删除并重新下载msedgedriver
- 指定可执行文件路径
- 设置
--remote-debugging-port=0等建议参数 - 关闭后台所有Edge进程
- 重置电脑
有效解决方案建议
- 改用新版无头模式参数:将
--headless替换为--headless=new,新版无头模式优化了与用户配置目录的兼容性,避免老版本的隔离机制冲突。 - 指定具体用户配置文件夹:在
--user-data-dir后添加--profile-directory=Default(替换为实际的配置文件夹名称,比如Profile 1),确保无头模式能精准加载指定配置,而非尝试创建新配置引发冲突。 - 修复二进制路径设置:当前代码中
edge_options.setBinary = edgepath写法错误,正确应为edge_options.binary_location = edgepath,错误设置可能导致浏览器启动路径异常,叠加参数后触发崩溃。 - 移除无效冲突参数:删除
--start-maximized(无头模式下该参数无效),将--remote-debugging-port=0改为固定端口如--remote-debugging-port=9222,避免端口分配问题。 - 清理配置文件夹锁定文件:手动打开
Edge_user_data目录,删除SingletonLock、SingletonSocket等锁定文件,消除后台进程残留的锁定影响。
修改后的初始化代码示例:
def initialize_driver5(): # Microsoft Edge edge_options = webdriver.EdgeOptions() # 正确设置二进制路径 edge_options.binary_location = "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe" service = webdriver.EdgeService(service_args=['--log-level=SEVERE', '--disable-build-check']) # 指定用户数据目录和具体配置文件 edge_options.add_argument("--user-data-dir=C:\\Users\\xxx\\Desktop\\Edge_user_data") edge_options.add_argument("--profile-directory=Default") # 替换为实际的配置文件夹名 logger = logging.getLogger() logger.setLevel(logging.CRITICAL) edge_options.add_argument('--no-first-run') edge_options.add_argument('--no-default-browser-check') # 使用新版无头模式 edge_options.add_argument('--headless=new') edge_options.add_argument('--log-level=3') edge_options.add_argument("--disable-logging") edge_options.add_argument('--disable-infobars') edge_options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) # 指定固定调试端口 edge_options.add_argument('--remote-debugging-port=9222') driver = webdriver.Edge(options=edge_options, service=service) return driver
内容的提问来源于stack exchange,提问作者themightyduckman
相关产品推荐
相关产品推荐

