【问题标题】:Python: How to hide output Chrome messages in Selenium?Python:如何在 Selenium 中隐藏输出的 Chrome 消息?
【发布时间】:2019-04-21 16:31:00
【问题描述】:

我想做什么:

我想使用 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')

使用 log-level=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正在监听...”?

【问题讨论】:

  • 我已经检查了那个答案。这个答案并没有解决这个问题。所以,我尝试用不同的方式解决它。
  • 我使用 selenium 作为自动机。我也需要摆脱所有那些讨厌的消息。

标签: python python-3.x selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

这些是 chrome 消息,因此您需要设置 Chrome 日志级别的选项以隐藏这些消息,将日志级别设置为 --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)

同样出于好奇,请问为什么?

【讨论】:

  • 我已经用过这段代码了。该消息仍然显示。这并不能解决我的问题。
  • 我之前用谷歌搜索并找到了相同的解决方案。许多人在stackoverflow中提出了这个解决方案。但这并没有解决我的问题。所以,我想以不同的方式解决它。
  • 认为这会有所帮助。顺便说一句,我认为你找到了一个对其他人有用的“解决方案”,但它对你没有用,并附有链接。
  • 这不会隐藏消息,loglevel 0, 1 ,2 , 3 or 4 也不会隐藏消息
【解决方案2】:

DevTools listening on ws://127.0.0.1:57671/devtools/browser/8a586f7c-5f2c-4d10-8174-7a7bf50e49b5 with Selenium and Python 中的类似问题。

答案是:

基于 Chanticleer 在 python 中隐藏 chromeDriver 控制台

按如下方式找到并编辑此文件:位于 Python 文件夹中的 Lib\site-packages\selenium\webdriver\common\services.py。

通过以下方式添加创建标志来编辑 Start() 函数:creationflags=CREATE_NO_WINDOW

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)

请感谢我花费数小时搜索答案。

【讨论】:

  • 如果您发现有类似答案的问题,正确的程序是发表评论。不过,您需要先获得一些声誉才能做到这一点。在此期间,请不要发布重复的答案。
  • 对我来说完整路径是 C:\Users\u1\AppData\Local\Programs\Python\Python37\Lib\site-packages\selenium\webdriver\common\service.py
  • 对我来说是 service.py 而不是 services.py
  • 我按照你的回答做了。但我看到这个错误from win32process import CREATE_NO_WINDOW ModuleNotFoundError: No module named 'win32process'
  • pip install win32process 给我这个错误Collecting win32process Could not find a version that satisfies the requirement win32process (from versions: ) No matching distribution found for win32process
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2013-10-05
    相关资源
    最近更新 更多