Selenium4弃用desired_capabilities后Python如何用Winium自动化Windows桌面应用
问题根因
Selenium 4 正式废弃了webdriver.Remote初始化时直接传入desired_capabilities字典的传参方式,要求必须通过Options对象传递会话配置。Winium.Desktop项目已停止维护多年,官方未提供Python端对应的专属Options类,直接沿用旧参数写法时,Winium服务端无法解析Selenium 4发送的新格式会话请求,就会触发空引用报错。
适配方案
快速修复方案
不需要额外安装第三方依赖,直接使用Selenium内置的BaseOptions类封装配置即可,代码改动量最小:
from selenium import webdriver from selenium.webdriver.common.options import BaseOptions # 封装Winium所需的启动参数 options = BaseOptions() options.set_capability("app", r"C:\Windows\System32\control.exe") options.set_capability("platformName", "Windows") options.set_capability("deviceName", "WindowsPC") # 初始化驱动时传入options参数,移除原desired_capabilities入参 driver = webdriver.Remote( command_executor='http://localhost:9999', options=options )
该写法兼容所有Selenium 4.x正式版本,不需要降级Selenium依赖,也不需要修改Winium.Desktop服务端的启动配置,运行逻辑和旧版本完全一致,不会再触发弃用警告和空引用错误。
长期维护方案
如果项目中多处使用Winium做桌面应用自动化,可以自定义封装WiniumOptions类,对齐Java端DesktopOptions的使用逻辑,后续调用更简洁:
from selenium import webdriver from selenium.webdriver.common.options import BaseOptions class WiniumOptions(BaseOptions): def __init__(self): super().__init__() # 加载Winium默认必填配置 self.set_capability("platformName", "Windows") self.set_capability("deviceName", "WindowsPC") @property def app_path(self): return self.get_capability("app") @app_path.setter def app_path(self, path): self.set_capability("app", path) # 调用示例 if __name__ == "__main__": options = WiniumOptions() options.app_path = r"C:\Windows\System32\control.exe" driver = webdriver.Remote( command_executor="http://localhost:9999", options=options )
注意:Winium.Desktop最新稳定版为1.6.0,官方已停止迭代,不需要尝试寻找更新版本的服务端,上述方案为现有环境下的最小成本适配方式。
内容的提问来源于stack exchange,提问作者Sumanth Suvarna
相关产品推荐
相关产品推荐

