问题描述
我正在尝试使用python创建后台网络抓取工具。我已经设法为其编写代码,然后使用pythonw.exe应用程序在没有任何控制台窗口的情况下执行它。另外,我以无头模式运行ChromeDriver。
问题是,它仍会为ChromeDriver生成一个控制台窗口,其中显示std::min
如何摆脱这个窗口?
解决方法
即使您将脚本设置为.pyw
,在创建新进程chromedriver.exe
时,也会为此显示一个控制台窗口。在 C#中可以打开选项CREATE_NO_WINDOW
,但是在 Selenium 的 Python 绑定中还没有。我打算叉硒并自己添加此功能。
目前的解决方案(仅适用于Windows):编辑硒库
转到此文件夹:C:\Users\name\AppData\Local\Programs\Python\Python38-32\Lib\site-packages\selenium\webdriver\common\
(直到 Python38-32 的路径取决于您安装的python)。
将有一个名为service.py
的文件,您需要按以下步骤进行编辑:
- 在顶部
from subprocess import STDOUT,CREATE_NO_WINDOW
处添加导入语句
- 现在(也许在第72至76行中),您必须在函数
creationflags=CREATE_NO_WINDOW
中添加另一个选项subprocess.Popen()
。为了清楚起见,请参见以下代码的前后版本:
编辑前:
self.process = subprocess.Popen(cmd,env=self.env,close_fds=platform.system() != 'Windows',stdout=self.log_file,stderr=self.log_file,stdin=PIPE)
编辑后:
self.process = subprocess.Popen(cmd,stdin=PIPE
creationflags=CREATE_NO_WINDOW) # Here !
注意:
复制旧的service.py
文件,以便将来需要时将其替换。
我修改了硒库,并摆脱了这个窗口。
就我而言,这是修改后的文件路径:
C:\ Python37-32 \ Lib \ site-packages \ selenium \ webdriver \ common \ service.py