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

Python Selenium含本地chromedriver路径代码打包及无驱动运行咨询

问题解答

针对两个Selenium使用问题,直接给出可落地的方案:

问题1:将脚本打包为exe,在无提前安装chromedriver、无D盘固定路径的设备上运行

当前代码硬编码D:\chromedriver.exe绝对路径的写法,在其他设备上必然会因为路径不存在、文件缺失报错,按以下步骤调整即可:

  • 第一步:修改路径加载逻辑,禁止硬编码绝对路径
    引入路径适配逻辑,兼容PyInstaller等打包工具运行时的临时文件解压路径,示例代码如下:
    import os
    import sys
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    def get_resource_path(relative_path):
        # 兼容开发环境、打包后exe运行环境的路径获取
        if getattr(sys, 'frozen', False):
            # 打包后运行时,资源文件会被解压到临时目录sys._MEIPASS下
            base_path = sys._MEIPASS
        else:
            # 开发环境下,取当前脚本所在目录为基准路径
            base_path = os.path.dirname(os.path.abspath(__file__))
        return os.path.join(base_path, relative_path)
    
    chrome_options = Options()
    # 此处保留原有的chrome配置,比如无头模式、禁用沙箱等参数
    # 不再写死D盘路径,直接从打包资源中读取chromedriver
    driver = webdriver.Chrome(
        options=chrome_options,
        executable_path=get_resource_path("chromedriver.exe")
    )
    
  • 第二步:将chromedriver作为资源打包进exe
    推荐使用PyInstaller做打包,把和目标设备Chrome大版本匹配的chromedriver.exe放到和脚本同目录下,执行以下打包命令:
    pyinstaller -F --add-data "chromedriver.exe;." 你的脚本文件名.py
    
    打包完成后在dist目录下生成的单exe文件,就内置了chromedriver,运行时自动识别路径,不需要目标设备提前安装驱动、也不依赖固定盘符路径。

    注意:如果不介意目标设备首次运行需要联网,可以替换为webdriver-manager方案自动匹配驱动版本,不需要手动携带chromedriver打包,代码示例:

    from selenium.webdriver.chrome.service import Service
    from webdriver_manager.chrome import ChromeDriverManager
    # 自动下载匹配当前设备Chrome版本的驱动,无需手动指定路径
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
    

问题2:无需手动依赖chromedriver的Selenium实现方案

分两种场景说明:

  • 场景1:仍然在本地启动Chrome浏览器,不想手动下载、配置chromedriver
    升级Selenium到4.6及以上版本即可,官方内置了Selenium Manager工具,会自动检测本地安装的Chrome版本,自动下载匹配的chromedriver到本地缓存目录,全程不需要手动下载驱动、不需要配置executable_path参数,代码可以直接简化为:
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    # 直接初始化即可,不需要传驱动路径
    driver = webdriver.Chrome(options=chrome_options)
    
    该方案本质上还是会自动调用chromedriver,只是整个下载、路径配置流程完全自动化,使用者无感知,不需要手动维护驱动文件。
  • 场景2:本地完全不需要部署chromedriver、甚至不需要安装Chrome浏览器
    使用Selenium Remote WebDriver连接远程部署的Selenium Grid节点即可,所有浏览器运行、驱动调用都在远程服务端完成,本地只需要发送自动化指令、接收执行结果,示例代码:
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    # 连接远程Selenium服务,本地无任何浏览器、驱动依赖
    driver = webdriver.Remote(
        command_executor='http://你的远程Selenium服务地址:4444/wd/hub',
        desired_capabilities=DesiredCapabilities.CHROME
    )
    

补充:如果可以脱离Selenium技术栈,Playwright、Pyppeteer等自动化框架直接基于Chrome DevTools协议和浏览器通信,不需要单独下载对应版本的驱动,安装时会自动匹配内置浏览器,依赖处理更简单。


内容的提问来源于stack exchange,提问作者Minh Long Duong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:48:21