在 Node.js 中使用“网页”Phantom 模块

2024-01-20

我正在尝试将 PhantomJS 脚本包装在 node.js 进程中。 phantom 脚本从命令行提供的参数中获取 url,并输出 pdf(与 pahntom 安装中包含的 rasterize.js 示例非常相似)。

我的幻像脚本工作正常,只是我的雇主想要一个节点脚本(如果可能的话)。没问题,我可以使用节点幻象 https://github.com/alexscheelmeyer/节点模块来包装它。

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

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

因此,node.js 试图找到一个名为“webpage”的模块,“webpage”模块内置于幻像安装中,因此 Node 无法找到它。据我所知,没有名为“网页”的 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);
    }
});

其中,address 是在命令行上指定的 url,output 是另一个参数,即文件的名称和类型。

谁能帮我吗?这是一个相当抽象的问题,所以说实话,我并没有抱太大期望,但值得一试。

Thanks.

编辑 - 大约 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 (system.args.length < 4 || system.args.length > 6) {

        // --- Bad Input ---

        console.log('Wrong usage, you need to specify the BLAH BLAH BLAH');
        phantom.exit(1);

    } else {

        phantom.createPage(function(err,page){

            // --- Set Variables, Web Address, Output ---
            address = system.args[2];
            output = system.args[3];
            page.viewportSize = { width: 600, height: 600 };


            // --- Set Variables, Web Address ---
            if (system.args.length > 4 && system.args[3].substr(-4) === ".pdf") {

                // --- PDF Specific ---
                size = system.args[4].split('*');
                page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }
                                                   : { format: system.args[4], orientation: 'portrait', margin: '1cm' };
            }

            // --- Zoom Factor (Should Never Be Set) ---
            if (system.args.length > 5) {
                page.zoomFactor = system.args[5];
            } else {
                page.zoomFactor = 1;
            }

            //----------------------------------------------------

            page.open(address ,function(err,status){

                if (status !== 'success') {

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

                } else {

                    // --- Keep Looping Until Render Completes ---
                    process.nextTick(function () {
                        page.render(output);
                        phantom.exit();
                    }, 200);
                }

            });

        });
    }
});

但!尺寸不合适!在传递 URL 之前,使用幻像“webpage”create() 函数创建的页面对象如下所示:

而我的节点脚本看起来像这样:

是否可以对属性进行硬编码以实现 A4 格式?我缺少什么属性?

我已经很接近了!


它应该是这样的:

var phantom=require('../node-phantom');
phantom.create(function(error,ph){
  ph.createPage(function(err,page){
    page.open(url ,function(err,status){
      // do something
    });
  });
});

您在这里感到困惑是因为您想重用 PhantomJS 脚本中的相同概念和隐喻。但事实并非如此。我建议你花一些时间研究node-phantom包含的测试,参见https://github.com/alexscheelmeyer/node-phantom/tree/master/test https://github.com/alexscheelmeyer/node-phantom/tree/master/test.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Node.js 中使用“网页”Phantom 模块 的相关文章

  • npm WARN 已弃用 [email protected]:改用 uuid 模块

    当我尝试时 npm install g cordova latest总是得到npm 警告已弃用 电子邮件受保护 cdn cgi l email protection 使用 uuid 模块代替 mac 操作系统塞拉利昂 10 12npm v
  • jQuery数据表设置列设计和成功回调中的值

    我为我的数据表编写了以下代码 它用我的数据库中的内容填充表 如下所示 if datatable null datatable destroy datatable tableProducts DataTable pageLength 50 b
  • 通过 Javascript 更改 Webkit 属性?

    请帮助我 可能是因为我对 CSS 动画和 Javascript 相当陌生 但我使用的代码应该更改它的属性 当我运行代码时 它会执行代码中的所有其他操作 除了更改所需 div 的 CSS 属性 我已经尝试了所有这四种方法 但似乎都不起作用 它
  • 如何从对象数组中删除所有重复项?

    This is a large array of objects e g let totalArray id rec01dTDP9T4ZtHL4 fields user id 170180717 user name abcdefg even
  • Chrome 跨域 PATCH 请求不起作用

    我有一个带有 REST Api 的网站 现在我正在创建一个浏览器扩展 它将从某些页面收集数据并将它们发送回 REST Api 因为我希望我的扩展能够与 Firefox 和 Chrome 兼容 并且易于维护 所以我将实际代码作为脚本标记注入到
  • Moment.js 动态更新时间(以秒为单位)

    我试图显示时钟 that 每秒更新一次 e g 2015 年 1 月 5 日 12 05 01 它似乎对我来说工作得很好 对于相同的代码 并且只有 moment min js 指向v2 11 0 看看代码 来源 MilkyWayJoe va
  • Webpack - 资产大小限制中的警告:以下资产超出了建议的大小限制 (244 KiB)

    当我在生产模式下运行 webpack 时 有资产规模限制 超出 的警告 我怎样才能运行而不出现这个错误 在我的项目中 我包含 css 并且我看到 webpack 构建中包含一些 node module 目录 但是如果我排除 css 的 no
  • Google 地图 Javascript v3 折线点击事件

    我正在尝试显示一张地图 其中有多条路线布置为折线 单击多段线时 我想显示特定于该线的数据 将数据与线关联不是问题 但无论单击哪条线 显示的数据都会与最近绘制的线关联 就好像每条新折线都会覆盖最后一条线一样 我有一个数据库 其中包含 gpx
  • Lightbox:如何翻译“Image x of x”文本?

    我使用 Lightbox 2 作为图像集 当我的网站的访问者单击该集中的缩略图时 它将显示 图像的放大版本 下面是 描述 取自 a 标题属性 其下方 文本 Image x of x 例如 Image 1 of 12 有谁知道在哪里翻译 更改
  • Firefox 上的 jquery 焦点未设置

    我想将焦点设置到我的文本区域 以下是我的代码 this textInput val show focus 但它不起作用 实际上 当我按下鼠标按钮时 它会出现 但是当我松开鼠标时 它会从文本区域中删除 因此 经过大量搜索后 我发现 setTi
  • 带有桌子的嵌套表

    我在应用了表排序器的表中嵌套了表 它在嵌套表中添加了排序标题 但是它们没有对行进行排序 并且抛出了JavaScript错误 我想拥有 嵌套表不可排序 巢表上的排序实际上可以工作 但不是现状 您的第一个选择要容易得多 使嵌套表不可排序 像这样
  • 如何处理 setTimeout() 的多个实例?

    阻止创建 setTimeout 函数的多个实例 在 JavaScript 中 的最推荐 最佳方法是什么 一个例子 伪代码 function mouseClick moveDiv div 0001 mouseX mouseY function
  • FullCalendar:如何重新创建/重新初始化 FullCalendar 或批量添加多个事件

    我正在尝试将新事件批量添加到日历中 但未能找到方便的使用方法 所以我决定用新的事件数组重新初始化视图 所以我尝试了以下方法 var events title Event start new Date y m d 10 description
  • Jquery Ajax 调用返回 403 状态

    我有一个 jquery Ajax 调用来实现会话的 keepalive 这个 keepAlive 方法将每 20 分钟调用一次 function keepAlive ajax type POST url KeepAliveDummy asp
  • 如何使 4.X Typescript 项目与旧版本的 Typescript(如 3.X)兼容?

    如何使基于 TS 4 X 构建的软件包与 3 X 兼容 例如 如果我有较新的版本 则使用新功能 否则使用any or unknown或旧版本支持的任何内容 有没有可能使用指令 https www typescriptlang org doc
  • 如何更改数据表中标题单元格的内容?

    我正在使用数据表 http datatables net plugin 在我的可排序列上 我想用按钮替换列文本 但是这样做 oSettings aoColumns i nTh text 我可以检索相应列的文本 但是 oSettings ao
  • 引导网格中的绘图图周围有巨大的空白

    我有一个 Net 应用程序 我试图在其中使用创建一个图表bootstrap js and plotly js 当我创建响应式图表时 我遇到网格中存在巨大空白的问题 我发现问题的一部分是plotly svg container的大小默认高度为
  • Node.js 上的 Connect 出现“无法 GET /”

    我正在尝试使用以下方式开始提供一些静态网页connect像这样 var connect require connect var nowjs require now var io require socket io var app conne
  • 为什么 phantomjs 不能在 MacOS Sierra 中工作?

    我们正在使用phantomjs 1 9 1 macosx phantomjs 2 0 0 macosx哪一个工作得很好OS X 埃尔卡皮坦更新后macOS 塞拉利昂它会引发以下错误 phantomjs 1 9 1 macosx phanto
  • NPM 如何处理版本冲突?

    由于 NPM 版本 3 节点模块和依赖项都安装在同一根级别 但是 如果我安装两个依赖于同一模块的两个不同版本的模块怎么办 例如 如果我安装异步npm i email protected cdn cgi l email protection

随机推荐

  • 如何使用 Visual Studio Code git Push 到不同的分支?

    我意识到在 VSCode 中提交后 有一个 推送 菜单选项可以将提交推送到默认分支 然而 我经常需要将它推送到不同的分支 有没有办法做到这一点或运行git push progress origin DEFAULT BRANCH OTHER
  • 如何找出哪个缺失的 DLL 导致我的 .NET 应用程序在启动时崩溃?

    当对第 3 方程序集的依赖项添加到典型的 NET 应用程序时 很容易忘记将它们添加到安装程序中 这个问题往往只有在应用程序安装后才会显现出来 并且以启动时崩溃的形式出现 几乎没有可用的有用信息 找出需要将哪些程序集添加到安装程序的最佳工具和
  • 头盔快递 ERR_BLOCKED_BY_RESPONSE.NotSameOrigin 200

    请我需要帮助 我检查了所有谷歌 但没有得到打开我的问题的真正答案 我想使用头盔来保护我的 Express 服务器 但是当我使用它时 我收到此错误 ERR BLOCKED BY RESPONSE NotSameOrigin 200 从数据库加
  • 使用 Matplotlib 创建 CSV 数据的实时绘图

    我正在尝试使用 Matplotlib 来可视化一些测量结果 测量通常持续约 24 小时 并将在 csv 中包含约 3 万行数据 我一直在努力让我的情节真正动画化 我可以执行代码 它将显示截至当前时间点的快照 但不会显示其他内容 当我尝试自动
  • 如何让 GridView 在添加项目时调整其高度

    我试图在 GridView 中显示一个带有复选框的动态增长的字符串列表 该复选框本身位于 TableLayout 中 我可以连续显示 复选框 字符串 当我让用户在 GridView 中动态添加新字符串时 就会出现问题 我创建了一个接收字符串
  • 如何使用 expo React Native 调整照片大小

    给定用户设备上照片的 uri 文件 和内容 我如何调整照片大小 我正在运行一个托管的博览会应用程序 因此理想情况下我们能够在不分离的情况下执行此操作 这可以通过世博会来完成图像操纵器 https docs expo io versions
  • GoogleMobileAds 的未定义符号问题

    我正在构建动态框架 在其中导入 GoogleMobileAds 框架 我没有将其链接为二进制 我只是将其导入到类代码中 同时将框架保留在项目路径上 而不在构建阶段的 链接二进制文件 中链接它 import GoogleMobileAds 我
  • Heroku 无法满足tensorflow==2.3.0 的要求

    我正在尝试将 Flask 应用程序部署到 Heroku 为了使应用程序能够正确使用 Keras Tensorflow 必须至少为 2 2 版本 所以我做了pipenv install tensorflow 就像我对所有依赖项所做的那样 它将
  • Opencv:从许可证中裁剪文本区域

    我有一张驾驶执照的下图 我想提取有关驾驶执照 姓名 出生日期等的信息 我的思考过程是找到一种方法将它们逐行分组 并裁剪出包含姓名的单个矩形 eng 和 ara 的许可证等 但我却惨遭失败 import cv2 import os impor
  • 使用opengl进行真正的等角投影

    有没有简单的方法进行等角投影 I mean 真正的等角投影 http en wikipedia org wiki Isometric projection 不是一般的正交投影 只有当单位 X Y 和 Z 向量的投影长度相等且它们之间的角度恰
  • WCF 中的并发如何工作?

    我是WCF和SOA的新手 我刚刚开始研究这些 我有一个理论上的疑问 客户端 A 已调用服务 并且逻辑当前正在服务器上执行 当逻辑正在执行时 来自客户端 B 的另一个调用会进入同一服务 此时客户端 A 正在执行的逻辑发生了什么 该服务如何设法
  • 使用 getter 样式方法名称将业务逻辑添加到域类

    我正在尝试向 grails 域类添加一个方法 例如 class Item String name String getReversedName name reverse 当我尝试使用 grails 控制台加载应用程序时 出现以下错误 导致
  • WWDC 2010 示例代码 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在哪里可以下载 WWDC 2010 代码示例 我是一名注册的 iPhone 开发人员 但似乎无法在 Apple 网站上找到示例 或者更简单
  • Angular:strictTemplates - 如何正确设置模板中的布尔值和数字?

    I set strictTemplates true并在 HTML 模板中使用以下内容
  • Seaborn 热图 pandas 对 isnull 的计算

    生成数据帧的一系列计算 以提供 NaN 占行总数的百分比 如下所示 data df isnull sum len df 100 RecordID 0 000000 ContactID 0 000000 EmailAddress 0 0000
  • “this”语法如何工作?

    这条线是 this attr id replace button 相当于这个 this attr id replace button since this始终包含对object of invocation 这确实取决于where你调用该代码
  • Pip 通过需求文件安装单个包的多个额外依赖项

    一些包 例如DVC https dvc org doc install linux install with pip允许您安装额外的依赖项以使用附加功能 安装单个额外的依赖项 无论是通过命令行还是在requirements txt 你只需使
  • 如何从 jquery 手风琴中删除活动轮廓?

    我正在使用 Jquery 手风琴 活动链接有一个轮廓 我尝试过使用CSS accordion a focus outline none accordion a active outline none font weight bold and
  • 如何突出显示 UITextView 的文本的一部分?

    我想做的是 如果我的详细视图被调用 我想仅突出显示文本的一部分UITextView元素 让我们说一下里面的文字UITextView is blatextbla 然后我只想动态突出显示text or late或用户想到的任何内容 我怎样才能做
  • 在 Node.js 中使用“网页”Phantom 模块

    我正在尝试将 PhantomJS 脚本包装在 node js 进程中 phantom 脚本从命令行提供的参数中获取 url 并输出 pdf 与 pahntom 安装中包含的 rasterize js 示例非常相似 我的幻像脚本工作正常 只是