Есть ли консоль для PhantomJS?

Я нашел это на github: https://github.com/gr2m/phantomjs-console

Но это немного сумасшествие, нужно писать команды в файле, только на одной строке, которая затем читается и удаляется, а вывод находится в терминале.

Мне нужна консоль вроде...

$ phantomjs --console
phantom> console.log(typeof $)
[Object Function]
phantom> console.log("happy days")
happy days
phantom> 

Есть ли что-нибудь подобное?

EDIT: начать понимать, почему они сделали это таким безумным способом...

От PhantomJS- Node: https://github.com/sgentle/phantomjs-node

Нет, как это работает?

Я отвечу на этот вопрос вопросом. Как вы общаетесь с процессом, который не поддерживает разделяемая память, сокеты, FIFO или стандартный ввод?

Ну, есть одна вещь, которую PhantomJS поддерживает, и что открытие веб-страница. На самом деле, это действительно хорошо при открытии веб-страниц. Итак, мы общаться с PhantomJS, разворачивая экземпляр ExpressJS, открытие Phantom в подпроцессе и указание его на специальной веб-странице который превращает сообщения socket.io в вызовы alert(). Те alert() звонки взяты Phantom и там вы идете!

Сама связь происходит через Джеймса Холлидея, фантастического dnodeбиблиотека, которая, к счастью, работает достаточно хорошо в сочетании с browserify, чтобы запустить прямо из PhantomJS pidgin Javascript окружающая среда.

Если вы хотите взломать phantom, сделайте это! Вы можете выполнить тесты с тестом теста или npm-тестом, и перестроить coffeescript/browsified код с сборкой торта. Возможно, вам понадобится npm install -g coffeescriptдля торта для работы.

Ответ 1

Существует интерактивный режим (REPL) с версии 1.5 почти год назад. Вам просто нужно запустить PhantomJS без каких-либо аргументов, и он немедленно начнется в режиме REPL.

Ответ 2

Ну, я закончил писать обертку script для консоли script, с которой я первоначально связан: https://github.com/gr2m/phantomjs-console

Это грязный способ сделать это, но на самом деле работает точно так, как я хочу. Оказывается, что phantomjs планирует обрабатывать stdin/stdout, но он еще не реализован. Когда он будет реализован, этот безумный способ взаимодействия станет устаревшим, и новый, простой script сможет выступать в качестве консоли.

#!/usr/bin/env coffee

sys = require "sys"
fs = require "fs"

# stdin = process.openStdin()
# stdin.addListener "data", (d)-> console.log "you entered: [" + d.toString().substring(0, d.length-1) + "]"

readline = require "readline"

spawn = require("child_process").spawn
phantom = spawn("phantomjs", ["phantom_console.coffee", "http://local/"])

rl = readline.createInterface process.stdin, process.stdout
rl.setPrompt 'phantom> '
rl.prompt()

rl.on 'line', (line)->
  if line == "exit"
    phantom.kill()
    rl.close()
  else
    fs.writeFile ".command.js", line
  # rl.prompt()

rl.on 'close', ->
  phantom.kill()
  process.exit(0)

phantom.stdout.on "data", (data) ->
  console.log data+''
  rl.prompt()

phantom.stderr.on "data", (data) ->
  console.log "\nstderr: " + data
  rl.prompt()

phantom.on "exit", (code) ->
  console.log "child process exited with code " + code