首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >phantomJS -将参数传递给JS文件

phantomJS -将参数传递给JS文件
EN

Stack Overflow用户
提问于 2013-05-29 13:18:24
回答 3查看 22.1K关注 0票数 17

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

代码语言:javascript
复制
exec('./phantomjs table.js',$op,$er);

table.js

代码语言:javascript
复制
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修改我的代码

代码语言:javascript
复制
exec('./phantomjs table.js http://www.yahoo.com',$op,$er);

table.js

代码语言:javascript
复制
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();
    });

但这导致了两个问题:

  • 整个过程大约需要3-4分钟才能完成。
  • 之后,我得到了“服务器未找到”消息。

如果我删除了修改后的代码,所有操作都会按照预期进行。

更多的调试

table.js中,我使用了以下内容:

代码语言:javascript
复制
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命令)输出如下:

代码语言:javascript
复制
Array ( [0] => 0::table.js [1] => 1::http://www.yahoo.com )

到目前一切尚好。但是,一旦我把下面的代码,也会遇到同样的问题

代码语言:javascript
复制
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();
}); 

看来这不是正确的语法。有什么明显的我看不见的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-03 08:39:51

嗯,我找到了一个替代上述问题的方法。而不是使用

代码语言:javascript
复制
var address = system.args[1];

我是按照下面的修改做的

代码语言:javascript
复制
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();
});
票数 -2
EN

Stack Overflow用户

发布于 2013-10-22 17:51:24

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

您已经将args存储在

代码语言:javascript
复制
var args = require('system').args;

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

代码语言:javascript
复制
var address = args[1];

"system“的使用是在一个完全不同的数组中。

票数 31
EN

Stack Overflow用户

发布于 2013-12-10 12:50:25

我不得不这样做,这个答案指向我找到我的最终答案,然而,当一些人在这里表达我的浏览器崩溃…我发现了问题和解决方案,认为值得分享.

如果:

代码语言:javascript
复制
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

在另一端,我添加了一个字符串替换

代码语言:javascript
复制
var address = address.replace(/@/gi,"&");

那么一切都很好..。也许还有其他的方法,但这对我来说是完美的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16814997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档