我正面临着phantomjs最奇怪的问题。基于在我试图执行的js文件中注释函数,它是冻结/解冻的。这是我的代码:
var page = new WebPage(),
url = 'https://example.org' + Date.now(),
stepIndex = 0;
// Callback is executed each time a page is loaded...
page.open(url, function (status) {
if (status === 'success') {
page.injectJs('jquery.js');
page.injectJs('helper.js') ;
parseResults() ;
phantom.exit();
} else {
console.log(status) ;
phantom.exit();
}
});
function parseResults(){
page.evaluate(function() {
console.log("Evaluating...") ;
$(".menus ul li").each(function(i, obj){
category_name = $(this).find(".tabs__link").text().trim() ;
category = {
"r_id" : r_id.toString(),
"category_name" : category_name } ;
category_id = apicall("http://localhost:8000/menu_category/", category, "category_id") ;
console.log(category_name) ;
sub_menu_id = $(this).attr('data-menu_id').toString() ;
$("div[data-menu_id='"+sub_menu_id+"']").find('ul li').each(function(i, obj){
dish = {
"category_id": category_id.toString(),
"name": $(this).find('.name').text()).trim(),
"r_id": r_id,
"cost":$(this).find('.price').text()).trim()
} ;
console.log($(this).find('.name').text()).trim()) ;
apicall("http://localhost:8000/menu_dish/", dish, "category_id") ;
}) ;
}) ;
});
}
page.onConsoleMessage = function (msg, line, source) {
console.log('console> ' + msg);
};
page.onAlert = function (msg) {
console.log('alert!!> ' + msg);
};
phantom.onError = function(msg, trace) {
var msgStack = ['PHANTOM ERROR: ' + msg];
if (trace && trace.length) {
msgStack.push('TRACE:');
trace.forEach(function(t) {
msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : ''));
});
}
console.error(msgStack.join('\n'));
phantom.exit(1);
};
上面的脚本在这样调用时冻结在终端:
> ./phtantomjs --web-security=false my_config.js
但是,如果我注释掉函数定义(而不是调用),它可以正常工作,使整个代码无用。这几个小时前工作正常,不知道为什么它现在破裂了。有线索吗?