Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何隐藏Chromedriver控制台窗口?_Python_Google Chrome_Selenium_Selenium Webdriver_Console - Fatal编程技术网

Python 如何隐藏Chromedriver控制台窗口?

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

我有一个简单的Python脚本,它使用selenium和webdriver在Chrome窗口中打开Facebook并自动登录。 当我运行它时,Chromedriver控制台窗口会打开,并且即使在整个程序完成执行之后也会保持打开状态,直到我自己关闭它

有没有办法隐藏这个控制台窗口?我已经尝试为我的脚本保留一个“.pyw”扩展名,但这没有帮助,因为我希望隐藏的不是脚本的控制台窗口,而是Chromedriver子进程的控制台窗口

我找不到这方面的任何资源。我想我可能需要修改ChromeWebDriver的源代码,但我不知道如何修改。这是我的代码:

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年,它就像一个魔咒。这个奇怪的控制台简直是一场噩梦。