我正在尝试使用PhantomJS设置远程调试,没有太多运气。我按照https://github.com/ariya/phantomjs/wiki/Troubleshooting的说明进行操作。我有一个名为debug.js
的小程序:
var system = require('system' ), fs = require('fs'), webpage = require('webpage');
(function(phantom){
var page=webpage.create();
function debugPage(){
console.log("Refresh a second debugger-port page and open a second webkit inspector for the target page.");
console.log("Letting this page continue will then trigger a break in the target page.");
debugger; // pause here in first web browser tab for steps 5 & 6
page.open(system.args[1]);
page.evaluateAsync(function() {
debugger; // step 7 will wait here in the second web browser tab
});
}
debugPage();
}(phantom));
现在我从命令行运行它:
$ phantomjs --remote-debugger-port=9001 --remote-debugger-autorun=yes debug.js my.xhtml
console.log
消息现在显示在shell窗口中。我打开浏览器页面localhost:9001
。正是在这一点上,文档说“获取幻像上下文的第一个Web检查器”但是,我只看到about:blank
的一个条目。当我点击它时,我会得到一个检查员,其中包含无关的:空白页面,网址为http://localhost:9001/webkit/inspector/inspector.html?page=1
。文档讨论了执行__run()
,但我似乎无法访问我将要执行此操作的页面; about:html
似乎是一个__run()
,这是一个无操作。
FWIW,我在W8下使用PhantomJS 1.9.1。
我错过了什么?
答案 0 :(得分:23)
文档说:
要运行脚本,只需在Web中输入__run()命令即可 督察控制台。
__run()
不是无操作,而只是脚本的包装器。您需要先选择Console选项卡,然后在命令窗口中输入__run()
。如果您熟悉Chrome,则与开发人员工具相同。
答案 1 :(得分:21)
要调试脚本,请启动像这样的phantomjs:
phantomjs --remote-debugger-port=9000 hello.js
这是一个非常简单的测试脚本(hello.js)。请注意,您应该将debugger;
放在脚本的顶部,或者在脚本中的任何位置放入调试器。
debugger;
for (var i=0; i < 5; i++)
{
console.log('debugging in phantom js:' + i);
}
phantom.exit();
现在只需在浏览器中加载以下网址:
然后您会看到浏览器页面中列出的链接
about:blank
点击它,然后您会看到整个页面看起来像Chrome Inspector。单击此页面中工具栏中的“控制台”按钮(不是您以前使用过的Chrome或Safari控制台)。
现在,在该控制台类型__run()
中输入。您的脚本将显示并开始调试!
答案 2 :(得分:10)
使用Chrome版本57.0.2987.133(64位)在Mac上进行调试时遇到问题。我让调试器在localhost上打开:9000(127.0.0.1:9000对我来说没有用)但是在输入__run()之后(是的,使用双下划线),没有响应。我可以在Sources下看到其他js文件,我的列表但是是空的。 (我确实启用了chrome中的调试)
我在野生动物园尝试过同样的方法,这一切都像宣传的一样。
Chrome更新:(来自下面的Thiago Fernandes):显然问题是由于Chrome不接受回车键,因此解决方法是在Chrome控制台内评估此功能,以使enterKey正常工作:
function isEnterKey(event) { return (event.keyCode !== 229 && event.keyIdentifier === "Enter") || event.keyCode === 13; }
答案 3 :(得分:2)
在我的情况下,__run()
不会在控制台中执行。
如果这是同一个问题,请继续阅读....
打开PowerShell并执行脚本:
cls
# we go to the folder where our test.js script resides
cd "C:\Users\xxx\Phantomjs.Console"
phantomjs --remote-debugger-port=9000 --remote-debugger-autorun=yes test.js
__run()
!在脚本中放置debugger
语句以进行调试!