Browserless 快速上手

news2025/5/13 19:12:44

要将你提供的 HTML 模板和数据结构转换为可以用于 Browserless /pdf 接口的 JSON 请求体(且能正确渲染为 PDF),需要满足以下几点:


✅ 最终目标格式(这是能用的格式):

 

json

复制编辑

{ "html": "<h1>🚀 N8N 本地部署指南:在你的计算机上部署 N8N,享受无需复杂运维的自动化体验</h1>", "options": { "landscape": false, "printBackground": true, "format": "A4" } }


🧩 解决方案:将数组中每一项转换为 JSON 格式的 HTML 页面

你可以用一个 Code 节点(设置为 Run Once for Each Item)处理每一条记录,例如:

 

javascript

复制编辑

const title = $json.title?.replace(/^#+\s*/, '') || ''; const text = $json.text?.replace(/\n/g, '<br>') || ''; const html = ` <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>${title}</title> </head> <body> <div class="container"> <h1>${title}</h1> <p>${text}</p> </div> </body> </html> `; return { html, options: { landscape: false, printBackground: true, format: 'A4' } };


📌 说明:

  • title.replace(/^#+\s*/, '') 是为了去掉 Markdown 标题的 # 符号。

  • text.replace(/\n/g, '<br>') 是为了将 Markdown 中的换行转换为 HTML 中的 <br>,否则段落会粘在一起。

  • 如果你的 text 中还包含图片或链接(如 ![img](url)[text](url)),你也可以进一步用正则进行转换处理。


✅ 最终用于 HTTP Request 节点(POST 到 Browserless):

配置如下:

  • Method: POST

  • URL: https://chrome.browserless.io/pdf?token=xxx

  • Body Content Type: JSON

  • Body:

    • html: 直接用 Code 节点输出的 html

    • options: 直接用 Code 节点输出的 options

要先集成才能用操控浏览器?Puppeteer/Playwright 集成const browser = await puppeteer.connect({ browserWSEndpoint: wss://chrome.browserless.io?token=YOUR_API_KEY });| HTTP 请求到哪里? 截图:​POST /screenshot PDF 生成:​POST /pdf 网页抓取:​POST /scrape

ChatGPT 说:

是的,您需要先集成 Puppeteer 或 Playwright,才能通过这些工具来操控浏览器。

1. 集成 Puppeteer/Playwright 进行浏览器操作

如果您选择通过 Puppeteer 或 Playwright 控制浏览器,您需要首先集成这些库。然后,通过连接到 Browserless 提供的 WebSocket 端点来控制浏览器实例:

代码示例(Puppeteer):
 

javascript

复制编辑

const puppeteer = require('puppeteer'); // 引入 Puppeteer 库 // 连接到 Browserless 提供的 WebSocket 端点 const browser = await puppeteer.connect({ browserWSEndpoint: `wss://chrome.browserless.io?token=YOUR_API_KEY` });

解释:
  • browserWSEndpoint:这是 Browserless 提供的 WebSocket 端点,用于连接到浏览器实例。

  • YOUR_API_KEY:您在 Browserless 控制台获得的 API 密钥。

同样,如果您使用 Playwright,连接方式类似:

 

javascript

复制编辑

const { chromium } = require('playwright'); const browser = await chromium.connect({ wsEndpoint: `wss://chrome.browserless.io?token=YOUR_API_KEY` });

这样就可以在您的脚本中操控无头浏览器了。

2. 通过 HTTP 请求进行操作

如果您不想通过 Puppeteer 或 Playwright 编写脚本,您还可以直接通过 HTTP 请求与 Browserless 进行交互。您可以使用普通的 HTTP 请求来实现浏览器截图、PDF 生成等功能。

HTTP 请求地址:
  • 截图POST /screenshot

  • PDF 生成POST /pdf

  • 网页抓取POST /scrape

3. 如何发送 HTTP 请求

您可以使用任何 HTTP 客户端(如 axiosfetch 等)来发送请求。以下是一个通过 axios 库发送 HTTP 请求的示例:

截图请求示例:
 

javascript

复制编辑

const axios = require('axios'); axios.post('https://chrome.browserless.io/screenshot', { url: 'https://example.com', token: 'YOUR_API_KEY' }) .then(response => { console.log('Screenshot saved:', response.data); }) .catch(error => { console.error('Error taking screenshot:', error); });

发送请求时需要:
  • url:要截图的网页 URL。

  • token:您的 API 密钥,用于认证。

PDF 生成请求:
 

javascript

复制编辑

axios.post('https://chrome.browserless.io/pdf', { url: 'https://example.com', token: 'YOUR_API_KEY' }) .then(response => { console.log('PDF generated:', response.data); }) .catch(error => { console.error('Error generating PDF:', error); });

网页抓取请求:
 

javascript

复制编辑

axios.post('https://chrome.browserless.io/scrape', { url: 'https://example.com', token: 'YOUR_API_KEY' }) .then(response => { console.log('Page scraped:', response.data); }) .catch(error => { console.error('Error scraping page:', error); });

总结

  1. 如果您使用 PuppeteerPlaywright,需要集成相关库并通过 WebSocket 与 Browserless 连接来操作浏览器。

  2. 如果您不想编写复杂脚本,也可以直接通过 HTTP 请求进行截图、PDF 生成、网页抓取等操作。每个操作都需要 POST 请求到对应的 HTTP 端点。

希望这些信息对您有所帮助!如果您有更多问题,随时可以提问。

4o

您说:

我希望的是可以别的用户点击我的网站的端点/发送信息 触发了我的后端/前端,我调用这个来操控他那边的浏览器可以实现吗?

ChatGPT 说:

是的,您可以实现通过用户点击您网站的端点或发送请求来触发后端与 Browserless 进行交互,从而控制其他用户的浏览器。这种操作通常涉及 前端触发请求后端操控浏览器。下面是如何实现这一目标的基本流程。

实现步骤

  1. 前端部分:
    前端通过按钮点击等操作向后端发送请求(例如一个 HTTP 请求),触发后端执行相应操作(如启动浏览器,生成截图或抓取网页等)。

  2. 后端部分:
    后端收到请求后,利用 Browserless API 或 WebSocket 控制浏览器的操作。

  3. Browserless 操作:
    后端使用 Browserless API 进行无头浏览器操作,如截图、PDF 生成或抓取网页内容。

详细流程

1. 前端请求发送

前端代码使用 fetchaxios 向后端发送请求,触发浏览器操作。

 

javascript

复制编辑

// 前端请求示例,用户点击按钮触发操作 document.getElementById("actionButton").addEventListener("click", () => { fetch("/api/trigger-browser-action", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ action: "screenshot", // 操作类型,截图或PDF等 url: "https://example.com" // 操作的目标网址 }) }) .then(response => response.json()) .then(data => { console.log("操作成功", data); }) .catch(error => { console.error("操作失败", error); }); });

2. 后端接收请求并调用 Browserless

后端接收到前端的请求后,可以根据传入的参数(例如 URL 和操作类型)来选择使用 Browserless 的不同 API。

示例:使用 Node.js 作为后端:
 

javascript

复制编辑

const express = require('express'); const axios = require('axios'); const app = express(); // 解析 JSON 请求体 app.use(express.json()); app.post('/api/trigger-browser-action', async (req, res) => { const { action, url } = req.body; try { let result; if (action === 'screenshot') { // 截图操作 result = await axios.post('https://chrome.browserless.io/screenshot', { url, token: 'YOUR_API_KEY' }); } else if (action === 'pdf') { // PDF 生成操作 result = await axios.post('https://chrome.browserless.io/pdf', { url, token: 'YOUR_API_KEY' }); } else { return res.status(400).send({ error: 'Invalid action type' }); } // 返回成功结果 res.json(result.data); } catch (error) { console.error("操作失败", error); res.status(500).send({ error: '操作失败' }); } }); // 启动服务器 app.listen(3000, () => { console.log('后端服务已启动,监听端口 3000'); });

3. 与 Browserless 交互

后端会根据请求的类型(例如截图、生成PDF等)通过 axios 请求 Browserless 的 API 端点:

  • 截图: POST /screenshot

  • 生成 PDF: POST /pdf

  • 抓取网页: POST /scrape

这些请求会触发 Browserless 在云端运行无头浏览器,完成截图、PDF 生成或网页抓取等任务。

4. 返回结果

后端会根据 Browserless API 的响应返回结果,前端可以展示操作结果(例如显示截图、PDF 或网页内容)。

例子:用户点击按钮,后端触发 Browserless 操作并返回结果

  • 用户在您的网站点击按钮

  • 前端发送请求到后端

  • 后端与 Browserless 交互(例如截图目标网站)

  • 后端返回操作结果给前端,前端展示截图、PDF 或相关内容

注意事项:

  1. 安全性: 您需要确保 API 密钥的安全性,并限制访问权限,防止恶意操作。

  2. API 限制: Browserless 可能会有调用频率限制,请确保您的应用设计足够容错。

  3. 异步操作: 无头浏览器操作可能需要一些时间,确保您的前端能够处理异步请求和显示操作结果。

总结

通过这种方式,您可以让其他用户通过前端操作触发后端调用 Browserless,实现浏览器的自动化操作。前端与后端通过 HTTP 请求进行交互,后端通过 Browserless API 来执行截图、PDF 生成或网页抓取等任务,最终将结果返回给前端展示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2374876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react-diff-viewer 如何实现语法高亮

前言 react-diff-viewer 是一个很好的 diff 展示库&#xff0c;但是也有一些坑点和不完善的地方&#xff0c;本文旨在描述如何在这个库中实现自定义语法高亮。 Syntax highlighting is a bit tricky when combined with diff. Here, React Diff Viewer provides a simple rend…

自定义prometheus exporter实现监控阿里云RDS

# 自定义 Prometheus Exporter 实现多 RDS 数据采集## 背景1. Prometheus 官网提供的 MySQL Exporter 对于 MySQL 实例只能一个进程监控一个实例&#xff0c;数据库实例很多的情况下&#xff0c;不方便管理。 2. 内部有定制化监控需求&#xff0c;RDS 默认无法实现&#xff0c;…

【计算机网络】--tcp三次握手

文章目录 示意图&#xff1a;抓包结果&#xff1a;第一次握手&#xff08;Client → Server&#xff09;第二次握手&#xff08;Server → Client&#xff09;第三次握手&#xff08;Client → Server&#xff09;为什么是三次握手 不是两次或者四次 示意图&#xff1a; 抓包结…

UI-TARS: 基于视觉语言模型的多模式代理

GitHub&#xff1a;https://github.com/bytedance/UI-TARS 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI 基于视觉语言模型&#xff08;Vision-Language Model&#xff09;的 GUI 代理应用&#xff0c;允许用户通过自然语言控制电脑操…

Spark SQL 运行架构详解(专业解释+番茄炒蛋例子解读)

1. 整体架构概览 Spark SQL的运行过程可以想象成一个"SQL查询的加工流水线"&#xff0c;从原始SQL语句开始&#xff0c;经过多个阶段的处理和优化&#xff0c;最终变成分布式计算任务执行。主要流程如下&#xff1a; SQL Query → 解析 → 逻辑计划 → 优化 → 物理…

【计算机网络】网络IP层

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f152; C 语言 | &#x1f310; 计算机网络 上篇文章&#xff1a;传输层协议TCP 下篇文章&#xff1a;数据链路层 文章摘要&#xff1…

一天学会Maven

一、Maven简介和快速入门 1.1 Maven介绍 Maven 是一款为 Java 项目构建管理、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了开发效率和质量。 总结&#xff1a;Maven就是一个软件&#xf…

变量函数实战:高保真APP原型“发票页面”动态交互教程

变量函数是高保真交互原型设计中常见的高级交互功能&#xff0c;能够避免重复复制与手动修改页面元素和逻辑标注&#xff0c;让演示更有真实体验感。本文分享一个高保真APP交互原型页面的实操案例&#xff0c;结合原型设计工具中的变量函数与逻辑判断功能&#xff0c;手把手教你…

Spring Boot 3 + Undertow 服务器优化配置

优化背景 当你的application需要支持瞬时高并发的时候&#xff0c;tomcat已经不在是最优的选择&#xff0c;我们可以改为Undertow&#xff0c;并对其进行优化。 Undertow 是一个轻量级的、高性能的Java Web 服务器&#xff0c;由JBoss 开发并开源。它是基于非阻塞&#xff08;…

7系列 之 OSERDESE2

背景 《ug471_7Series_SelectIO.pdf》介绍了Xilinx 7 系列 SelectIO 的输入/输出特性及逻辑资源的相关内容。 第 1 章《SelectIO Resources》介绍了输出驱动器和输入接收器的电气特性&#xff0c;并通过大量实例解析了各类标准接口的实现。 第 2 章《SelectIO Logic Resource…

vue3+flask+sqlite前后端项目实战

基础环境安装 pycharm 下载地址&#xff1a; https://www.jetbrains.com/zh-cn/pycharm/download/?sectionwindows vscode 下载地址 https://code.visualstudio.com/docs/?dvwin64user python 下载地址 https://www.python.org/downloads/windows/ Node.js&#xff08;含npm…

Java 线程的堆栈跟踪信息

Java 线程的堆栈跟踪信息&#xff0c;展示了线程的当前状态和执行位置。以下是详细解释&#xff1a; 线程基本信息 "Thread-0" #16 prio5 os_prio0 cpu0.00ms elapsed16.29s tid0x00000243105a4130 nid0x5384 waiting on condition [0x0000007687ffe000]线程名称…

【计算机视觉】OpenCV实战项目:Long-Exposure:基于深度学习的长时间曝光合成技术

Long-Exposure&#xff1a;基于深度学习的长时间曝光合成技术 项目概述与技术背景项目核心功能技术原理 环境配置与安装硬件要求建议详细安装步骤可选组件安装 实战应用指南1. 基础使用&#xff1a;视频转长曝光2. 高级模式&#xff1a;自定义光轨合成3. 批量处理模式 技术实现…

传输层协议UDP和TCP

传输层协议UDP和TCP 1、UDP2、TCP2.1、TCP协议段格式2.2、确认应答(ACK)机制2.3、超时重传机制2.4、连接管理机制2.5、理解CLOSE_WAIT状态2.6、理解TIME_WAIT状态2.7、流量控制2.8、滑动窗口2.9、拥塞控制2.10、延迟应答2.11、捎带应答2.12、面向字节流2.13、粘包问题2.14、TCP…

浅谈大语言模型原理

1.反向传播算法 背景 反向传播算法是当前深度学习的核心技术。 神经网络 x是输入&#xff0c;o是输出&#xff0c;w是需要训练的参数&#xff08;w有初始值&#xff09;三层全连接的神经网络&#xff1a;输入层、隐藏层、输出层 激活函数 f ( x ) 1 1 x − 1 f(x)\frac…

Clickhouse 迁移到 Doris 的最佳实践

一、引言 在将数据从 Clickhouse 迁移到 Apache Doris / SelectDB Cloud 的过程中&#xff0c;涉及表结构迁移、查询语句迁移以及数据迁移等多个关键环节。每个环节都有其复杂性和需要注意的细节&#xff0c;本文将详细介绍这些内容及对应的最佳实践方法。 二、表结构迁移 &…

WebSocket的原理及QT示例

一.WebSocket 介绍 1.概述 WebSocket 是一种在单个 TCP 连接上进行全双工通讯的协议&#xff0c;它在 2011 年被 IETF 定为标准 RFC 6455&#xff0c;并由 RFC7936 补充规范。与传统的 HTTP 协议不同&#xff0c;WebSocket 允许服务器和客户端之间进行实时、双向的数据传输&a…

vue3:十二、图形看板- echart图表-柱状图、饼图

一、效果 如图展示增加了饼图和柱状图,并且优化了浏览器窗口大小更改,图表随着改变 二、 饼图 1、新建组件文件 新增组件EchartsExaminePie.vue,用于存储审核饼图的图表 2、写入组件信息 (1)视图层 写入一个div,写入变量chart和图表宽高 <template><div ref…

2025年best好用的3dsmax插件和脚本

copitor 可以从一个3dsmax场景里将物体直接复制到另一个场景中 Move to surface 这个插件可以将一些物体放到一个平面上 instancer 实体器&#xff0c;举例&#xff1a;场景中有若干独立的光源&#xff0c;不是实体对象&#xff0c;我们可以使用instancer将他变成实体。 paste …

HAProxy + Keepalived + Nginx 高可用负载均衡系统

1. 项目背景 在现代Web应用中&#xff0c;高可用性和负载均衡是两个至关重要的需求。本项目旨在通过HAProxy实现流量分发&#xff0c;通过Keepalived实现高可用性&#xff0c;通过Nginx提供后端服务。该架构能够确保在单点故障的情况下&#xff0c;系统仍然能够正常运行&#…