35

我正在尝试使用 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. 正是在这一点上,文档说“获取第一个虚拟上下文的网络检查器”但是,我只看到一个about:blank. 当我点击它时,我会得到一个检查器,用于检查不相关的 about:blank 页面,其 URL 为http://localhost:9001/webkit/inspector/inspector.html?page=1。文档谈到了执行__run(),但我似乎无法到达我会这样做的页面;about:html似乎 contina a__run()是无操作的。

FWIW,我在 W8 下使用 PhantomJS 1.9.1。

我错过了什么?

4

4 回答 4

23

文档说:

要运行您的脚本,只需在 Web Inspector 控制台中输入 __run() 命令。

__run()不是无操作,而只是脚本的包装器。您需要先选择控制台选项卡,然后__run()在命令窗口中输入。如果您熟悉 Chrome,它与 developerpers 工具几乎相同。

调试控制台

于 2013-07-11T06:31:58.013 回答
22

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

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

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

你好.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()并按回车键。您的脚本将显示并开始调试!

于 2014-01-24T19:31:00.967 回答
13

我在使用 Chrome 版本 57.0.2987.133(64 位)在 Mac 上进行调试时遇到问题。我让调试器在 localhost:9000 上打开(127.0.0.1:9000 对我不起作用)但是在输入 __run() (是的,带有双下划线)后,没有响应。我可以在 Sources 下看到其他 js 文件,我的已列出但为空。(我确实在 chrome 中启用了调试)

我在 safari 上尝试了同样的方法,一切都像宣传的那样有效。

Chrome 更新:(来自下面的 Thiago Fernandes):显然问题是由 Chrome 不接受 enter 键引起的,因此解决方法是在 chrome 控制台中评估此功能,以使 enterKey 工作:

function isEnterKey(event) { return (event.keyCode !== 229 && event.keyIdentifier === "Enter") || event.keyCode === 13; } 
于 2017-04-26T02:15:13.730 回答
5

在我的情况下,__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()在 Watch Expression 下执行

debugger在您的脚本中添加一条语句以进行调试!

在此处输入图像描述

于 2018-02-01T23:42:08.867 回答