PhantomJS:如何向文本框输入文本?

3
我能想到的唯一解决方案是使用JS,但我无法将任何变量从幻影脚本传递给我正在尝试执行的JS。
2个回答

3
你应该看一下 CasperJS。它是一个非常好的 PhantomJS 脚本,可以让你轻松地执行这种网络行为。
至于与你的 PhantomJS 脚本通信,目前有几个可靠的选项:
  1. 通过命令行参数传递数据。
  2. 通过读写文件交换数据。
  3. 让你的 PhantomJS 脚本通过 GETS/POSTS 调用你的 Node.js 脚本。

1

是的,QtWebKit桥接C++和JS之间在传递数据方面存在问题。它可以工作,但从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);

希望这有帮助。 伊万

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接