现在,我使用以下命令运行phantomJS
exec('./phantomjs table.js',$op,$er);table.js
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);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();
});但这导致了两个问题:
如果我删除了修改后的代码,所有操作都会按照预期进行。
更多的调试
在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();
}); 看来这不是正确的语法。有什么明显的我看不见的吗?
发布于 2013-06-03 08:39:51
嗯,我找到了一个替代上述问题的方法。而不是使用
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();
});发布于 2013-10-22 17:51:24
代码的问题是一个简单的疏忽。
您已经将args存储在
var args = require('system').args;因此,当您需要引用它们时,只需做:
var address = args[1];"system“的使用是在一个完全不同的数组中。
发布于 2013-12-10 12:50:25
我不得不这样做,这个答案指向我找到我的最终答案,然而,当一些人在这里表达我的浏览器崩溃…我发现了问题和解决方案,认为值得分享.
如果:
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();
}); 但是,如果您想在url地址中传递多个une参数,例如google.com?searchteext&date=today,我发现字符“&”会像它期望的那样使浏览器崩溃,成为不同的命令。
我的解决方案是使用相同的方法,但不使用but &我使用@标记,这样url将类似于google.com?searchteext@date=today
在另一端,我添加了一个字符串替换
var address = address.replace(/@/gi,"&");那么一切都很好..。也许还有其他的方法,但这对我来说是完美的。
https://stackoverflow.com/questions/16814997
复制相似问题