web-dev-qa-db-ja.com

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_メッセージがシェルウィンドウに表示されます。ブラウザページを開いて_localhost:9001_にアクセスします。この時点で、ドキュメントには「ファントムコンテキストの最初のWebインスペクタを取得する」と書かれていますが、_about:blank_のエントリは1つしかありません。それをクリックすると、無関係なabout:blankページのインスペクターにURL _http://localhost:9001/webkit/inspector/inspector.html?page=1_が表示されます。ドキュメントでは__run()の実行について説明していますが、それを行うページにアクセスできないようです。 _about:html_は、無操作である__run()を継続しているようです。

FWIW、私はW8でPhantomJS 1.9.1を使用しています。

私は何が欠けていますか?

35
user663031

ドキュメントには次のように書かれています:

スクリプトを実行するには、Web Inspector Consoleで__run()コマンドを入力するだけです。

__run()はノーオペレーションではなく、単にスクリプトのラッパーです。最初に[コンソール]タブを選択してから、コマンドウィンドウに__run()と入力する必要があります。 Chromeに精通している場合は、開発者ツールの場合とほぼ同じです。

debug console

23
Cybermaxs

スクリプトをデバッグするには、次のように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();
_

次のURLをブラウザにロードするだけです:

http://127.0.0.1:9000/

その後、ブラウザのページにリンクが表示されます

_about:blank
_

それをクリックすると、Chromeインスペクターのようなページ全体が表示されます。このページにあるツールバーの[コンソール]ボタンをクリックします(使用しているChromeまたはSafariのコンソールではありません)。

さて、そのコンソールで__run()と入力してEnterを押してください。スクリプトが表示され、デバッグが開始されます!

21
Brad Parks

Chromeバージョン57.0.2987.133(64ビット)を使用してデバッグをMacで動作させるのに問題がありました。localhost:9000でデバッガを開くようにしました(127.0.0.1:9000は動作しませんでした)私にとって)しかし、__ run()(はい、二重アンダースコア付き)を入力した後、応答はありませんでした。ソースの下に他のjsファイルが表示され、私のリストが表示されましたが空でした(クロムでデバッグを有効にしました)

私はサファリで同じことを試してみましたが、すべて宣伝どおりに機能しました。

Chromeの更新:(以下のThiago Fernandesから):明らかに問題はChrome= Enterキーを受け入れないため、回避策はこの関数をchromeコンソール、enterKeyを機能させるには:

function isEnterKey(event) { return (event.keyCode !== 229 && event.keyIdentifier === "Enter") || event.keyCode === 13; } 
10
Astra Bear

私の場合、__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:90
  3. 私の場合、test.jsファイルをクリックします。
  4. [ソース]タブに切り替えます。
  5. Watch Expressionsの下で__run()を実行します!

デバッグ用にスクリプトにdebuggerステートメントを追加してください!

enter image description here

3
Legends