PhantomJS 有控制台吗?
Posted
技术标签:
【中文标题】PhantomJS 有控制台吗?【英文标题】:Is there a console for PhantomJS? 【发布时间】:2013-02-23 11:31:28 【问题描述】:我在 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 环境。
如果您想破解 phantom,请执行!您可以运行测试 使用 cake test 或 npm test,并重建 coffeescript/browserified 带有蛋糕构建的代码。您可能需要
npm install -g coffeescript
让蛋糕发挥作用。
【问题讨论】:
【参考方案1】:自从version 1.5 差不多一年前就有了一种交互模式 (REPL)。你只需要不带任何参数启动 PhantomJS,它会立即从REPL mode 开始。
【讨论】:
现在你提到了它,它实际上在命令行的帮助中清楚地记录了......Without any argument, PhantomJS will launch in interactive mode (REPL).
我不明白为什么我之前找不到那个信息。
而且似乎 REPL 中的一个错误阻止了页面打开......所以现在回到我的 hackish 解决方案......
REPL 无法打开页面...?【参考方案2】:
好吧,我最终为我最初链接到的控制台脚本编写了一个包装脚本: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
【讨论】:
以上是关于PhantomJS 有控制台吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用phantomjs进行Odoo测试 - page.evaluate eval结果:false
为什么这个PhantomJS进程导致“目录 不存在。“错误?