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

Pyinstaller打包Python脚本后Selenium-manager.exe弹窗问题求助

问题:Pyinstaller打包Selenium脚本后弹出selenium-manager.exe控制台窗口
  • 现象:使用Selenium配置无头浏览器时,将脚本通过Pyinstaller打包为可执行文件后,会短暂弹出名为selenium-manager.exe的黑色控制台窗口,随后自动关闭;该窗口并非chromedriver.exe窗口(已通过CREATE_NO_WINDOW处理chromedriver的控制台显示)。直接运行Python脚本则无此问题。
  • 已尝试操作:使用pyinstaller --windowed my_script.py命令打包,以及添加--noconsole参数或单独使用该参数,均无法解决问题。
  • 环境信息:Windows 10 10.0.19045-SP0,Python 3.11.1,Selenium 4.10.0,Pyinstaller 5.13.0
  • 代码示例:
from subprocess import CREATE_NO_WINDOW
from selenium.webdriver.chrome.service import Service
from selenium.webdriver import Chrome, ChromeOptions

def setup_options(options: ChromeOptions) -> ChromeOptions :
    options.add_argument('--headless=new')
    options.add_argument('--disable-extensions')
    options.add_argument('--disable-infobars')
    options.add_argument('--no-sandbox')
    return options

def setup_driver() -> Chrome:
    service_chrome = Service()
    service_chrome.creation_flags = CREATE_NO_WINDOW
    options = setup_options(ChromeOptions())
    return Chrome(service=service_chrome, options=options)

driver = setup_driver()
# 执行自动化操作
driver.quit()
  • 窗口说明:弹出的窗口为标准Windows控制台窗口,标题栏显示selenium-manager.exe,窗口短暂出现后立即关闭。

原因及解决办法

原因

Selenium 4.x版本引入了Selenium Manager工具,用于自动检测、下载和匹配浏览器驱动。当Pyinstaller打包脚本后,Selenium Manager会以子进程形式启动,而当前代码仅对chromedriver设置了CREATE_NO_WINDOW来隐藏控制台,未对Selenium Manager的启动做对应处理;同时Pyinstaller的--windowed/--noconsole参数仅管控主进程的控制台显示,无法影响Selenium启动的子进程。

解决办法

方案1:通过环境变量禁用Selenium Manager控制台

在代码最开头添加环境变量设置,确保在Selenium模块初始化前生效,让Selenium Manager启动时不显示控制台:

import os
# 设置环境变量,禁止Selenium Manager弹出控制台
os.environ['SE_MANAGER_SKIP_CONSOLE'] = '1'

# 之后再导入Selenium相关模块
from subprocess import CREATE_NO_WINDOW
from selenium.webdriver.chrome.service import Service
from selenium.webdriver import Chrome, ChromeOptions

# 后续代码保持不变
def setup_options(options: ChromeOptions) -> ChromeOptions :
    options.add_argument('--headless=new')
    options.add_argument('--disable-extensions')
    options.add_argument('--disable-infobars')
    options.add_argument('--no-sandbox')
    return options

def setup_driver() -> Chrome:
    service_chrome = Service()
    service_chrome.creation_flags = CREATE_NO_WINDOW
    options = setup_options(ChromeOptions())
    return Chrome(service=service_chrome, options=options)

driver = setup_driver()
# 执行自动化操作
driver.quit()

方案2:手动指定ChromeDriver路径,绕过Selenium Manager

提前下载与本地Chrome浏览器版本匹配的chromedriver.exe,将其放置在脚本目录中,然后在代码中手动指定驱动路径,这样Selenium Manager就不会自动启动:

from subprocess import CREATE_NO_WINDOW
from selenium.webdriver.chrome.service import Service
from selenium.webdriver import Chrome, ChromeOptions

def setup_options(options: ChromeOptions) -> ChromeOptions :
    options.add_argument('--headless=new')
    options.add_argument('--disable-extensions')
    options.add_argument('--disable-infobars')
    options.add_argument('--no-sandbox')
    return options

def setup_driver() -> Chrome:
    # 手动指定chromedriver路径,替换为实际路径
    service_chrome = Service(executable_path='./chromedriver.exe')
    service_chrome.creation_flags = CREATE_NO_WINDOW
    options = setup_options(ChromeOptions())
    return Chrome(service=service_chrome, options=options)

driver = setup_driver()
# 执行自动化操作
driver.quit()

注意:打包时需将chromedriver.exe与生成的可执行文件放在同一目录下,且要保证chromedriver版本与目标机器上的Chrome版本匹配。


内容的提问来源于stack exchange,提问作者Sen ZmaKi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:58:23