如何在后台使用 selenium chromedriver 运行 python 脚本 (Windows)?
How to run a python script using selenium chromedriver in background (Windows)?
我正在尝试在 python 中制作后台网络爬虫。我设法为它编写代码,然后我使用 pythonw.exe 应用程序在没有任何控制台 window 的情况下执行它。另外,我 运行 ChromeDriver 处于无头模式。
问题是,它仍然为 ChromeDriver 生成一个控制台 window,上面写着 $ DevTools listening on ...some address.
我怎样才能摆脱这个 window?
即使您将脚本设为 .pyw
,当创建新进程 chromedriver.exe
时,也会出现一个控制台 window。 C#中有开启选项CREATE_NO_WINDOW
的选项,但是Python绑定中还没有硒。我正打算分叉 selenium 并自己添加此功能。
目前的解决方案(仅适用于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 行),您必须在函数
subprocess.Popen()
中添加另一个选项 creationflags=CREATE_NO_WINDOW
。为了清楚起见,请查看以下代码的前后版本:
编辑前:
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, env=self.env,
close_fds=platform.system() != 'Windows',
stdout=self.log_file,
stderr=self.log_file,
stdin=PIPE
creationflags=CREATE_NO_WINDOW) # Here !
注:
复制旧 service.py
文件,以便将来需要时将其替换回来。
我修改了 selenium 库并且能够摆脱这个 window。
在我的例子中,这是修改后的文件路径:
C:\Python37-32\Lib\site-packages\selenium\webdriver\common\service.py
请参阅modified section
我正在尝试在 python 中制作后台网络爬虫。我设法为它编写代码,然后我使用 pythonw.exe 应用程序在没有任何控制台 window 的情况下执行它。另外,我 运行 ChromeDriver 处于无头模式。
问题是,它仍然为 ChromeDriver 生成一个控制台 window,上面写着 $ DevTools listening on ...some address.
我怎样才能摆脱这个 window?
即使您将脚本设为 .pyw
,当创建新进程 chromedriver.exe
时,也会出现一个控制台 window。 C#中有开启选项CREATE_NO_WINDOW
的选项,但是Python绑定中还没有硒。我正打算分叉 selenium 并自己添加此功能。
目前的解决方案(仅适用于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 行),您必须在函数
subprocess.Popen()
中添加另一个选项creationflags=CREATE_NO_WINDOW
。为了清楚起见,请查看以下代码的前后版本:
编辑前:
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, env=self.env,
close_fds=platform.system() != 'Windows',
stdout=self.log_file,
stderr=self.log_file,
stdin=PIPE
creationflags=CREATE_NO_WINDOW) # Here !
注:
复制旧 service.py
文件,以便将来需要时将其替换回来。
我修改了 selenium 库并且能够摆脱这个 window。
在我的例子中,这是修改后的文件路径:
C:\Python37-32\Lib\site-packages\selenium\webdriver\common\service.py
请参阅modified section