首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Selenium Python绑定从Chrome获取console.log输出

使用Selenium Python绑定从Chrome获取console.log输出
EN

Stack Overflow用户
提问于 2014-01-03 15:34:25
回答 4查看 96.7K关注 0票数 82

我正在使用Selenium通过Python绑定在Chrome中运行测试,并且我很难找到如何配置Chrome,使加载的测试中的console.log输出可用。我看到了在get_log()对象上有WebDriver和log_types()方法,我看到了Get chrome's console log,它展示了如何在WebDriver中进行操作。但是,在Python中,我没有看到类似于LoggingPreferences类型的东西。有什么办法能满足我的需要吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-03 18:49:10

好吧,终于弄明白了:

代码语言:javascript
运行
复制
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

# enable browser logging
d = DesiredCapabilities.CHROME
d['loggingPrefs'] = { 'browser':'ALL' }
driver = webdriver.Chrome(desired_capabilities=d)

# load the desired webpage
driver.get('http://foo.com')

# print messages
for entry in driver.get_log('browser'):
    print(entry)

source字段等于'console-api'的条目对应于控制台消息,消息本身存储在message字段中。

从chromedriver 75.0.3770.8开始,您必须使用goog:loggingPrefs而不是loggingPrefs:

代码语言:javascript
运行
复制
d['goog:loggingPrefs'] = { 'browser':'ALL' }
票数 138
EN

Stack Overflow用户

发布于 2019-06-25 11:26:32

要完成答案:从chromeDriver75.0.3770.8开始,您必须使用goog:loggingPrefs而不是loggingPrefs

参见Chromedriver:http://chromedriver.chromium.org/downloads或此bug:https://bugs.chromium.org/p/chromedriver/issues/detail?id=2976

票数 16
EN

Stack Overflow用户

发布于 2020-08-28 00:52:42

如果您正在使用python日志模块(而且应该是).下面是一种将selenium浏览器日志添加到python日志记录系统的方法。

get_browser_log_entries()函数从eth提供的驱动程序获取日志,并将它们以chrome的形式发送到python模块。(即chrome.console-api,chrome.network等)使用浏览器的时间戳。(如果在调用get_log之前出现延迟)

它可能需要一些更好的异常处理(例如,如果没有打开日志记录)等等。但它大部分时间都起作用。

代码语言:javascript
运行
复制
import logging

from selenium import webdriver

def get_browser_log_entries(driver):
    """get log entreies from selenium and add to python logger before returning"""
    loglevels = { 'NOTSET':0 , 'DEBUG':10 ,'INFO': 20 , 'WARNING':30, 'ERROR':40, 'SEVERE':40, 'CRITICAL':50}

    #initialise a logger
    browserlog = logging.getLogger("chrome")
    #get browser logs
    slurped_logs = driver.get_log('browser')
    for entry in slurped_logs:
        #convert broswer log to python log format
        rec = browserlog.makeRecord("%s.%s"%(browserlog.name,entry['source']),loglevels.get(entry['level']),'.',0,entry['message'],None,None)
        rec.created = entry['timestamp'] /1000 # log using original timestamp.. us -> ms
        try:
            #add browser log to python log
            browserlog.handle(rec)
        except:
            print(entry)
    #and return logs incase you want them
    return slurped_logs

def demo():
    caps = webdriver.DesiredCapabilities.CHROME.copy()
    caps['goog:loggingPrefs'] = { 'browser':'ALL' }
    driver = webdriver.Chrome(desired_capabilities=caps )

    driver.get("http://localhost")

    consolemsgs = get_browser_log_entries(driver)

if __name__ == "__main__":
    logging.basicConfig(level=logging.DEBUG, format='%(asctime)s:%(levelname)7s:%(message)s')
    logging.info("start")
    demo()
    logging.info("end")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20907180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档