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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:33:08