如何在page.evaluate中写入结果?将结果放入console.log但使用ts
引发错误写入文件时,此代码可正常工作。
page.evaluate(function(url) {
function getHTTPResponseString(url, callback) {
try {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
if (this.status == 200) {
var u8 = new Uint8Array(this.response), bs = [];
for (var i = u8.length - 1; i >= 0; --i) {
bs[i] = String.fromCharCode(u8[i]);
}
callback(bs.join(''));
} else {
console.log(this.statusText);
callback('');
}
}
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.send();
} catch (e) {
console.log(JSON.stringify(e));
}
}
getHTTPResponseString(url, function(result) {
console.log(result);
})
}, url);
答案 0 :(得分:5)
我发现可以通过调用window.callphantom()
内的page.evaluate
来传递数据,然后通过page.onCallback
事件处理传递的数据:
page.onCallback = function(result) {
var fs = require('fs');
fs.write('file.out', result, 'w');
};
getHTTPResponseString(url, function(result) {
console.log(result);
window.callPhantom(result);
})
答案 1 :(得分:1)
无法从page.evaluate()函数内部写入文件,因为它在浏览器上下文中无法访问本地文件系统。
但是,您可以返回要分析的数据,然后在PhantomJS端处理它。
var error = page.evaluate(function(url) {
// ...
return xhr.statusText;
}, url);
fs.write(filename, error, 'a');
记录数据的一种更简单的方法是使用page.onConsoleMessage函数从浏览器上下文订阅控制台消息:
page.onConsoleMessage = function (msg) {
console.log("Browser console: " + msg);
};
还有一个 page.onError 函数来侦听 page.evaluate 中发生的错误:http://phantomjs.org/api/webpage/handler/on-error.html