How do I suppress console/cmd error messages in python

10,798

Solution 1

Those logs are issued by Chrome. You can disable them by launching Chrome with the log level set to Fatal:

options = Options()
options.add_argument('--headless')
options.add_argument('--hide-scrollbars')
options.add_argument('--disable-gpu')
options.add_argument("--log-level=3")  # fatal
driver = webdriver.Chrome(chrome_options=options)

Though some messages are not filtered by this flag like DevTools listening on ....

To avoid them, you'll have to override the selenium.webdriver.common.service.Service and call subprocess.Popen with close_fds=True to avoid the inheritance of the file descriptor.

self.process = subprocess.Popen(cmd, env=self.env,
                                close_fds=True,
                                stdout=None,
                                stderr=None,
                                stdin=None)

Solution 2

Try this:-

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

Hope it helps.

Solution 3

I had a similar problem and the following was my sollution.

I was using the selenium module in a python script to open up chromedriver.exe and automate some online downloads. I run the script using a BAT file.

Originally if I ran the BAT file, chrome was opened up and the files where downloaded, but the command line hanged on the log statement DevTools listening on ...

The way I got around this was in the bat file I added the line

taskkill /im chromedriver.exe /f

So my BAT file looked like this

python python_script.py
taskkill /im chromedriver.exe /f

The log statement still appears but killing chromedriver.exe seems to end the run.

Share:
10,798
Admin
Author by

Admin

Updated on July 29, 2022

Comments

  • Admin
    Admin almost 2 years

    How do I suppress error messages in python for chromedriver and pyinstaller exe?

    I noticed that when I use chromedriver in pyinstaller and run it I get a list of error messages. I have been trying to remove them but no luck thus far. UPDATE: It seems the headless flag is causing a lot of grief.

    DevTools listening on ws://127.0.0.1:12386/devtools/browser/74743659-2c28-45fb-bab4-3836bb91f383
    [1213/214223.999:ERROR:service_manager.cc(157)] Connection InterfaceProviderSpec prevented service: content_renderer from binding interface: blink::mojom::ReportingServiceProxy exposed by: content_browser
    Improvement, now how to remove this in headless.
    Error messages:
    DevTools listening on ws://127.0.0.1:12386/devtools/browser/74743659-2c28-45fb-bab4-3836bb91f383
    [1213/214223.999:ERROR:service_manager.cc(157)] Connection InterfaceProviderSpec prevented service: content_renderer from binding interface: blink::mojom::ReportingServiceProxy exposed by: content_browser
    [1213/214223.999:INFO:CONSOLE(4)] "Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.", source: http://centrebet.com/Scripts/jquery-1.6.4.min.js (4)
    [1213/214226.896:INFO:CONSOLE(42)] "Uncaught ReferenceError: $ is not defined", source: http://centrebet.com/Sports/8320572 (42)
    [1213/214226.899:INFO:CONSOLE(60)] "Uncaught ReferenceError: bs_auto_expand is not defined", source: http://centrebet.com/Sports/8320572 (60)
    [1213/214226.900:INFO:CONSOLE(65)] "Uncaught ReferenceError: gaPush is not defined", source: http://centrebet.com/Sports/8320572 (65)
    [1213/214227.987:INFO:CONSOLE(112)] "Uncaught ReferenceError: $ is not defined", source: http://centrebet.com/Sports/71973868 (112)
    [1213/214227.988:INFO:CONSOLE(174)] "Uncaught ReferenceError: addStaticBubble is not defined", source: http://centrebet.com/Sports/71973868 (174)
    [1213/214227.989:INFO:CONSOLE(211)] "Uncaught ReferenceError: $ is not defined", source: http://centrebet.com/Sports/71973868 (211)
    [1213/214227.991:INFO:CONSOLE(431)] "Uncaught ReferenceError: addStaticBubble is not defined", source: http://centrebet.com/Sports/71973868 (431)
    [1213/214227.991:INFO:CONSOLE(468)] "Uncaught ReferenceError: $ is not defined", source: http://centrebet.com/Sports/71973868 (468)
    [1213/214227.998:INFO:CONSOLE(688)] "Uncaught ReferenceError: addStaticBubble is not defined", source: http://centrebet.com/Sports/71973868 (688)
    [1213/214227.998:INFO:CONSOLE(725)] "Uncaught ReferenceError: $ is not defined", source: http://centrebet.com/Sports/71973868 (725)
    [1213/214228.001:INFO:CONSOLE(945)] "Uncaught ReferenceError: addStaticBubble is not defined", source: http://centrebet.com/Sports/71973868 (945)
    [1213/214228.001:INFO:CONSOLE(982)] "Uncaught ReferenceError: $ is not defined", source: http://centrebet.com/Sports/71973868 (982)
    [1213/214228.002:INFO:CONSOLE(1202)] "Uncaught ReferenceError: addStaticBubble is not defined", source: http://centrebet.com/Sports/71973868 (1202)
    [1213/214228.003:INFO:CONSOLE(1239)] "Uncaught ReferenceError: $ is not defined", source: http://centrebet.com/Sports/71973868 (1239)
    [1213/214228.004:INFO:CONSOLE(1459)] "Uncaught ReferenceError: addStaticBubble is not defined", source: http://centrebet.com/Sports/71973868 (1459)
    [1213/214228.004:INFO:CONSOLE(1496)] "Uncaught ReferenceError: $ is not defined", source: http://centrebet.com/Sports/71973868 (1496)
    [1213/214228.005:INFO:CONSOLE(1716)] "Uncaught ReferenceError: addStaticBubble is not defined", source: http://centrebet.com/Sports/71973868 (1716)
    [1213/214228.005:INFO:CONSOLE(1753)] "Uncaught ReferenceError: $ is not defined", source: http://centrebet.com/Sports/71973868 (1753)
    [1213/214228.006:INFO:CONSOLE(1973)] "Uncaught ReferenceError: addStaticBubble is not defined", source: http://centrebet.com/Sports/71973868 (1973)
    

    Code:

    options = Options()
    options.add_argument('--headless')
    options.add_argument('--hide-scrollbars')
    options.add_argument('--disable-gpu')
    driver = webdriver.Chrome(chrome_options=options)
    
    
    url = "http://centrebet.com/"
    driver.get(url)
    
    def page_counter():
      for x in range(1000):
          yield x
    
    count = page_counter()
    driver.get(url)
    sports = driver.find_element_by_id("accordionMenu1_ulSports")
    links = [url + link.get_attribute("onclick").replace("menulink('", "").replace("')", "") for link in sports.find_elements_by_xpath('//ul[@id="accordionMenu1_ulSports"]//li//ul//li//ul//li//a[starts-with(@onclick, "menulink")]')]
    
    links = dict((next(count) + 1, e) for e in links)
    
    desc_links = collections.OrderedDict(sorted(links.items(), reverse=True))
    for key, value in desc_links.items():
        driver.get(value)
    

    What I have tried:

    logging.disable(logging.CRITICAL)
    
    logging.Logger.info = lambda *args, **kwargs: None
    
    sys.stderr = os.devnull
    
    logging.getLogger("requests").setLevel(logging.WARNING)
    
    @contextmanager
    def suppress_stdout():
    
        with open(os.devnull, "w") as devnull:
            old_stdout = sys.stdout
            sys.stdout = devnull
            try:
                yield
            finally:
                sys.stdout = old_stdout
    
    
    import warnings
    
    def fxn():
        warnings.warn("deprecated", DeprecationWarning)
    
    with warnings.catch_warnings():
        warnings.simplefilter("ignore")
        fxn()
    

    The error message appears to loop. Perhaps rewriting may fix...

  • Admin
    Admin over 6 years
    This tends to work well aside from DevTools listening on still persists for def methodA(self, arg1, arg2): self.process = subprocess.Popen
  • Admin
    Admin over 6 years
    Is there a way to disable DevTools listening on ws:// as well or is this ingrained into cmd?
  • Florent B.
    Florent B. over 6 years
    To override subprocess.Popen you'll have to update the source code of Selenium on your machine: PythonFolder\Lib\site-packages\selenium\webdriver\common\ser‌​vice.py. You can not override it in your script with def methodA(self, arg1, arg2): self.process = subprocess.Popen.
  • Admin
    Admin over 6 years
    Uh I see. Unfortunately this did not remove it for me. Devtools listening on remains
  • Admin
    Admin over 6 years
    There may not be way to disable. Lot of questions about disable ws but no answer: stackoverflow.com/questions/47417581/…
  • Florent B.
    Florent B. over 6 years
    @The Gman, you are right, I though I got ride of the DevTools listening on by tweaking subprocess.Popen, but I I was just running the wrong script. It seems that Chrome is bypassing the provided file descriptor with no way to avoid it.
  • PaulR
    PaulR about 6 years
    I filed an issue for this in Node.js, which does something similar: github.com/nodejs/node/issues/16515