使用Selenium连接Edge IE模式加载配置文件失败,报错无法创建默认配置目录
问题描述
我有一个用于访问未升级工作内网站点的Python脚本,这些站点需在Edge的IE兼容模式下运行。因系统更新后IE已停用,我修改了脚本以适配Edge的IE模式,但新脚本仅打开无配置文件的自动化窗口,无法利用配置文件的内网访问权限,且运行时出现报错:
Message: session not created
from unknown error: cannot create default profile directory
导入库
from decimal import Decimal from sys import argv from time import sleep import os import shutil import traceback from selenium import webdriver from selenium.webdriver.edge.service import Service from selenium.common.exceptions import InvalidElementStateException, TimeoutException from selenium.webdriver.common.by import By import selenium.webdriver.support.ui as ui import xlrd
原函数
def create_browser(): ie_options = webdriver.IeOptions() # run edge in IE mode # would stick to regular instance of edge in ie compatibility mode ie_options.attach_to_edge_chrome = True ie_options.edge_executable_path="C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe" return webdriver.Ie(options = options)
新函数
def create_browser(): edge_options = webdriver.EdgeOptions() edge_options.add_argument("--ie-mode-test") #edge_options.add_argument("--start-maximized") edge_options.add_argument(r"--user-data-dir=C:\Users\%USERNAME%\AppData\Local\Microsoft\Edge\User Data") edge_options.add_argument("--profile-directory=Default") service = Service(executable_path=r"C:\Webdrivers\msedgedriver.exe") return webdriver.Edge(service=service, options=edge_options)
请问我是否遗漏了什么配置?是否有Selenium相关的设置被我忽略了?
解决方案
针对你的问题,主要有几个关键点需要修正:
- 用户变量解析问题
你在--user-data-dir中使用的%USERNAME%是Windows环境变量,Python不会自动解析,需要用os.environ['USERNAME']替换来生成正确路径:
user_data_dir = fr"C:\Users\{os.environ['USERNAME']}\AppData\Local\Microsoft\Edge\User Data" edge_options.add_argument(f"--user-data-dir={user_data_dir}")
- IE模式的正确配置方式
仅添加--ie-mode-test不足以启用正式的IE兼容模式,需要通过EdgeOptions的实验性配置指定Edge路径并启用IE模式,同时确保浏览器和驱动版本完全匹配:
edge_options.add_experimental_option("ie.edgechromium", True) edge_options.add_experimental_option("ie.edgepath", r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe") edge_options.add_argument("--ie-mode")
避免配置文件占用冲突
如果当前有普通Edge窗口在运行,Selenium无法直接使用正在被占用的Default配置文件,解决方法:- 关闭所有Edge窗口后再运行脚本
- 复制一份
Default配置到新目录,将新目录设为--user-data-dir的目标路径
原函数笔误修正(可选)
原函数返回时误用了未定义的options变量,应该替换为ie_options:
return webdriver.Ie(options=ie_options)
修正后的完整create_browser函数示例:
def create_browser(): edge_options = webdriver.EdgeOptions() # 配置IE模式核心参数 edge_options.add_experimental_option("ie.edgechromium", True) edge_options.add_experimental_option("ie.edgepath", r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe") edge_options.add_argument("--ie-mode") # 正确生成用户数据目录路径 user_data_dir = fr"C:\Users\{os.environ['USERNAME']}\AppData\Local\Microsoft\Edge\User Data" edge_options.add_argument(f"--user-data-dir={user_data_dir}") edge_options.add_argument("--profile-directory=Default") service = Service(executable_path=r"C:\Webdrivers\msedgedriver.exe") return webdriver.Edge(service=service, options=edge_options)
额外注意:若企业环境有组策略限制IE模式的自动化访问,需要联系IT部门确认权限配置。
内容的提问来源于stack exchange,提问作者Karolsweats
相关产品推荐
相关产品推荐

