PhantomJS:如何在文本框中键入文本?

时间:2011-12-26 09:41:09

标签: node.js phantomjs

我能想到的唯一解决方案是使用JS来实现,但是我无法将任何变量从幻像脚本传递给我正在尝试执行的JS。

2 个答案:

答案 0 :(得分:3)

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

就您今天的PhantomJS脚本进行通信而言,您有一些可靠的选择:

  1. 通过命令行args传递您的数据。
  2. 通过读/写文件交换数据。
  3. 让你的PhantomJS脚本通过GETS / POSTS调用你的Node.js脚本。

答案 1 :(得分: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);

希望这有帮助。

伊万