如何隐藏Chromedriver控制台窗口?

时间:2014-09-16 14:48:14

标签: python google-chrome selenium selenium-webdriver console

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

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

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

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()

2 个答案:

答案 0 :(得分:2)

要隐藏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.

还要将此行添加到from win32process import CREATE_NO_WINDOW

这也适用于Chrome网络驱动程序,因为它的service.py也会导入这个相同的文件,但我没有时间尝试。

答案 1 :(得分:1)

您需要在脚本末尾调用driver.quit()

  

quit()

     

关闭浏览器并关闭ChromeDriver可执行文件   这是在启动ChromeDriver时启动的

如果您只想关闭服务可执行文件并让浏览器保持打开状态,请致电:

driver.service.stop()

仅供参考,我已经从quit()方法实施(source code)中找到了这一点。