macOS Monterey环境下Selenium 4.1.1导入SafariOptions报ModuleNotFoundError且无法使用desired_capabilities的问题求助
解决Selenium 4.1.1 + Safari 15.4的两个核心问题
我来帮你一步步解决这两个配置问题,都是Selenium 4适配Safari时的典型坑:
一、修复ModuleNotFoundError: No module named 'selenium.webdriver.safari.options'
在Selenium 4.x(包括你用的4.1.1)版本中,Safari的Options类并没有放在单独的options子模块里,而是直接挂载在selenium.webdriver.safari模块下。你只需要调整导入语句:
错误写法:
from selenium.webdriver.safari.options import Options as SafariOptions
正确写法:
from selenium.webdriver.safari import SafariOptions
初始化代码可以保持不变:
self.options = SafariOptions()
这样就能解决模块找不到的问题了。
二、替代弃用的desired_capabilities,改用Options对象
Selenium 4确实已经彻底弃用了desired_capabilities参数,官方要求用Options类来管理浏览器配置。针对Safari,你可以通过SafariOptions的set_capability方法迁移原来的配置,或者直接设置对应的属性(如果有现成属性的话)。
迁移示例:从desired_capabilities到SafariOptions
假设你原来的代码是这样的:
desired_caps = { "safari:automaticInspection": False, "safari:automaticProfiling": False } driver = webdriver.Safari(desired_capabilities=desired_caps)
现在改成用Options的写法:
from selenium.webdriver.safari import SafariOptions from selenium.webdriver import Safari options = SafariOptions() # 用set_capability添加原有的配置项 options.set_capability("safari:automaticInspection", False) options.set_capability("safari:automaticProfiling", False) # 初始化驱动时传入options参数 driver = Safari(options=options)
额外必做:Safari自动化前置配置
在macOS上用Safari跑自动化,必须先完成这两步,否则代码再正确也会失败:
- 开启Safari开发者模式:打开Safari → 偏好设置 → 高级 → 勾选「在菜单栏中显示开发菜单」
- 允许远程自动化:点击顶部菜单栏的「开发」→ 勾选「允许远程自动化」
整合后的验证代码
把这些修改整合后,你的初始化代码大概是这样的:
from selenium.webdriver.safari import SafariOptions from selenium.webdriver import Safari class YourTestSuite: def __init__(self): self.options = SafariOptions() # 添加你的自定义浏览器配置 self.options.set_capability("safari:automaticInspection", False) self.driver = Safari(options=self.options)
这样就能同时解决模块找不到的错误和desired_capabilities的弃用警告了。
内容的提问来源于stack exchange,提问作者VVV
相关产品推荐
相关产品推荐

