如何通过 Selenium 和 Python 为 GeckoDriver 配置日志级别和日志位置?

How to configure GeckoDriver with log level and log location through Selenium and Python?

我是python的新手,我写了一个程序来帮我收集信息(python+selenium+geckodriver+firefox),一切正常,但是geckodriver.exe也生成了日志很多,有时geckodriver.log的单个文件大小甚至达到8GB。

我搜索了 galaxy、google 和 Whosebug,我找不到禁用 geckodriver.log、 的解决方案,我知道使用一些参数可以减少 log

geckodriver.exe --log fatal

而且我知道 python 可以分配 geckodriver

的路径
driver=webdriver.Firefox(executable_path='C:\geckodriver.exe')

是否可以将它们组合在一起?如下所示:

driver=webdriver.Firefox(executable_path='C:\geckodriver.exe --log fatal')

我尝试了但失败了,有人可以帮助我吗?谢谢!

在使用 Selenium v​​3.14.0 Python Client减少 GeckoDriver 生成的日志并将日志重定向到特定的日志文件您可以使用以下解决方案:

  • 使用service_log_path:

    driver = webdriver.Firefox(firefox_options=options, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe', service_log_path='./Logs/geckodriver_service_log_path.log')
    
  • 使用log_path:

    driver = webdriver.Firefox(firefox_options=options, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe', log_path='./Logs/geckodriver_log_path.log')
    
  • 要配置日志级别并合并日志路径,您可以使用以下解决方案:

    from selenium import webdriver
    from selenium.webdriver.firefox.options import Options
    from selenium.webdriver.firefox.options import Log
    
    log = Log()
    log.level = "TRACE"
    options = Options()
    options.add_argument(log.level)
    driver = webdriver.Firefox(firefox_options=options, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe', service_log_path='./Logs/geckodriver_service_log_path.log')
    # driver = webdriver.Firefox(firefox_options=options, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe', log_path='./Logs/geckodriver_log_path.log')
    driver.get('http://google.com/')
    print(driver.title)
    driver.quit()
    

如果您参考 Firefox 选项对象文档,您可以看到日志是此对象的 属性

https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions

因此您可以将其添加为

options = webdriver.FirefoxOptions()

options.log.level = "TRACE"

driver = webdriver.Firefox(options=options)

您也可以将其设置为:

options.set_capability("moz:firefoxOptions", {'log': {'level': 'TRACE'}})
driver = webdriver.Firefox(options=options)

您可以使用上面的答案记录到特定路径,否则日志将在您的 gekodriver 所在的同一目录中创建为 gekodriver.log

我认为将 service_log_path='' 设置为空会关闭日志。我可能是错的,但我似乎没有日志文件,这就是我使用的设置。不管怎样,我已经厌倦了打字...

browser = webdriver.Firefox(service_log_path='')

(我使用该设置是因为每次我尝试指定 PATH 时都会出错。)所以我进入了文件夹...

C:\Users\current-user\AppData\Roaming\Python\Python37\site-packages\selenium\webdriver\firefox

然后我找到了文件 service.py 并在第 25-26 行从...

中删除了 geckodriver.log
    def __init__(self, executable_path, port=0, service_args=None,
             log_path="geckodriver.log", env=None):

这并没有解决我的问题,所以我进入了第 53 行同一文件夹中的文件 webdriver.py,并从...

中删除了 geckodriver.log
service_log_path="geckodriver.log", firefox_options=None,

然后 bam 现在我不必再将 service_log_path 设置为空。但是,也许如果您将日志路径设置为 service_log_path="" 它会解决您的问题。不确定这是否正是您要找的,但它解决了我的问题。我似乎根本没有日志文件,更不用说 8GB 大小的了。