PhantomJS在Linux上的phantom.exit()之后崩溃
PhantomJS crashes after phantom.exit() on Linux
我试图在PhantomJS之上构建一个非常简单的解决方案,但不知何故,它在调用phantom.exit()
时崩溃了。例如,在运行以下代码时:
var page = require('webpage').create();
page.onResourceRequested = function (request) {
console.log('Request ' + request.url);
phantom.exit();
};
page.open('http://www.google.com/');
在 Ubuntu (12.04.3 LTS( 和 CentOS (6.4( 上因分段错误而崩溃。如果我注释掉phantom.exit()
它会列出请求的 URL,因此它基本上按预期工作。但是phantom.exit()
是我真正需要的东西,因为我想在某些情况下终止我的脚本(例如尝试访问特定域(。我有一种感觉,我的问题太明显了,但不知道发生了什么。
这是一个已知问题,但有一个简单的解决方法。尽管如此,这是一个应该修复的错误,但现在:
setTimeout(function()
{
phantom.exit(0);
},0);
这很愚蠢,但这应该可以解决问题...我链接到的github页面上也有一个补丁。还有一些关于为什么这个错误存在的更多详细信息。
我认为问题出在这里:
是的,你是对的[phantom.exit应该终止PhantomJS而不执行任何进一步的代码],但是每次调用m_pages[i]->close((;调用deleteLater((这意味着每个对象都将被删除,但异步...也许这就是问题所在。
在我看来,异步删除似乎是该错误的可能原因,因为处理程序在setTimeout
后返回,并且实际的exit
调用延迟,因此可以在应该在的时间和地点删除所有内容。超时有效地将exit
调用移出处理程序的范围...
我还没有测试过它,但如果是这种情况,也许:
var closeFunc = function()
{
phantom.exit(0);
};
page.onResourceRequested = function (request)
{
console.log('Request ' + request.url);
return closeFunc();
};
也会起作用。如果是这样,那么您只需要使用这些解决方法中的任何一种,直到发布可靠的补丁或下一个版本,并且错误得到修复。
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 在chrome.tabs.onCreated之后加载HTML页面
- 在Jquery detachment()和appendTo()之后定位元素
- AngularJS:ng之后,重复$scope值未按预期更新
- 为什么元素的宽度在页面加载之后和那一刻之后不同
- 没有在Angular应用程序中定义firebase(在firebase迁移之后)
- Javascript复选框函数:;缺少:在属性id之后"
- location.reload(true)崩溃浏览器选项卡
- 在刚刚调用的append函数之后,jquery.height()不会返回实际值
- 引导程序崩溃一次只能看到一个
- Grunt构建导致Angular应用程序在dist上崩溃
- 正在链接添加了以下内容::在之后
- JQuery hide()在show()之后不起作用,反之亦然
- jquery扩展了崩溃效率
- 未执行Ajax循环的Javascript之后的代码
- 如何在`window.open`之后执行回调
- 如何在一个元素动画之后延迟
- 在XMLHttpRequest之后重新初始化jQuery
- <text区域>在我的html中包含event.keycode==13之后,wrap就不起作用了
- PhantomJS在Linux上的phantom.exit()之后崩溃