page.evaluate - 如何写入文件里面呢?
page.evaluate - how to write to file inside of it?
如何将 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);
无法从 page.evaluate() 函数内部写入文件,因为它在无法访问本地文件系统的浏览器上下文中工作。
但是你可以 return 你想要分析的数据,然后在 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
我发现可以通过在 page.evaluate
内部调用 window.callphantom()
来传递数据,然后通过 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);
})
如何将 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);
无法从 page.evaluate() 函数内部写入文件,因为它在无法访问本地文件系统的浏览器上下文中工作。
但是你可以 return 你想要分析的数据,然后在 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
我发现可以通过在 page.evaluate
内部调用 window.callphantom()
来传递数据,然后通过 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);
})