有什么方法可以使用 exe 文件执行我的 Node js 和 puppeteer 程序吗?

2024-01-31

当我在 CMD 上使用该程序时,该程序在 puppeteer 上运行良好。尽管如此,这是一个漫长的过程,对于任何非技术人员来说也很复杂。我想制作一个 exe 文件来执行我手动执行的任务,以在 CMD 中运行此 node.js 文件。正如您首先看到的,我的程序将打开浏览器并转到(URL)。我想用不同的 URL 制作不同的程序。这样,如果一个人想要运行此代码,他只需单击 exe 文件,然后该软件就会自动为用户执行该任务。

const puppeteer = require('puppeteer');

async function getPic() {
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();
  await page.setViewport({width: 2576, height: 4134})
  await page.goto('http://absoluteindianews.com/epaper- 
  en/index.php/epaper/edition/906/delhi-edition');
for (let i=1; i<=8; i++){
  await page.click('#page_area > a > img');
  await page.waitFor(4000);

  await page.screenshot({path: 'C:/Users/biznis/Desktop/automatic 
  downloading/Puppeteer/AbsoluteIndia/Delhi/Delhi'+ i +'.png'});

  await page.waitFor(2000);
  await page.click('#cboxLoadedContent > img');

  await page.waitFor(2000);
if(i<8) {
  await page.click('#yw1 > li.next > a');
}
  await page.waitFor(2000);
};

  await page.setViewport({width: 2576, height: 4134})
  await page.goto('http://absoluteindianews.com/epaper- 
  en/index.php/epaper/edition/905/mumbai-edition');
for (let i=1; i<=8; i++){
  await page.click('#page_area > a > img');
  await page.waitFor(4000);

  await page.screenshot({path: 'C:/Users/biznis/Desktop/automatic 
  downloading/Puppeteer/AbsoluteIndia/Mumbai/Mumbai'+ i +'.png'});
  await page.waitFor(2000);
  await page.click('#cboxLoadedContent > img');

  await page.waitFor(2000);
if(i<8) {
  await page.click('#yw1 > li.next > a');
}
  await page.waitFor(2000);
};

  await page.setViewport({width: 2576, height: 4134})
  await page.goto('http://absoluteindianews.com/epaper- 
  en/index.php/epaper/edition/904/bhopal-absolute');
for (let i=1; i<=8; i++){
  await page.click('#page_area > a > img');
  await page.waitFor(4000);

  await page.screenshot({path: 'C:/Users/biznis/Desktop/automatic 
  downloading/Puppeteer/AbsoluteIndia/Bhopal/Bhopal'+ i +'.png'});
  await page.waitFor(2000);
  await page.click('#cboxLoadedContent > img');

  await page.waitFor(2000);
if(i<8) {
  await page.click('#yw1 > li.next > a');
}
  await page.waitFor(2000);
};

  await browser.close();
}

getPic();   

有多种方法可以解决此问题,并且不可能将它们写入单个答案。不过我可以在上面提供一些指导nexe and electron。还有enclosejs and pkg以及。

在下面的两个解决方案中,最重要的规则之一是不要捆绑您的 node_modules 文件夹。如果捆绑 Chromium 二进制文件,它将无法工作。

Nexe

您可以使用nexe https://github.com/nexe/nexe。这将下载您的 Nodejs 脚本并将其捆绑到单个可执行文件中。全局安装,

npm i -g nexe

然后创建你的木偶脚本。这是一个示例文件,

const puppeteer = require("puppeteer");

async function scraper(url) {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(url);
  const title = await page.title();
  await browser.close();
  return title;
}

scraper("http://example.com").then(console.log);

现在将其捆绑使用,

nexe index.js

最后复制节点模块文件夹捆绑可执行文件文件发送给您的客户。

Electron

您可以使用电子创建一个漂亮的 GUI,并使用电子生成器创建可执行文件。

PS:GUI 是可选的,不是这个答案的一部分。它只是为了展示如何为您的客户端提供可执行文件,它的作用不仅仅是运行浏览器。

我不会讨论什么是电子及其工作原理,而是使用一个快速入门示例。如果你想得到最终的代码,检查这个仓库 https://github.com/entrptaher/electron-quickstart-puppeteer.

首先克隆快速启动存储库,

git clone https://github.com/electron/electron-quick-start

然后安装 puppeteer 和 electro-builder,

yarn add puppeteer
npm i -g electron-builder

现在编辑main.js并添加nodeIntegration: true to webPreferences,

mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: true // <-- this line
    }
})

现在编辑index.html并添加一个按钮和结果容器,

<p><button>Get Result</button><div id="result"></div></p>

Edit renderer.js并粘贴我们在下一个示例中使用的示例代码。另外使用这些线,

document.querySelector("button").addEventListener("click", async function() {
  const result = await scraper("http://example.com");
  document.querySelector("#result").innerHTML = result;
});

现在打开 package.json 并添加这些选项,以便我们可以运行 chromium 二进制文件,

"build": {
    "extraResources": "node_modules",
    "files": [
      "!node_modules"
    ]
}

现在构建应用程序,

electron-builder

Open dist文件夹,您将获得您的软件包应用程序。你可以运行并得到结果,

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

有什么方法可以使用 exe 文件执行我的 Node js 和 puppeteer 程序吗? 的相关文章

随机推荐

  • 将 jQueryUI 可排序列表与表单一起使用

    我正在使用 jQueryUI 创建一个可排序列表 并且 UI 部分工作得很好 因为我可以根据需要在网页上对项目进行排序 但我不知道排序列表的顺序是如何包含在 POST 中的 我对 javascript 完全是菜鸟 所以如果这真的很简单 请原
  • TimeSpan 转 ISO8601 持续时间格式字符串

    任何人都可以建议如何将时间跨度或整数转换为 ISO8601 持续时间字符串 如中所述http en wikipedia org wiki ISO 8601 Durations http en wikipedia org wiki ISO 8
  • WPF 验证器类似于 ASP.NET 中的验证器

    我们如何在 WPF 应用程序中实现类似于 ASP NET 应用程序的验证器 如必填字段验证器 提前致谢 None
  • 如何在 Cypress e2e 测试中使用 Angular Store

    我需要在我的 Angular Store 中注入一个值 调度一个操作 以使我的 Cypress e2e 测试正常工作 事实上 我需要我的商店包含 isLoggedIn true 来访问应用程序中的任何页面 否则用户将被重定向到登录页面 我在
  • 使用 visNetwork 动态更新 R 中的节点

    下面的快照视觉效果是使用 visNetwork 包创建的 我这里的要求是我必须对边缘进行硬编码 并且在使用 visHierarchicalLayout 之后 我无法按顺序看到它们 请帮助我采用动态方法 这样无论有多少个数字 我都会得到连续的
  • 查找字符串中某个字符的所有出现位置

    我试图找到所有出现的 在一个字符串中 def findSectionOffsets text startingPos 0 endPos len text for position in text find startingPos endPo
  • Eclipse 字体缩小和放大问题

    如何在 Eclipse 中放大和缩小文本 我找到了插件 但无法手动安装 请告诉我在 Eclipse 中安装不同插件的过程 我在使用 Android 开发工具 Eclipse 遇到很多问题后问了这个问题 查看此链接 您一定会喜欢它Eclips
  • 使用 PHP 整理多个 JavaScript 文件是否比单独包含它们更快?

    我知道提供多个小文件比提供一个大文件要慢得多 这就是为什么最好使用单个 CSS 文档和精灵表 一段时间以来 我还尝试在尽可能少的文件中包含尽可能多的 JavaScript 以避免查看者多次请求更多文件 但是在同一个文档中包含各种明显不同的任
  • Python 子进程因命名管道而挂起

    I m 挣扎在试图模仿这个简单的片段bash cat tmp fifo tub 1 24027 gunzip c tmp filedat dat gz gt tmp fifo tub line 01 line 02 line 03 line
  • 如何知道 python-docx 中的新段落何时导致新页面

    我必须使用动态创建Word文档python docx 我通过动态添加表行来实现这一点 并且无法知道页面上适合多少条记录 因为这取决于特定的数据 我需要知道添加到文档 表行或段落 的新元素何时会导致新页面 因此我可以根据每个页面包含的信息在数
  • 通过融合查看分支的差异?

    我知道我可以查看 HEAD 和当前状态之间的差异meld 但是我如何查看分支之间的差异 例如master and devel与融合 目前我执行以下步骤 重命名工作副本的文件夹例如mv projectA projectA master 再次克
  • 有没有办法在 Python 中推断日期是否是 DST(夏令时)更改的实际日期?

    我想在Python中推断日期是否是一年中由于DST 夏令时 而改变小时的实际日期 与图书馆pytz您可以本地化日期时间 并且实际的 DST 更改已正确完成 此外 还有一个方法dst 图书馆的datetime这使您可以推断实际日期是夏季还是冬
  • iOS 设备上安装的所有应用程序的列表及其在主屏幕 (Springboard) 上的位置

    我几天来一直在寻找有关如何获取运行 iOS gt 5 0 的设备上已安装应用程序列表的下降答案 com apple mobile installation plist 我尝试过来自不同来源的代码 我得到的唯一几乎成功的解决方案是使用 Dan
  • 是否可以解耦 Eclipse 的代码索引功能?

    我正在寻找为大学课程编写一个静态分析器 为了为该工具提供更多功能 我希望能够查找调用层次结构 如 Eclipse 中的 Ctrl Alt H 所做的那样 这也必须是一个快速操作 因此查找可能必须针对索引而不是字节码扫描来完成 然而 我认为编
  • Jquery 无法读取 Internet Explorer 上的自定义标记文本

    我想在我的 html 页面中使用自定义标签并使用 jquery 读取其中的文本 就像是
  • 合并可跨越对象时出错

    我想合并 3 个可跨越的对象 这段代码工作正常 Spannable s1 new SpannableStringBuilder bold s1 setSpan new StyleSpan android graphics Typeface
  • 扩展FutureTask,如何处理取消

    我已经延长了FutureTask from java util concurrent提供回调来跟踪提交给任务的执行情况ExecutorService public class StatusTask
  • git 仅在 Gitlab CI 上克隆 LFS 文件的 sha

    我推了 png文件 每个文件大小为 2 MB 并由git lfs 到我的 gitlab com 存储库 比如说repo a 在另一个仓库的 CI 工作中repo b where git lfs安装后 repo a 被克隆 现在我看到所有 p
  • 如何通过 pkg-config 使用 C++ Boost 库?

    我成功编译并安装了最新版本的 Boost 库到我的 Linux 机器上 现在 我希望能够使用 pkg config 来简化提供 GCC 链接参数的过程 由于我懒得手动编码自己的 pc 文件 是否有一个脚本 工具可以自动生成所需的 pc 文件
  • 有什么方法可以使用 exe 文件执行我的 Node js 和 puppeteer 程序吗?

    当我在 CMD 上使用该程序时 该程序在 puppeteer 上运行良好 尽管如此 这是一个漫长的过程 对于任何非技术人员来说也很复杂 我想制作一个 exe 文件来执行我手动执行的任务 以在 CMD 中运行此 node js 文件 正如您首