Python:如何在Selenium中隐藏输出的Chrome消息?

r3i60tvu  于 2022-12-30  发布在  Python
关注(0)|答案(5)|浏览(130)

我想做的事:

我想使用Selenium ChromeDriver打开Chrome浏览器,而不将Chrome消息输出到控制台。

我所做的:

from selenium import webdriver
driver = webdriver.Chrome(r'C:\Users\u1\Documents\scripts\chromedriver.exe')

输出:

C:\Users\u1\Documents\scripts>python test.py

DevTools listening on ws://127.0.0.1:50605/devtools/browser/11c9063a-44ce-4b39-9566-9e6c6270025c

我想隐藏输出消息“DevTools正在侦听...”

我试图解决这个问题:

使用上下文库

from selenium import webdriver
import contextlib

with contextlib.redirect_stdout(None):
   driver = webdriver.Chrome(r'C:\Users\u1\Documents\scripts\chromedriver.exe')

使用devnull

from selenium import webdriver
import subprocess

devnull = subprocess.DEVNULL
subprocess.Popen(open_browser(), stdout=devnull, stderr=devnull)
def open_browser():
    driver = webdriver.Chrome(r'C:\Users\u1\Documents\scripts\chromedriver.exe')

使用对数水平=3

chrome_options = Options()
chrome_options.add_argument("--log-level=3")
driver = webdriver.Chrome(r'C:\Users\u1\Documents\scripts\chromedriver.exe', chrome_options=chrome_options)

但是消息还是显示出来了。我该如何在Python中隐藏输出消息“DevTools listening on ...”?

sc4hvdpw

sc4hvdpw1#

将此选项添加到您的驱动程序中,您的问题将得到解决:

options = webdriver.ChromeOptions()<br>
options.add_experimental_option('excludeSwitches', ['enable-logging'])
oalqel3c

oalqel3c2#

在使用Selenium和Python监听ws://www.example.com的DevTools中存在类似问题127.0.0.1:57671/devtools/browser/8a586f7c-5f2c-4d10-8174-7a7bf50e49b5。
答案是:
基于Chanticleer在Python中隐藏Chrome驱动程序控制台
按如下所示查找并编辑此文件:位于Python文件夹中的Lib\site-packages\selenium\webdriver\common\services.py。
通过以下方式添加创建标志来编辑Start()函数:创建标志=创建无窗口

from win32process import CREATE_NO_WINDOW

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

非常适合我(python3.7, selenium 3.141.0)
请给予我花了几个小时寻找答案。

dy1byipe

dy1byipe3#

这些都是chrome消息,所以您需要设置Chrome-Log Level的选项来隐藏这些消息,将日志级别设置为--log-level=3应该足够了(仅限致命日志消息)。

from selenium.webdriver.chrome.options import Options
[...]
chrome-options = Options()
chrome-options.add_argument("--log-level=3")
driver = webdriver.Chrome(chrome_options=chrome-options)

同样出于好奇,我能问问为什么吗?

zqdjd7g9

zqdjd7g94#

传递--show-capture=no就完成了这项工作

czq61nw1

czq61nw15#

有一种方法可以通过修改 selenium 库来解决这个问题。
您可以直接搜索下一条路线,修改该子进程的线路,这将关闭控制台中出现的消息。
你去主文件夹在路线/venv/selenium/webdriver/common/service.py你修改下一行,请你写这个.

cmd = [self.path]
cmd.extend(self.command_line_args())
self.process = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, 
                                stderr=PIPE, shell=False,
                               creationflags=0x08000000)

有了这段代码,你就能得到解答。

相关问题