Python 如何隐藏Chromedriver控制台窗口?
我有一个简单的Python脚本,它使用selenium和webdriver在Chrome窗口中打开Facebook并自动登录。 当我运行它时,Chromedriver控制台窗口会打开,并且即使在整个程序完成执行之后也会保持打开状态,直到我自己关闭它 有没有办法隐藏这个控制台窗口?我已经尝试为我的脚本保留一个“.pyw”扩展名,但这没有帮助,因为我希望隐藏的不是脚本的控制台窗口,而是Chromedriver子进程的控制台窗口 我找不到这方面的任何资源。我想我可能需要修改ChromeWebDriver的源代码,但我不知道如何修改。这是我的代码:Python 如何隐藏Chromedriver控制台窗口?,python,google-chrome,selenium,selenium-webdriver,console,Python,Google Chrome,Selenium,Selenium Webdriver,Console,我有一个简单的Python脚本,它使用selenium和webdriver在Chrome窗口中打开Facebook并自动登录。 当我运行它时,Chromedriver控制台窗口会打开,并且即使在整个程序完成执行之后也会保持打开状态,直到我自己关闭它 有没有办法隐藏这个控制台窗口?我已经尝试为我的脚本保留一个“.pyw”扩展名,但这没有帮助,因为我希望隐藏的不是脚本的控制台窗口,而是Chromedriver子进程的控制台窗口 我找不到这方面的任何资源。我想我可能需要修改ChromeWebDrive
from selenium import webdriver
import sys
driver = webdriver.Chrome("C:\Python27\Scripts\chromedriver.exe")
driver.get("https://www.facebook.com")
email = driver.find_element_by_id("email")
passwd = driver.find_element_by_id("pass")
email.clear()
passwd.clear()
email.send_keys("example@example.com")
passwd.send_keys("examplepassword")
passwd.submit()
您需要在脚本末尾调用:
quit()
关闭浏览器并关闭ChromeDriver可执行文件
在启动ChromeDriver时启动
如果您只想关闭服务可执行文件并让浏览器保持打开状态,请调用:
driver.service.stop()
仅供参考,我已经从quit()
方法实现()中了解到了这一点。您需要在脚本末尾调用:
quit()
关闭浏览器并关闭ChromeDriver可执行文件
在启动ChromeDriver时启动
如果您只想关闭服务可执行文件并让浏览器保持打开状态,请调用:
driver.service.stop()
仅供参考,我已经通过
quit()
方法实现()解决了这个问题。我也遇到了同样的问题,但当我运行driver.service.stop()
时,它会关闭Chrome。我通过导入操作系统并向chrome进程启动任务终止来解决这个问题
这是另一个选项:首先将脚本扩展名从.py
更改为.pyw
,然后:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os
driver = webdriver.Chrome(executable_path='C:/apps/chromedriver.exe', service_args=["--verbose", '--log-path=c:/logs/logs/qc1.log'])
driver.get("https://example.com")
switch = driver.find_element_by_id("signInSbmtBtn")
password = driver.find_element_by_id("password")
username = driver.find_element_by_id("userid")
username.send_keys('user');
password.send_keys('password');
switch.click();
os.system("taskkill /im chromedriver.exe")
我也有同样的问题,但当我运行
driver.service.stop()
时,它会关闭Chrome。我通过导入操作系统并向chrome进程启动任务终止来解决这个问题
这是另一个选项:首先将脚本扩展名从.py
更改为.pyw
,然后:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os
driver = webdriver.Chrome(executable_path='C:/apps/chromedriver.exe', service_args=["--verbose", '--log-path=c:/logs/logs/qc1.log'])
driver.get("https://example.com")
switch = driver.find_element_by_id("signInSbmtBtn")
password = driver.find_element_by_id("password")
username = driver.find_element_by_id("userid")
username.send_keys('user');
password.send_keys('password');
switch.click();
os.system("taskkill /im chromedriver.exe")
要隐藏webdriver控制台窗口,我必须编辑Lib\site packages\selenium\webdriver\common\services.py,但我使用的是PhantomJS。PhantomJS导入并使用此文件启动其进程。基本上,我在Start方法中添加了以下创建标志:
def start(self):
"""
Starts the Service.
:Exceptions:
- WebDriverException : Raised either when it can't start the service
or when it can't connect to the service
"""
try:
cmd = [self.path]
cmd.extend(self.command_line_args())
self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
stdout=self.log_file, stderr=self.log_file, creationflags=CREATE_NO_WINDOW)
except TypeError:
raise` in bold.
还可以从Win32 Process import CREATE_NO_窗口将此行添加到导入中
这也适用于Chrome webdriver,因为它的service.py也导入了相同的文件,尽管我没有时间尝试。要隐藏webdriver控制台窗口,我必须编辑Lib\site packages\selenium\webdriver\common\services.py,但我使用的是PhantomJS。PhantomJS导入并使用此文件启动其进程。基本上,我在Start方法中添加了以下创建标志:
def start(self):
"""
Starts the Service.
:Exceptions:
- WebDriverException : Raised either when it can't start the service
or when it can't connect to the service
"""
try:
cmd = [self.path]
cmd.extend(self.command_line_args())
self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
stdout=self.log_file, stderr=self.log_file, creationflags=CREATE_NO_WINDOW)
except TypeError:
raise` in bold.
还可以从Win32 Process import CREATE_NO_窗口将此行添加到导入中
这也适用于Chrome webdriver,因为它的service.py也导入了这个完全相同的文件,尽管我还没有时间尝试;它也会关闭浏览器!:/@AkshayDamle hm,你想让浏览器保持打开状态,但关闭chrome驱动程序可执行服务?是的,这就是我想要实现的,这是可行的!但是现在,如果我以后想再次使用Chromedriver(如果我正在编写一个动态程序),我必须再次创建一个webdriver,使用它,然后退出它。因此控制台窗口将弹出打开和关闭。但我不想这样,我只想隐藏控制台,而不是完全停止服务。我该如何做到这一点呢?@AkshayDamle我明白了,那么我想将
startupinfo
传递给子流程。Popen
(as)应该可以解决这个问题。但是,由于服务启动隐藏在中,您需要对其进行修补;它也会关闭浏览器!:/@AkshayDamle hm,你想让浏览器保持打开状态,但关闭chrome驱动程序可执行服务?是的,这就是我想要实现的,这是可行的!但是现在,如果我以后想再次使用Chromedriver(如果我正在编写一个动态程序),我必须再次创建一个webdriver,使用它,然后退出它。因此控制台窗口将弹出打开和关闭。但我不想这样,我只想隐藏控制台,而不是完全停止服务。我该如何做到这一点呢?@AkshayDamle我明白了,那么我想将startupinfo
传递给子流程。Popen
(as)应该可以解决这个问题。但是,既然这家服务公司隐藏在网络中,你就需要对它进行修补。老兄,你救了很多人的命。在2018年就像一个魔咒。这个奇怪的控制台是一场噩梦。老兄,你拯救了生命。在2018年,它就像一个魔咒。这个奇怪的控制台简直是一场噩梦。