使用PhantomJS设置远程调试

时间:2013-07-10 14:26:12

标签: phantomjs

我正在尝试使用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。

我错过了什么?

4 个答案:

答案 0 :(得分:23)

文档说:

  

要运行脚本,只需在Web中输入__run()命令即可   督察控制台。

__run()不是无操作,而只是脚本的包装器。您需要先选择Console选项卡,然后在命令窗口中输入__run()。如果您熟悉Chrome,则与开发人员工具相同。

debug console

答案 1 :(得分:21)

要调试脚本,请启动像这样的phantomjs:

phantomjs --remote-debugger-port=9000 hello.js

这是一个非常简单的测试脚本(hello.js)。请注意,您应该将debugger;放在脚本的顶部,或者在脚本中的任何位置放入调试器。

hello.js

debugger;

for (var i=0; i < 5; i++)
{
  console.log('debugging in phantom js:' + i);
}

phantom.exit();

现在只需在浏览器中加载以下网址:

http://127.0.0.1:9000/

然后您会看到浏览器页面中列出的链接

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 
  1. 打开Chrome浏览器并转到
  2. http://localhost:9000
  3. 点击你的案例test.js文件。
  4. 切换到“来源”标签!
  5. 在观看表达式下执行__run()
  6. 在脚本中放置debugger语句以进行调试!

    enter image description here