现在我正在使用以下命令来运行phantomJS
exec('./phantomjs table.js',$op,$er);
var page = require('webpage').create();
page.open('table.php', function () {
page.render('table.png');
phantom.exit();
});
这符合目的。但现在我需要使用动态变量,即date
。那么是否可以在exec
命令行中传递PHP或Javascript变量,以便我可以在table.js
中使用该变量?
我尝试根据此处Passing a variable to PhantomJS via exec
发布的解决方案修改我的代码exec('./phantomjs table.js http://www.yahoo.com',$op,$er);
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();
});
但这导致了两个问题:
如果我删除修改后的代码,一切都按预期工作。
在 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();
});
在运行时,我的$op
(来自exec
命令)打印输出:
Array ( [0] => 0::table.js [1] => 1::http://www.yahoo.com )
到目前为止一切顺利。但是,只要我下面的代码,遇到同样的问题
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();
});
似乎这不是正确的语法。有什么明显我无法看到的吗?
答案 0 :(得分:30)
您的代码问题很简单。
您已使用
存储了参数var args = require('system').args;
所以当你需要引用它们时,你只需要这样做:
var address = args[1];
使用“system”正在寻找一个完全不同的数组
答案 1 :(得分:3)
我不得不这样做,这个答案指向我找到我的最终答案,但有些人在这里表达我的浏览器崩溃...我发现问题和解决方案和思想值得分享......
如果符合以下条件,这将完美无缺:
exec('phantomjs phdemo.js http://google.com', $o, $e); ?>
var page = require('webpage').create();
var system = require('system');
var address = system.args[1];
page.open(address, function () {
page.render('output.pdf');
phantom.exit();
});
但是,如果您想在网址中传递超过une参数,例如google.com?searchteext&date=today,我发现该字符'&amp;'崩溃浏览器,因为它期望它作为一个不同的命令
我的解决方案是使用相同但不是放&amp;我使用了@ sign,因此网址看起来像google.com?searchteext@date=today
然后在另一端我添加了一个字符串替换
var address = address.replace(/@/gi,"&");
然后一切都运行得很好......可能有其他方法可以做到这一点,但这对我来说非常有效
答案 2 :(得分:-2)
好吧,我找到了上述问题的替代方案。而不是使用
var address = system.args[1];
我是按照以下修改
进行的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();
});