Python: How to hide output Chrome messages in Selenium?
Asked Answered
T

5

8

What I want to do:

I want to open Chrome browser using Selenium ChromeDriver without the Chrome messages getting output to the console.

What I did:

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

Output:

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

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

I want to hide the output message "DevTools listening on..."

What I tried to solve this:

Using contextlib

from selenium import webdriver
import contextlib

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

Using 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')

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

But still the message is getting displayed. How do I hide the output message "DevTools listening on..." in Python?

Tempting answered 19/11, 2018 at 10:21 Comment(3)
Check this discussion #52246104Stagger
I already checked that answer. That answer did not solve this issue. So, I try to solve it in a different way.Tempting
i use selenium as an automaton. I need to get rid of all those pesky messages too.Unpriced
D
14

Add this option to your driver and your problem will be solved:

options = webdriver.ChromeOptions()<br>
options.add_experimental_option('excludeSwitches', ['enable-logging'])
Dynah answered 21/1, 2021 at 10:17 Comment(1)
@Pavan Kumar there shoudn't be <br> I guess in the first line of codeGlasscock
S
7

similar question in DevTools listening on ws://127.0.0.1:57671/devtools/browser/8a586f7c-5f2c-4d10-8174-7a7bf50e49b5 with Selenium and Python.

the answer is:

base on Chanticleer in hide chromeDriver console in python

Locate and edit this file as follows: located at Lib\site-packages\selenium\webdriver\common\services.py in your Python folder.

Edit the Start() function by adding the creation flags this way: 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

Works Perfectly for me (python3.7, selenium 3.141.0)

please give me credit to spending hours for searching the answer.

Sylph answered 25/3, 2019 at 12:37 Comment(8)
If you find a question with a similar answer, the proper procedure is to leave a comment. You will need to earn a bit of reputation before you can do that, though. Please refrain from posting duplicate answers in the meantime.Electrothermics
For me Full path is C:\Users\u1\AppData\Local\Programs\Python\Python37\Lib\site-packages\selenium\webdriver\common\service.pyTempting
It is service.py not services.py for meTempting
I did as you answered. But I see this error from win32process import CREATE_NO_WINDOW ModuleNotFoundError: No module named 'win32process'Tempting
pip install win32process Gives me this error Collecting win32process Could not find a version that satisfies the requirement win32process (from versions: ) No matching distribution found for win32processTempting
Here is how to overcome the above issue with win32process https://mcmap.net/q/522971/-python-3-6-install-win32apiTempting
when import win32process error, means, you don't have the module. you must install it first before you can import it. just follow the link that given by @Dipankar NaluiSylph
Solutions: Hope this will help you all: Path: Lib\site-packages\selenium\webdriver\common\service.py (Not services.py, its service.py) To fix import error, use the following: from subprocess import CREATE_NO_WINDOW (This will not work with Python 3.6 or older) For older python, use CREATE_NO_WINDOW= 0x8000000 (For python 3.6 or older)Rolland
L
4

Those are chrome messages, so you need to set the options for the Chrome-Log Level to hide those messages, setting the log-level to --log-level=3 should be enough (only fatal log messages.

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

Also out of curiosity, might I ask why?

Livesay answered 19/11, 2018 at 10:23 Comment(5)
I already used this code. That message is still displayed. This does not solve my problem.Tempting
I googled and found this same solution earlier. Many people suggested this solution in stackoverflow. But this did not solve my problem. So, I wanted to solve it in a different way.Tempting
Thought that would help. btw I'd put the fact that you found a "solution" that worked for somebody else and that it did not work for you in the question with a link.Livesay
this does not hide the message, neither does loglevel 0, 1 ,2 , 3 or 4Unpriced
@Dipankar you're right in that it doesn't hide "DevTools listening on ws://..." message but it still hides some other logs.Glasscock
G
-1

There is a way to modify the library selenium to solve this problem.

you can search directly with the next route, for modify the lines the that subprocess, this close the message that apper in the console.

you go to main folder In the route /venv/selenium/webdriver/common/service.py you modify the next lines, please you write this.

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

with this piece of code you will get the solution.

Glyptograph answered 26/4, 2022 at 13:21 Comment(2)
As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.Trainor
It might be written badly, but this is the only answer I've found that actually solves the problem. Go to venv\Lib\site-packages\selenium\webdriver\common\service.py and under the "_start_process" function search for the only subprocess.Popen... statement and change the "creationflags=self.creation_flags" for "creationflags=0x08000000".Increate
T
-1

passing --show-capture=no does the job

Transcendentalism answered 29/12, 2022 at 22:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.