14

我在 github 上找到了这个:https ://github.com/gr2m/phantomjs-console

但这有点疯狂,必须将命令写入文件中,仅在一行上,然后读取和删除,并且输出在终端中。

我想要一个像...这样的控制台

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

有这样的吗?

编辑:开始理解他们为什么以如此疯狂的方式做到这一点......

来自 PhantomJS-Node:https ://github.com/sgentle/phantomjs-node

不,真的,它是如何工作的?

我会用一个问题来回答这个问题。如何与不支持共享内存、套接字、FIFO 或标准输入的进程通信?

好吧,PhantomJS 确实支持一件事,那就是打开网页。事实上,它真的很擅长打开网页。因此,我们通过启动 ExpressJS 的实例、在子进程中打开 Phantom 并将其指向将 socket.io 消息转换为alert()调用的特殊网页来与 PhantomJS 通信。这些alert()电话被 Phantom 接听,然后就可以了!

通信本身是通过 James Halliday 出色的dnode 库进行的,幸运的是,当与 browserify 结合使用时,它运行良好, 可以直接在 PhantomJS 的 pidgin Javascript 环境中运行。

如果你想破解幻影,请做!您可以使用 cake test 或 npm test 运行测试,并使用 cake build 重建咖啡脚本/浏览器代码。你可能需要npm install -g coffeescript 蛋糕才能工作。

4

2 回答 2

14

There is an interactive mode (REPL) since version 1.5 almost a year ago. You just need to launch PhantomJS without any argument and it will immediately start in REPL mode.

于 2013-02-23T15:19:22.613 回答
5

好吧,我最终为我最初链接到的控制台脚本编写了一个包装脚本:https ://github.com/gr2m/phantomjs-console

这是一种混乱的方式,但实际上完全按照我的意愿工作。事实证明,phantomjs 计划处理标准输入/标准输出,但尚未实施。当它被实现时,这种疯狂的交互方法将被淘汰,一个新的、简单的脚本将能够充当控制台。

#!/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
于 2013-02-23T13:48:13.377 回答