3

我能想到的唯一解决方案是用 JS 来做,但我不能将幻影脚本中的任何变量传递给我试图执行的 JS。

4

2 回答 2

3

你应该看看CasperJS。这是一个非常好的 PhantomJS 脚本,可以让您轻松地执行这种 Web 行为。

至于与您的 PhantomJS 脚本进行通信,就目前而言,您有一些可靠的选择:

  1. 通过命令行参数传递您的数据。
  2. 通过读/写文件交换数据。
  3. 让您的 PhantomJS 脚本通过GETS/POSTS 调用您的Node.js 脚本。
于 2012-02-27T14:36:39.317 回答
1

是的,在 C++ 和 JS 之间的 QtWebKit 桥接器中存在上下传递东西的问题。它有效,但从 JS 到 C++ 比相反更好。

我们有许多问题需要解决,但就需求而言,这是排名第一的问题之一。

同时,我通常像这样“装饰”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 回答