phantomJS - 将参数传递给JS文件

asp*_*rin 17 javascript phantomjs

现在我正在使用以下命令来运行 phantomJS

exec('./phantomjs table.js',$op,$er);
Run Code Online (Sandbox Code Playgroud)

table.js

var page = require('webpage').create();
page.open('table.php', function () {
    page.render('table.png');
    phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)

这符合目的.但现在我需要使用动态变量,即date.那么是否可以在exec命令行中传递PHP或Javascript变量,以便我可以在里面使用该变量table.js

更新

我尝试根据此处发布的解决方案修改我的代码.通过exec将变量传递给PhantomJS

exec('./phantomjs table.js http://www.yahoo.com',$op,$er);
Run Code Online (Sandbox Code Playgroud)

table.js

var args = require('system').args;
var page = require('webpage').create();
var address = system.args[1];
    page.open(address, function () {
        page.render('table.png');
        phantom.exit();
    });
Run Code Online (Sandbox Code Playgroud)

但这导致了两个问题:

  • 整个过程大约需要3-4分钟才能完成
  • 之后我收到"Server Not Found"消息

如果我删除修改后的代码,一切都按预期工作.

更多调试

table.js里面我用过这个:

var args = require('system').args;
args.forEach(function(arg, i) {

    console.log(i+'::'+arg);

});

var page = require('webpage').create();
var address = 'http://www.gmail.com';
page.open(address, function () {
    page.render('github.png');
    phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)

在运行它时,我$op(从exec命令)打印输出:

Array ( [0] => 0::table.js [1] => 1::http://www.yahoo.com )
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是,只要我下面的代码,遇到同样的问题

var args = require('system').args;

var page = require('webpage').create();
var address = system.args[1]; // <--- This line is creating problem, the culprit
page.open(address, function () {
    page.render('github.png');
    phantom.exit();
}); 
Run Code Online (Sandbox Code Playgroud)

似乎这不是正确的语法.有什么明显我无法看到的吗?

dar*_*rat 31

您的代码问题是一个简单的疏忽.

您已经使用了存储args

var args = require('system').args;
Run Code Online (Sandbox Code Playgroud)

因此,当您需要引用它们时,您只需要:

var address = args[1];
Run Code Online (Sandbox Code Playgroud)

"系统"的使用正在寻找一个完全不同的阵列


asp*_*rin -2

好吧,我找到了解决上述问题的方法。而不是使用

var address = system.args[1];
Run Code Online (Sandbox Code Playgroud)

我按照以下修改来做到这一点

var args = require('system').args;
var address = '';
args.forEach(function(arg, i) {

    if(i == 1)
    {
       address = arg;
    }

});

var page = require('webpage').create();    
page.open(address, function () { // <-- use that address variable from above
    page.render('github.png');
    phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)

  • 我认为反对票可能来自这样一个事实:您正在迭代一个数组,只是为了从中获取元素“1”。首选方法是:`var address = args[1];` (3认同)