14

私はこれをgithubで見つけました:https ://github.com/gr2m/phantomjs-console

しかし、コマンドを1行だけファイルに書き込んでから読み取り、削除し、出力をターミナルに保存する必要があるのは少しおかしなことです。

私は次のようなコンソールが欲しい...

$ 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がサポートしていることが1つあります。それは、Webページを開くことです。実際、Webページを開くのは本当に得意です。そのため、ExpressJSのインスタンスを起動し、サブプロセスでPhantomを開き、socket.ioメッセージをalert()呼び出しに変換する特別なWebページにポイントすることで、PhantomJSと通信します。それらのalert()呼び出しはPhantomによってピックアップされ、そこに行きます!

通信自体は、James Hallidayの素晴らしいdnodeライブラリを介して行われます。これは、browserifyと組み合わせると、 PhantomJSのpidginJavascript環境から直接実行できるよう に十分に 機能します。

ファントムをハックしたい場合は、やってください!ケーキテストまたはnpmテストを使用してテストを実行し、ケーキビルドを使用してcoffeescript/browserifiedコードを再構築できます。npm install -g coffeescript あなたはケーキが機能するために必要かもしれません。

4

2 に答える 2

14

ほぼ 1 年前のバージョン 1.5からインタラクティブ モード (REPL) があります。引数なしで PhantomJS を起動するだけで、すぐにREPL モードで起動します。

于 2013-02-23T15:19:22.613 に答える
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
于 2013-02-23T13:48:13.377 に答える