PhantomJS 为什么 webpage.onConsoleMessage 在<script>打开的 html 中没有捕获



为了方便起见,在这个问题中,我将contents常量定义为我的HTML文件。

var webPage = require('webpage');
var page = webPage.create();
const contents = `
<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript">
console.log("TEXT WITHIN HTML");
</script>
</head>
<body></body>
</html>
`;
page.open(contents, function(status) {
console.log('Status: ' + status);
page.evaluate("function() { console.log('page.evaluated stuff')}");
});
page.onConsoleMessage = function(msg, lineNum, sourceId) {
console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};

运行$ phantomjs test.js:时

$ phantomjs test.js 
Status: success
CONSOLE: page.evaluated stuff (from line # in "")

它成功地捕获了console.log,而不是HTML文件的<scripts>部分中的page.evaluate

为什么?我对Phantomjs不是很熟悉。

Phantomjs不支持ES6。

我测试了你的代码是否有错误。

我不知道你是怎么得到结果的。试试这个。

var webPage = require('webpage');
var page = webPage.create();
var contents = '<!DOCTYPE html><html lang="en"><head> <script type="text/javascript"> console.log("TEXT WITHIN HTML\n");</script> </head> <body></body> </html>';
page.open("about:blank", function(status) {
page.content = contents;
console.log('Status: ' + status);
page.evaluate(function () {
(function() { console.log('page.evaluated stuff')})()
});
});
page.onConsoleMessage = function(msg, lineNum, sourceId) {
console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};

最新更新