【问题标题】:How to hide Chromedriver console window?如何隐藏 Chromedriver 控制台窗口?
【发布时间】:2014-11-10 09:18:08
【问题描述】:

我有一个简单的 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()

【问题讨论】:

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


    【解决方案1】:

    要隐藏 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 也导入了这个相同的文件,尽管我没有时间尝试。

    【讨论】:

    • 哥们,你拯救了生命。 2018 年的工作就像一个魅力。这个该死的控制台是一场噩梦。
    【解决方案2】:

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

    quit()

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

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

    driver.service.stop()
    

    仅供参考,我从 quit() 方法实现 (source code) 中发现了这一点。

    【讨论】:

    • 试过了;它也会关闭浏览器! ://
    • @AkshayDamle hm,您希望浏览器保持打开状态但关闭 chrome 驱动程序可执行服务?
    • 是的,这就是我想要实现的目标
    • 谢谢,这行得通!但是现在如果我以后想再次使用 Chromedriver [如果我正在编写动态程序],我将不得不再次创建一个 webdriver,使用它,然后退出它。所以控制台窗口会弹出打开和关闭。但我不想要这个,我只想隐藏控制台而不是完全停止服务。我该如何做到这一点?
    • @AkshayDamle 我明白了,然后我想将startupinfo 传递给subprocess.Popen(如suggested here)应该可以解决问题。但是,由于服务启动隐藏在 Service class implementation 中,您需要对其进行猴子补丁。
    【解决方案3】:

    我遇到了同样的问题,但是当我运行 driver.service.stop() 时,它会关闭 Chrome。我通过导入 os 并向 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")
    

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 2019-07-22
      • 2012-10-14
      • 2012-10-14
      相关资源
      最近更新 更多