3

私が考えることができる唯一の解決策はJSでそれを行うことですが、ファントムスクリプトから実行しようとしているJSに変数を渡すことができません。

4

2 に答える 2

3

CasperJSを見てください。これは、この種の Web 動作を簡単に実行できる、非常に優れた PhantomJS スクリプトです。

PhantomJS スクリプトと通信する限り、現在のところ、いくつかの信頼できるオプションがあります。

  1. コマンドライン引数を介してデータを渡します。
  2. ファイルの読み取り/書き込みを介してデータを交換します。
  3. PhantomJS スクリプトが GETS/POSTS 経由で Node.js スクリプトを呼び出すようにします。
于 2012-02-27T14:36:39.317 に答える
1

はい、C++ と JS の間の QtWebKit ブリッジに問題があります。それは機能しますが、逆よりもJSからC ++へのほうが優れています。

対処すべき問題は数多くありますが、これは需要の点で最も高いものの 1 つです。

その間、私は通常、次のpageようにオブジェクトを「装飾」します。

var page = require("webpage").create();

page.evaluateWithParams = function(func) {
    var args = [].slice.call(arguments, 1),
        str = 'function() { return (' + func.toString() + ')(',
        i, ilen, arg;

    for (i = 0, ilen = args.length; i < ilen; ++i) {
        arg = args[i];
        if (/object|string/.test(typeof arg)) {
            str += 'JSON.parse(' + JSON.stringify(JSON.stringify(arg)) + '),';
        } else {
            str += arg + ',';
        }
    }
    str = str.replace(/,$/, '); }');
    return this.evaluate(str);
}

そして、次のようにページのスコープ内で関数を呼び出すことができます:

var a = 1, b = 2;
page.evaluateWithParams(function(arg1, args) {
    // your code that uses arg1 and arg2
}, a, b);

お役に立てれば。

イヴァン

于 2012-03-29T09:00:33.837 に答える