标签: phantomjs

如何通过命令行将变量作为参数传递给CasperJS脚本?

我在一个js文件中使用PhantomJs,CasperJs和Js来运行cmd.

想象一下,我们有两个文件(test1.js和test2.js).这两个文件都有一个url/site变量,用于将测试定向到特定地址.每当环境发生变化或目标位置发生变化时,我们都需要更新此变量.

为了避免更新文件,我想通过命令行传递值,以测试它的位置.

有没有办法在运行文件时通过cmd声明字符串变量?

例如:

casperjs test.js "var site='http://google.com';"
Run Code Online (Sandbox Code Playgroud)

javascript jquery cmd phantomjs casperjs

18
推荐指数
2
解决办法
1万
查看次数

如何明确地将商店作为道具传递给"Connect()"

我试图测试我的React组件并得到以下错误.

不变违规:无法在"连接()"的上下文或道具中找到"存储".将根组件包装在<Provider>中,或者显式地将"store"作为prop传递给"Connect()".

在测试中渲染Component时出错.

beforeEach(() => {
  Component = TestUtils.renderIntoDocument(<SideMenu />);
});
Run Code Online (Sandbox Code Playgroud)

在页面上呈现Component时,它工作正常.但是在测试中,我无法将存储明确地传递给Component.

有人能指出正确的方向吗?

phantomjs reactjs redux react-redux

18
推荐指数
2
解决办法
1万
查看次数

PhantomJS需要()一个相对路径

在PhantomJS脚本中,我想加载一个自定义模块,但似乎相对路径在PhantomJS中不起作用?

的script.js:

var foo = require('./script/lib/foo.js');
foo.bar('hello world');
phantom.exit();
Run Code Online (Sandbox Code Playgroud)

foo.js:

exports.bar = function(text){
  console.log(text);
}
Run Code Online (Sandbox Code Playgroud)
  • 根据fs.workingDirectory,我在好目录中
  • foo.js不在phantomjs的查找路径中

我错过了什么吗?

编辑:

inject()并不重要,因为我不需要向HTML页面注入JS,而是加载我自己的模块,如require('fs')但具有相对路径.

requirejs phantomjs

17
推荐指数
1
解决办法
1万
查看次数

将参数传递给page.includeJs()和page.evaluate()中的匿名函数

一点背景......我对javascript和phantom.js有点新,所以我不知道这是一个javascript还是phantom.js bug(功能?).

以下成功完成(对于缺少的phantom.exit(),您只需要在完成后按ctrl + c):

var page = require('webpage').create();
var comment = "Hello World";

page.viewportSize = { width: 800, height: 600 };
page.open("http://www.google.com", function (status) { 
    if (status !== 'success') {
        console.log('Unable to load the address!');
        phantom.exit();
    } else {
        page.includeJs('http://code.jquery.com/jquery-latest.min.js', function() {
            console.log("1: ", comment);
        }, comment);

        var foo = page.evaluate(function() {            
            return arguments[0];
        }, comment);

        console.log("2: ", foo);            
    }
});
Run Code Online (Sandbox Code Playgroud)

这有效:

page.includeJs('http://code.jquery.com/jquery-latest.min.js', function() {
    console.log("1: ", comment);
}, comment);
Run Code Online (Sandbox Code Playgroud)

输出:1: Hello World

但不是:

page.includeJs('http://code.jquery.com/jquery-latest.min.js', function(c) { …
Run Code Online (Sandbox Code Playgroud)

javascript phantomjs

17
推荐指数
1
解决办法
8565
查看次数

使用node.js中的"网页"Phantom模块

我试图在node.js进程中包装PhantomJS脚本.幻像脚本从命令行上提供的参数中获取URL并输出pdf(非常类似于pahntom安装中包含的rasterize.js示例).

我的幻像脚本工作正常,只是我的雇主想要一个节点脚本,如果可能的话.没问题,我可以使用node-phantom节点模块来包装它.

但现在我遇到了绊脚石,我的幻像脚本有:

var page = require('webpage').create();
Run Code Online (Sandbox Code Playgroud)

因此,node.js正在尝试查找名为"网页"的模块,"网页"模块内置于幻像安装中,因此节点无法找到它.据我所知,没有名为'网页'的npm模块.

'网页'使用如下:

page.open(address, function (status) {

    if (status !== 'success') {

        // --- Error opening the webpage ---
        console.log('Unable to load the address!');

    } else {

        // --- Keep Looping Until Render Completes ---
        window.setTimeout(function () {
            page.render(output);
            phantom.exit();
        }, 200);
    }
});
Run Code Online (Sandbox Code Playgroud)

其中address是命令行中指定的url,输出是另一个参数,即文件的名称和类型.

谁能帮我吗?这是一个非常抽象的,所以如果我诚实的话,我并没有期待太多,但值得一试.

谢谢.

编辑 - 约2小时后

我现在有这个抛出PDF:

var phanty = require('node-phantom');

var system = require('system');

phanty.create(function(err,phantom) {

    //var page = require('webpage').create();

    var address;
    var output;
    var size;

    if …
Run Code Online (Sandbox Code Playgroud)

javascript rendering node.js phantomjs

17
推荐指数
2
解决办法
3万
查看次数

从CLI或Web调用时挂起PhantomJS

我正在尝试使用phantomJS来捕获URL的屏幕截图,但是当我调用phantomJS(来自命令行或web应用程序)时,它会挂起并且看不到执行"exit()"调用.我似乎无法找到任何错误消息,它一直运行,直到我杀了它.这是传递给phantomjs命令的JS文件:

var page = require('webpage').create();
var system = require('system');
var script_address = '';
var page_to_load = '';
var members_id = '';
var activities_id = '';
var folder_path = '';

if (system.args.length < 5) 
{
    console.log('Usage: phantom_activity_fax.js script_address page_to_load members_id activities_id folder_path');
    console.log('#Args: '+system.args.length);
    phantom.exit();
}//END IF SYSTEM.ARGS.LENGTH === 1

//ASSIGN OUR ARGUMENTS RECIEVED
script_address = system.args[0];
page_to_load = system.args[1];
members_id = system.args[2];
activities_id = system.args[3];
folder_path = system.args[4];

console.log(system.args[0]);
console.log(system.args[1]);
console.log(system.args[2]);
console.log(system.args[3]);
console.log(system.args[4]);

//OPEN OUR PAGE WITH THE VALUES PROVIDED …
Run Code Online (Sandbox Code Playgroud)

javascript web-scraping phantomjs

17
推荐指数
2
解决办法
1万
查看次数

phantomJS - 将参数传递给JS文件

现在我正在使用以下命令来运行 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 () { …
Run Code Online (Sandbox Code Playgroud)

javascript phantomjs

17
推荐指数
2
解决办法
2万
查看次数

selenium.common.exceptions.WebDriverException:消息:'无法连接到GhostDriver'

我试图运行PhantomJS从内selenium.webdriverCentOS的服务器上.PhantomJS在路径中并且从终端正常运行.但是在脚本中它似乎已启动,但之后无法在指定端口上到达(我尝试了2个不同的打开端口,来自我的提供程序29842和60099,它们都不工作,并且没有指定端口也没有启动它).

错误发生在selenium.webdriver.common.utils:

try:
    socket_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket_.settimeout(1)
    socket_.connect(("localhost", port))
    socket_.close()
    return True
except socket.error:
    return False
Run Code Online (Sandbox Code Playgroud)

这是从我的脚本(我尝试没有任何参数,以及编写可执行文件的完整路径,但都没有工作):

self.browser = webdriver.PhantomJS(
            port=29842,
            desired_capabilities={
                'javascriptEnabled': True,
                'platform': 'windows',
                'browserName': 'Mozilla',
                'version': '5.0',
                'phantomjs.page.settings.userAgent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36"
            }
        )
Run Code Online (Sandbox Code Playgroud)

这是初始化webdriver的脚本selenium.webdriver.phantomjs.service.我检查并subprocess.Popen实际上lauches phantomjs,错误发生在while循环:

    try:
        self.process = subprocess.Popen(self.service_args,
                                        stdout=self._log, stderr=self._log)

    except Exception as e:
        raise WebDriverException("Unable to start phantomjs with ghostdriver.", e)

    count = 0 …
Run Code Online (Sandbox Code Playgroud)

python port phantomjs selenium-webdriver ghostdriver

17
推荐指数
1
解决办法
2万
查看次数

是否可以使用PhantomJS和Node从模板动态生成PDF?

背景/需要

我正在使用Node.JS和Express在Web应用程序上与一个小组合作.我们需要能够生成可以打印为硬拷贝和硬拷贝形式的报告.我们希望在服务器上为报告和手写表单动态生成PDF.我们目前正在服务器上使用EJS模板.

选项

我认为能够使用模板来构建表单/报告并从生成的HTML中生成PDF会很方便,但是我这样做的选项在我能找到的范围内看起来有限.我看了两种不同的解决方案:

编辑:我找到了另一个Node.JS模块,它能够从HTML生成名为node-wkhtml的 PDF,它依赖于wkhtmltopdf.我现在正在比较使用node-phantomnode-wkhtml.我已经能够在节点服务器上生成具有这两者的PDF,并且它们似乎都能够满足我的需要.

我已经看到了一些使用PhantomJS从网站呈现PDF文档的例子,但我见过的所有例子都使用了一个URL而不是一串HTML.我不确定是否可以使用模板进行此工作以动态生成PDF报告.

当我收到报告请求时,我希望从EJS模板生成HTML,并使用它生成PDF.反正我是否使用Phantom在服务器上完全动态创建页面而不提出请求?

我的另一个选择是使用PDFkit,它允许动态生成PDF,但它是一个类似画布的API,据我所知,它并不真正支持任何模板概念.

问题

有谁知道我是否可以使用PhantomJS和Node从模板生成的HTML动态生成PDF?或者是否有人知道我可以用来从我的Node/Express后端生成和提供可打印报告/表单的任何其他解决方案.

pdf templates pdf-generation node.js phantomjs

17
推荐指数
3
解决办法
9852
查看次数

如何在TeamCity中运行Jasmine测试

我们一直在使用Jasmine编写JavaScript业务逻辑的规范.我们能够在浏览器中运行我们的测试套件,但是我们如何在TeamCity中集成它?我们最好不要使用NodeJS,而是尽可能简单.

teamcity jasmine phantomjs

17
推荐指数
1
解决办法
8325
查看次数