我在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实例与PhantomJS进行通信, 在子进程中打开Phantom,并将其指向一个特殊的网页 将socket.io消息转换为
alert()
个调用。那些alert()
来电 被Phantom接走,你就去了!通讯本身就是通过James Halliday的精彩dnode来实现的。 图书馆,幸运的是与...结合使用得很好 browserify直接从PhantomJS的pidgin Javascript中运行 环境。
如果你想破解幽灵,请做!您可以运行测试 用蛋糕测试或npm测试,并重建coffeescript / browserified 代码与蛋糕构建。您可能需要
npm install -g coffeescript
让蛋糕上班。
答案 0 :(得分:14)
大约一年前,version 1.5以来就有一种互动模式(REPL)。您只需要在没有任何参数的情况下启动PhantomJS,它将立即从REPL mode开始。
答案 1 :(得分:5)
好吧,我最后为我最初链接到的控制台脚本编写了一个包装脚本:https://github.com/gr2m/phantomjs-console
这是一种混乱的方式,但实际上正如我想要的那样。事实证明,phantomjs计划处理stdin / stdout,但它还没有实现。当它实现时,这种疯狂的交互方法将变得过时,一个新的,简单的脚本将能够充当控制台。
#!/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