如何抑制Selenium控制台输出?

7gcisfzg  于 2023-02-08  发布在  其他
关注(0)|答案(2)|浏览(382)

我有一个Python脚本,它可以选择不同的歌曲播放列表,并在YouTube上的浏览器中打开它。但是,每次运行它时,我都会在控制台中收到很多消息。我不希望出现这种情况。我如何防止这种情况?我希望仅防止Selenium消息(如果可能),但所有控制台消息都可以。
我试着补充一个论点:

options = webdriver.ChromeOptions()
options.add_argument("--log-level=OFF")

最初,我有这行代码-我不记得为什么需要它,但删除它似乎没有做什么:
options.add_experimental_option('excludeSwitches', ['enable-logging'])
我尝试使用这些参数调用驱动程序:
一米一米一x一米二米一x
这是我在控制台上看到的:

DevTools listening on ws://127.0.0.1:55146/devtools/browser/9ffb59e1-adc0-480e-835e-e36ffe7cb428

DevTools listening on ws://127.0.0.1:55156/devtools/browser/5b6b567e-6ae1-4cdd-8206-915e788e6fe0
[8812:12068:0207/132732.310:ERROR:device_event_log_impl.cc(215)] [13:27:32.309] USB: usb_service_win.cc:415 Could not read device interface GUIDs: The system cannot find the file specified. (0x2)
[8812:12068:0207/132732.310:ERROR:device_event_log_impl.cc(215)] [13:27:32.310] USB: usb_device_handle_win.cc:1046 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)
Traceback (most recent call last):
  File "c:\Users\EliBa\OneDrive\Documents\Coding Projects\Python\musico.py", line 14, in <module>
    driver.fullscreen_window()
  File "C:\Users\EliBa\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 596, in fullscreen_window        
    self.execute(Command.FULLSCREEN_WINDOW)
  File "C:\Users\EliBa\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in execute
    self.error_handler.check_response(response)
  File "C:\Users\EliBa\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response        
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
from unknown error: web view not found
  (Session info: chrome=109.0.5414.120)
Stacktrace:
Backtrace:
        (No symbol) [0x002B6643]
        (No symbol) [0x0024BE21]
        (No symbol) [0x0014DA9D]
        (No symbol) [0x0012EF6A]
        (No symbol) [0x001A3AAB]
        (No symbol) [0x001B61B6]
        (No symbol) [0x0019FB76]
        (No symbol) [0x001749C1]
        (No symbol) [0x00175E5D]
        GetHandleVerifier [0x0052A142+2497106]
        GetHandleVerifier [0x005585D3+2686691]
        GetHandleVerifier [0x0055BB9C+2700460]
        GetHandleVerifier [0x00363B10+635936]
        (No symbol) [0x00254A1F]
        (No symbol) [0x0025A418]
        (No symbol) [0x0025A505]
        (No symbol) [0x0026508B]
        BaseThreadInitThunk [0x76CC7D69+25]
        RtlInitializeExceptionChain [0x77E2BB9B+107]
        RtlClearBits [0x77E2BB1F+191]
        (No symbol) [0x00000000]

什么都没用,有什么建议吗?

dffbzjpn

dffbzjpn1#

创建无窗口

  • CREATE_NO_WINDOW * process creation flag指示进程作为控制台应用程序在没有控制台窗口的情况下运行。因此,未设置应用程序的控制台句柄。如果应用程序不是控制台应用程序,或者与 * CREATE_NEW_CONSOLE * 或 * DETACHED_PROCESS * 一起使用,则忽略此标志。

此用例

要完全抑制Selenium控制台输出,可以使用 * CREATE_NO_WINDOW * 进程创建标志,如下所示:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import subprocess
from subprocess import CREATE_NO_WINDOW

options = Options()
options.add_argument("start-maximized")
s = Service('C:\\BrowserDrivers\\chromedriver.exe')
s.creationflags = subprocess.CREATE_NO_WINDOW
driver = webdriver.Chrome(service=s, options=options)
driver.get('https://www.google.com/')

控制台快照:

byqmnocz

byqmnocz2#

根据您希望保留的日志记录级别,此操作分为两个部分。

from selenium.webdriver.chrome.service import Service as ChromeService # Similar thing for firefox also!
from subprocess import CREATE_NO_WINDOW

options = webdriver.ChromeOptions() 
options.add_argument("--log-level=3")

OR/AND

chrome_service = ChromeService()
chrome_service.creationflags = CREATE_NO_WINDOW

driver = webdriver.Chrome(options=options,  service=chrome_service)

设置为日志级别3的选项将只允许某些日志来自驱动程序。但是,如果您有chrome_service.creationflags = CREATE_NO_WINDOW,它将不会从驱动程序发送任何信息到python控制台,所以实际上您只需要chrome_service.creationflags = CREATE_NO_WINDOW,但这可能太多了,如果是这样的话,ID使用options.add_argument(“--log-level=3”),因为这将只允许很少消息通过,且它们通常都是相关的。
下面是我使用每个选项导航到同一个地方的图片&没有进行比较(忽略红色边框的框,它们是无关的):
选项。add_argument(“--对数级别=3”)x1c 0d1x
浏览器_服务.创建标志=创建_否_窗口

任一选项

你可以看到没有选项是如何抛出我的蓝牙适配器和证书的各种错误,但选择任何一个选项,输出是更多的控制。我的建议是使用日志级别3。

相关问题