Pyinstaller打包后执行webdriver.Chrome,弹黑框问题解决方案

news/2024/11/28 9:28:23/

Chromedriver 默认情况下,如果有当前控制台,就用当前控制台,没有时,就会自己新建一个, 这样我们如果用 --noconsole 生成执行文件并执行,就会出现弹黑框的问题。

网上有两个常见的解决方案,都需要修改Selenium源码

方案一: creationflags = 134217728

在环境的 Lib\site-packages\selenium\webdriver\common\ 这个目录下打开service.py文件,找到函数start ,在 subprocess.Popen 加上一段代码creationflags=134217728 。

CREATE_NO_WINDOW 这个常量也是这个值,
creationflags=CREATE_NO_WINDOW 是同样的思路。

参看:

  • 如何让selenium不弹出黑框_selenium 黑窗口_迷惘岁月的博客-CSDN博客

方案二 用 subprocess.STARTUPINFO 控制

subprocess.Popen 通过指定一个windows专用的参数
subprocess.STARTUPINFO() 来控制。 然后自己封装一个 NoConsoleChromeWebDriver

  • python selenium 运行driver时不弹出控制台CMD窗口 - 简书

  • python selenium 运行时弹出窗口(弹出driver的cmd窗口)_python程序运行cmd窗口怎样另外弹出来一个窗口_wcyyyyyyy的博客-CSDN博客

不改 Selenium 源码方案

在 Selenium 4.0 以上版本,已经给了解决方案。

但是有个坑:
python - Unable to hide Chromedriver console with CREATE_NO_WINDOW - Stack Overflow

4.5.0 用

chrome_service.creationflags = CREATE_NO_WINDOW

4.6.0 之后用

chrome_service.creation_flags = CREATE_NO_WINDOW

下面这次提交后,竟然改名了。
https://github.com/SeleniumHQ/selenium/commit/ba04acdf9ea3e53c483cc38a1ae796496e5da9c1

完整的代码示例如下:

from selenium import webdriverfrom selenium.webdriver.chrome.service import Service as ChromeServicefrom subprocess import CREATE_NO_WINDOWchrome_options = webdriver.ChromeOptions()chrome_options.binary_location = r'D:\Test\bin\chrome.exe'chrome_service = ChromeService(r'D:\Test\bin\chromedriver.exe')chrome_service.creation_flags = CREATE_NO_WINDOWdriver = webdriver.Chrome(service=chrome_service, options=chrome_options,executable_path=r'D:\Test\bin\chromedriver.exe')driver.get('http://google.com')

参看:
selenium - hide chromeDriver console in python - Stack Overflow

注意,上面的目录要用绝对目录,避免使用的版本冲突,否则很容易出现下面错误:

selenium.common.exceptions.WebDriverException:
Message: unknown error: cannot connect to chrome at 127.0.0.1:62561
from session not created:

This version of ChromeDriver only supports Chrome version 114
Current browser version is 112.0.5615.132

可以用下面函数获得当前执行目录 + 相对目录:

def get_path(relative_path):base_path = os.path.abspath(".")return os.path.join(base_path, relative_path)

确保传递的路径是固定路径,避免版本冲突问题。


http://www.ppmy.cn/news/239767.html

相关文章

用python实现ai围棋_围棋AI.Leela+Python脚本分析棋谱

完成了Sabaki+LeelaSabaki+Leela GTP搭建完美围棋AI平台后,在“飞扬围棋论坛”看到有棋友介绍用Leela+Python脚本分析棋谱,于是也试了一下。 软件下载和安装 leela-analysis的Github页面 将下载得到的“master.zip”文件解压缩到之前下载安装的Leela0110GTP文件夹下。如下图。…

开源的围棋软件

AlphaGo 和李世石的大战很吸引眼球,除了AlphaGo,是否有其他的围棋软件,特别是开源的, 可以看看算法是如何实现的。 找了一下,发现下面一下软件 gnugo。 Go 是英语围棋的意思,源自日语的 ご (发音go)。 …

c语言围棋报告,C++围棋程序实现报告.doc

TCP-IP协议与网络编程课程设计 - PAGE 20 - 一、软件背景介绍 围棋是一项广有裨益的智力竞技运动,它集休闲娱乐、陶冶性情、修心养性于一身,是中华文化的瑰宝,是人类智慧的最高象征之一。围棋经历了数千年,久盛不衰,且…

c语言编程围棋,用C语言编程 在屏幕上显示围棋棋盘

匿名用户 1级 2011-06-06 回答 -- 以怎么不用 MS VC++6 ?? 编C语言一般都用啊 还有\xCD是C语言 Ascii代码 表示一个图形 用循环语句啊! 等我一下 晚上写出来 贴上哦 晚上10:00 上完课回来 呵呵 分给不给 随便 你的问题让我熟练了许多 分不重要了 我终于写出来了 调试了…

蒙特卡洛与围棋

今天看到头条上有位网友提出了一个蒙特卡洛和围棋的问题,以为大佬的回答我觉得很有意思,特摘抄与此。 蒙特卡洛算法是20世纪十大最伟大的算法,阿法狗就采用了蒙特卡洛算法。蒙特卡洛树不是一种算法,蒙特卡洛才是一种算法。 先来…

用python实现围棋(动图演示+源码分享)

大家好,我是梦执,对梦执着。希望能和大家共同进步! 今天给大家带来一期围棋的源码分享。下面我们先看看效果。游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法。 目录-文末领取所有文件 1.导入模块2.初始化棋盘3. 开…

c语言围棋对弈程序设计,C语言围棋对弈程序设计.doc

C语言围棋对弈程序设计 用C语言编写一个围棋对弈棋室的程序,模仿两人对弈的过程,其中包括自动提子功能,和自动点目功能。 1、围棋的一些基本常识: (1)围棋棋子的“气” 见右图1所示黑棋1有4“气”,分别是水平方向上的左右 各有一气,垂直方向上的上下各有一气,对角上的不…

java 围棋代码_java围棋源代码

基于 WWW 的围棋棋谱演示软件的设计 丁振凡 【期刊名称】《微型机与应用》 【年(卷),期】2000(019)008 【摘要】介绍采用 Java 结合 ASP 编程实现的围棋棋谱...... 2.2 JAVA 工具 JDK (1) Java 编译器 Java 编译器将 Java 源代码文件编译成可执行的 Java 字节码。Java 源代 码文…