Подтвердить что ты не робот

Получение удаленной отладки с помощью 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. Именно в этот момент в документации говорится: "Получите первый веб-инспектор для контекста phantom". Однако я вижу только одну запись для about:blank. Когда я нажимаю на это, я получаю инспектор за неуместную: пустую страницу с URL http://localhost:9001/webkit/inspector/inspector.html?page=1. В документации говорится о выполнении __run(), но я не могу попасть на страницу, где я бы это сделал; about:html кажется contina a __run(), который является не-op.

FWIW, я использую PhantomJS 1.9.1 под W8.

Что мне не хватает?

4b9b3361

Ответ 1

В документации написано:

Чтобы запустить script, просто введите команду __run() в Интернете Консоль инспектора.

__run() не является no-op, а просто оболочкой для вашего script. Сначала нужно выбрать вкладку Консоль, а затем ввести __run() в окне команд. Если вы знакомы с Chrome, то это точно так же, как и для разработчика.

debug console

Ответ 2

Чтобы отладить script, запустите phantomjs следующим образом:

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

Вот суперпростой тест script, который работает (hello.js). Обратите внимание, что вы должны поместить "отладчик"; в верхней части вашего script, или где бы вы ни находились в script, который вы хотите разбить на отладчик.

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 Inspector. Нажмите кнопку "Консоль" на панели инструментов, которая находится на этой странице (а не на консоли Chrome или Safari, которую вы использовали для использования).

Теперь в этой консоли введите "__run()" и нажмите enter. Ваш script отобразит и начнет отладку!

Ответ 3

У меня возникли проблемы с отладкой для работы на Mac с помощью Chrome версии 57.0.2987.133 (64-разрядная версия). Я получил отладчик для открытия на localhost: 9000 (127.0.0.1:9000 не работал у меня), но после ввода __run() (да, с двойным подчеркиванием) ответа не было. Я мог видеть другие файлы js в Sources, мой был указан, но был пуст. (Я включил отладку в хром)

Я попробовал то же самое на сафари, и все это работало как рекламируемое.

UPDATE для Chrome: (от Thiago Fernandes ниже): Очевидно, проблема связана с тем, что Chrome не принимает ключ ввода, поэтому обходной путь заключается в том, чтобы оценить эту функцию внутри консоли chrome, чтобы заставить enterKey работать:

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