You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保存他人网站的console.log信息并解决对象显示[object Object]问题

解决方案

方案1:替换页面console原生方法(通过Tampermonkey脚本实现,无需修改原有Chrome启动逻辑)

  • 给目标站点注入Tampermonkey脚本,在页面加载前重写console系列方法,把所有参数提前序列化为JSON字符串后再输出,脚本示例如下:
// ==UserScript==
// @name         控制台对象序列化输出
// @match        *://你需要采集日志的站点域名/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

const originalConsole = {...console};
['log', 'info', 'warn', 'error', 'debug'].forEach(method => {
    console[method] = (...args) => {
        const serializedArgs = args.map(arg => {
            if (typeof arg === 'object' && arg !== null) {
                try {
                    // 支持序列化普通对象,可根据需求调整缩进参数
                    return JSON.stringify(arg, null, 2);
                } catch (e) {
                    return `[不可序列化对象: ${e.message}]`;
                }
            }
            return arg;
        });
        originalConsole[method].apply(console, serializedArgs);
    };
});
  • 启动Chrome时仍保留--enable-logging --v=1参数,此时输出到本地日志的对象就会是格式化后的JSON字符串,不会再显示[object Object]。

方案2:使用Chrome DevTools协议自主采集日志(适合自动化批量采集场景)

  • 启动Chrome时追加远程调试参数:chrome.exe --enable-logging --v=1 --remote-debugging-port=9222
  • 编写自定义脚本连接9222调试端口,订阅Runtime.consoleAPICalled事件,收到事件后直接把所有参数序列化存入本地文件,示例Node.js核心代码如下:
const CDP = require('chrome-remote-interface');
const fs = require('fs');

async function collectConsoleLogs() {
    const client = await CDP({port: 9222});
    const {Runtime} = client;
    await Runtime.enable();
    // 监听控制台输出事件
    Runtime.consoleAPICalled(({type, args, timestamp}) => {
        const logItem = {
            logType: type,
            time: new Date(timestamp).toISOString(),
            content: args.map(arg => arg.value ?? arg.description ?? JSON.stringify(arg))
        };
        // 追加写入本地日志文件
        fs.appendFileSync('./custom-console.log', JSON.stringify(logItem) + '\n');
    });
}
collectConsoleLogs();
  • 该方案不需要修改页面内容,能完整捕获所有控制台输出的对象结构,兼容性更稳定。

方案3:提升Chrome控制台模块日志等级(轻量临时方案)

  • 启动Chrome时追加参数--vmodule=*console*=3,提升控制台相关模块的日志输出等级,部分版本的Chrome会在verbose级别3以上的日志中输出对象的结构化内容,该方案不需要额外开发,但不同Chrome版本表现差异较大,兼容性不稳定。

注意:如果需要序列化包含循环引用的对象,需要在JSON.stringify的replacer函数中增加循环引用处理逻辑,避免序列化失败。

内容的提问来源于stack exchange,提问作者No Name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:45:03