为什么这个网站上的“console.log()”不起作用?

4

我可以打开Chrome DevTools的控制台,针对此URL:https://www.google.com/ 并输入以下命令将 "Hello world!" 打印到控制台:

console.log("Hello world!")

然而,当我尝试在此URL:https://svc.mt.gov/dor/property/prc 上使用相同的命令时,我的信息并未在控制台上打印。为什么会这样?

是否有任何方法可以强制使控制台在这个MT网站上工作?

我已经尝试使用python / selenium打开页面并使用execute_script()发出命令,但也没有起作用。


2
不是我的重复问题,但请参见Facebook如何禁用浏览器集成的开发人员工具?,因为它正在询问一个紧密相关的内容。 - cocomac
2个回答

5

如果你进行

console.dir(console.log)

并单击 [[FunctionLocation]],您将在网站源代码中看到以下内容:

"Debug" != e && (window.console.log = function() {}
    )

这似乎是一种廉价(但懒惰?)的生产环境日志抑制方法。

某种程度上修复它的方法是使用其它许多控制台命令之一。(例如console.dir或者console.error

如果你真的想要恢复原始的console.log,唯一的方法就是在页面代码运行之前运行代码,这样你就可以保存一个对该函数的引用。例如,使用用户脚本:

// <metadata block...>
// @grant none
// ==/UserScript==

const origConsoleLog = console.log;
// set original window.console.log back to its original
// after the page loads
setTimeout(() => {
  window.console.log = origConsoleLog;
}, 2000);

// there are more elegant but more complicated approaches too

请不要在评论中说“谢谢”。如果答案对您有帮助,请接受该答案 - cocomac

2
CertainPerformance已经解释了这是如何可能的,以及抑制日志的原因。我将在这里展示另一种方法,在原始方法丢失后重新获得console.log
document.body.appendChild(document.createElement('IFRAME')).onload = function () {
    this.contentWindow.console.log('Hello, World!');
    this.remove();
};

这基本上使用了一种旧方法,即从临时 iframe 中恢复全局对象。

你甚至可以使用 console.log = this.contentWindow.console.log,但在这种情况下,你需要在 Firefox 中不要 .remove() iframe。 - Kaiido

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接