添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何隐藏Chromedriver控制台窗口?

1 人关注

我有一个简单的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
Akshay Damle
Akshay Damle
发布于 2014-09-16
3 个回答
Chanticleer
Chanticleer
发布于 2015-09-10
已采纳
0 人赞同

为了隐藏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
        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 webdriver,因为它的service.py也导入了同样的文件,不过我还没有时间去尝试。

伙计,你拯救了生命。在2018年像一个魅力一样工作。这个该死的控制台是一个噩梦。
alecxe
alecxe
发布于 2015-09-10
0 人赞同

你需要打电话给 driver.quit() 在脚本的最后。

quit()

关闭浏览器,并关闭ChromeDriver的可执行程序。 在启动ChromeDriver时启动的

如果你想直接关闭服务可执行文件,让浏览器保持打开状态,请调用。

driver.service.stop()

顺便说一下,我已经从quit()的方法实现中弄明白了这一点(source code).

我试过了,它也关闭了浏览器!:/
@AkshayDamle 嗯,你想让浏览器继续打开,但关闭chrome驱动可执行服务?
是的,这就是我想实现的目标
谢谢,这很有效但现在如果我以后想再次使用Chromedriver怎么办[如果我在写一个动态程序],我将不得不再次创建一个webdriver,使用它,然后退出它。所以控制台窗口会突然打开和关闭。但我不希望这样,我只想隐藏控制台,而不是完全停止服务。我怎样才能做到这一点?
@AkshayDamle 我明白了,那么我想把 startupinfo 传给 subprocess.Popen (如 suggested here )应该可以解决这个问题。但是,由于服务启动是隐藏在 替换代码2】类的实现 你需要给它打上猴子补丁。
willRiker
willRiker
发布于 2015-09-10
0 人赞同

我也有同样的问题,但当我运行 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');