当前位置: 首页 > news >正文

在 Docker 中部署无头 Chrome:在 Browserless 中运行

什么是 Browserless?

Browserless 是一款基于云的浏览器解决方案,旨在实现高效的浏览器自动化、网页抓取和测试。

它利用 Nstbrowser 的指纹库,实现随机指纹切换,确保流畅的数据收集和自动化。得益于其强大的云基础设施,Browserless 简化了对多个浏览器实例的访问,从而更轻松地管理自动化任务。

您对网页抓取和 Browserless 有什么奇思妙想和疑问吗?
让我们看看其他开发者在 Discord 和 Telegram 上分享了什么!

Browserless 如何运作?

Browserless 通过提供一个无头浏览器服务来运作,允许用户在无需图形界面的情况下执行浏览器自动化任务。

它使开发者能够通过 API 运行基于浏览器的任务,例如网页抓取、自动化测试和渲染网页。通过在云环境中运行,Browserless 简化了浏览器自动化过程,无需手动设置或维护浏览器基础设施。

Browserless 支持 Puppeteer 和 Playwright 等流行库,允许用户以编程方式与网站交互。其基于 Docker 的基础设施支持可扩展和灵活的部署,使其适用于小型和企业级应用程序。它可以集成到工作流程中,以自动化重复性任务或从需要浏览器的网站收集数据。

如何在 Docker 中部署 Headlesschrome?

第 1 步:获取您的 API 密钥

为了获得更好的体验,请在 Nstbrowser 上创建一个新帐户。

使用您注册的信息登录 Nstbrowser 客户端。成功登录后,不要忘记从 API 菜单中生成您的唯一 API 密钥!

API 密钥

第 2 步:获取 Nstbrowserless 镜像并运行

您需要获取 API Key 并替换以下 {YOUR_API_KEY} 部分。

docker run -it -e TOKEN={YOUR_API_KEY} -e SERVER_PORT=8848 -p 8848:8848 --name nstbrowserless nstbrowser/browserless:0.0.1-beta

用您的 API 密钥替换

如何在 Docker 容器中使用 Browserless?

您可以通过 Puppeteer、Playwright、Chromedp 或其他 CDP 库连接到无头浏览器,以实现无头浏览器的操作和截图功能。

Puppeteer

Puppeteer 是一个 Node.js 库,它提供了一个高级 API 来控制 Chrome 浏览器,并支持通过 DevTools 协议进行操作。

安装 Puppeteer

npm install puppeteer

准备 puppeteer.js 文件

const puppeteer = require("puppeteer");(async () => {const host = "127.0.0.1:8848"; // 替换为您的 Docker 容器 IPconst browserWSEndpoint = `ws://${host}/ws/connect`;try {const browser = await puppeteer.connect({browserWSEndpoint: browserWSEndpoint,});const page = await browser.newPage();await page.goto("https://google.com", { waitUntil: 'networkidle2' }); // 等待网络空闲await page.screenshot({ path: "screenshot.png", fullPage: true }); // 拍摄全页面截图console.log("Screenshot taken and saved as screenshot.png");await browser.close(); // 关闭浏览器连接} catch (err) {console.error("Error occurred:", err);}
})();

运行您的脚本

node puppeteer.js

运行后,您可以看到无头浏览器按我们预期工作:

无头浏览器工作

现在,项目已完成,您可以找出生成的 screenshot.png

Playwright CDP

Playwright 是一个用于 Web 测试和自动化的框架,允许通过单个 API 测试 Chrome 浏览器。

安装 Playwright

npm install playwright

准备 playwright.js 文件

import { chromium } from "playwright";(async () => {const host = "127.0.0.1:8848"; // 替换为您的 Docker 容器 IPconst browserWSEndpoint = `ws://${host}/ws/connect`;try {const browser = await chromium.connectOverCDP(browserWSEndpoint);const context = await browser.newContext();const page = await context.newPage();await page.goto("https://www.google.com/", { waitUntil: 'networkidle' }); // 等待网络空闲await page.screenshot({ path: "screenshot.png" }); // 拍摄全页面截图console.log("Screenshot taken and saved as screenshot.png");await browser.close(); // 关闭浏览器连接} catch (err) {console.error("Error occurred:", err);}
})();

运行您的脚本

node playwright.js

与 Puppeteer 相同,运行后,您也可以找出生成的 screenshot.png

总结

Browserless 使网页抓取和自动化变得容易。在本博客中,您可以看到:

  • 在 Docker 中部署 headlesschrome 的有效方法。
  • 在 Docker 容器中使用 Browserless 的详细步骤。
    在容器中运行浏览器提供了很大的灵活性和可扩展性。它也比传统的基于 VM 的实例便宜得多。

相关文章:

在 Docker 中部署无头 Chrome:在 Browserless 中运行

什么是 Browserless? Browserless 是一款基于云的浏览器解决方案,旨在实现高效的浏览器自动化、网页抓取和测试。 它利用 Nstbrowser 的指纹库,实现随机指纹切换,确保流畅的数据收集和自动化。得益于其强大的云基础设施&#xf…...

Meta-Learning数学原理

文章目录 什么是元学习元学习的目标元学习的类型数学推导1. 传统机器学习的数学表述2. 元学习的基本思想3. MAML 算法推导3.1 元任务设置3.2 内层优化:任务级别学习3.3 外层优化:元级别学习3.4 元梯度计算3.5 最终更新规则 4. 算法合并5. 理解 MAML 的优…...

【图像匹配】基于SURF算法的图像匹配,matlab实现

博主简介:matlab图像代码项目合作(扣扣:3249726188) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于基于SURF算法的图像匹配,用matlab实现。 一、案例背景和算法介绍 前…...

RocketMQ实战与集群架构详解

目录 一、MQ简介 MQ的作用主要有以下三个方面 二、RocketMQ产品特点 1、RocketMQ介绍 2、RocketMQ特点 三、RocketMQ实战 1、快速搭建RocketMQ服务 2、快速实现消息收发 1. 命令行快速实现消息收发 2. 搭建Maven客户端项目 3、搭建RocketMQ可视化管理服务 4、升级分…...

docker容器中的内存占用高的问题分析

文章目录 问题描述原因分析分析1分析2验证猜想 结论和经验 问题描述 运维新增对某服务的监控后发现:内存不断上涨的现象。进一步确认,是因为有多个导出日志操作导致的内存上涨问题。 进一步的测试得出的结果是:容器刚启动是占用内存约为50M…...

纯血鸿蒙NEXT常用的几个官方网站

一、官方文档 https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/Readme-CN.md刚入门查看最多的就是UI开发模块,首先要熟悉组件使用 二、官方API参考 https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/development-i…...

A股上市公司企业创新能力、质量、效率-原始数据+dofile+结果(2006-2023年)

上市公司的创新能力体现在其不断研发新技术、新产品和服务的能力上,这是企业保持竞争优势的关键;质量则是指公司所提供的产品或服务达到高标准的程度,高质量是赢得客户信任和市场份额的基础;效率则涵盖了生产运营中的资源利用程度…...

Selenium:开源自动化测试框架的Java实战解析

背景 在软件开发领域,随着Web应用程序的日益复杂和快速迭代的需求,传统的手动测试方法已经无法满足高效、全面的测试需求。自动化测试作为一种高效、稳定的测试手段,逐渐成为软件开发流程中不可或缺的一环。Selenium,作为一款开源…...

搜索功能技术方案

1. 背景与需求分析 门户平台需要实现对服务信息的高效查询,包括通过关键字搜索服务以及基于地理位置进行服务搜索。面对未来可能的数据增长和性能需求,选择使用 Elasticsearch 来替代 MySQL 的全文检索功能。这一选择的背景与需求可以总结为以下几点&am…...

硬件体系架构的学习

硬件体系架构的学习 RISC全称Reduced Instruction Set Compute,精简指令集计算机; CISC全称Complex Instruction Set Computers,复杂指令集计算机。 SOC片上系统概念 System on Chip,简称Soc,也即片上系统。从狭义…...

【与C++的邂逅】--- C++的IO流

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 与C的邂逅 本篇博客我们来了解C中io流的相关知识。 🏠 C语言输入输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 sc…...

【C++ Primer Plus习题】16.8

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include <set> #includ…...

基于stm32的四旋翼无人机控制系统设计系统设计与实现

文章目录 前言资料获取设计介绍功能介绍设计程序 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业…...

【原理图PCB专题】案例:原理图设计检查为什么要检查全局网络?

本案例发生在新人的PCB设计文件中,当然就算硬件老人们,其实只要不注意也很容易出现这种全局网络乱用的问题。 如下所示是给新人的接口参考图纸,要求使用嘉立创绘制16个相同的接口做一个工装板。同时还要增加单片机实现切换控制功能。可以看到座子的24个管脚中使用到了3.3V、…...

Java 之 IO流

一、IO流概述 在计算机编程中&#xff0c;IO流&#xff08;Input/Output Stream&#xff09;是处理设备间数据传输的关键技术。简单来说&#xff0c;IO流就是以流的方式进行输入输出&#xff0c;数据被当作无结构的字节序或字符序列来处理。在Java等编程语言中&#xff0c;IO流…...

计算机毕业设计 健身房管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件

uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件 日历期间、年期间、月期间及时分期间组件在不同的应用场景中发挥着重要的作用。这些组件通常用于表单、应用程序或网站中&#xff0c;以方便用户输入和选择特定的日期和时间范围。以下是这些组件的主要作用&a…...

GAMES101(10~11节,几何)

Geometry implicit隐式几何表示&#xff1a; 函数f(x,y,z)&#xff1a; 根据函数fn描述几何&#xff0c;遍历所有空间内 的点&#xff0c;如果带入xyz到函数f(x,y,z)结果0那就绘制这个点 如果xyz求值结果>0表示在几何外&#xff0c;0在表面,<0在几何内 构造几何csg(…...

家电制造的隐形守护者:矫平机确保材料完美无瑕

在家电制造业中&#xff0c;产品的美观和耐用性是消费者选择的关键因素。然而&#xff0c;在生产过程中&#xff0c;材料的翘曲问题往往成为影响产品质量的隐形杀手。幸运的是&#xff0c;矫平机的出现&#xff0c;为家电制造商提供了一个有效的解决方案&#xff0c;确保每一件…...

软件设计师考纲及笔记

1. 计算机系统知识&#xff08;分值占比&#xff1a;10%&#xff0c;重要程度&#xff1a;★★★★☆&#xff09; 1.1 计算机系统基础 计算机组成&#xff1a; 中央处理器&#xff08;CPU&#xff09;&#xff1a;计算机的核心部件&#xff0c;执行指令并处理数据。内存&…...

PyTorch版本冲突?手把手教你用conda解决torch和torchvision依赖问题(附常见错误排查)

PyTorch版本冲突&#xff1f;手把手教你用conda解决torch和torchvision依赖问题&#xff08;附常见错误排查&#xff09; 深度学习开发中&#xff0c;PyTorch环境的配置往往是项目启动的第一道门槛。许多开发者在安装torch和torchvision时都遇到过令人头疼的版本冲突问题——明…...

为什么你的视觉检测准确率卡在92.7%?(揭秘工业现场3类未标注异常数据导致的模型过拟合代码根源)

第一章&#xff1a;视觉检测准确率瓶颈的工业现场真相在实际产线部署中&#xff0c;视觉检测模型在实验室达到99.2%的mAP&#xff0c;落地后却频繁出现漏检与误报——这不是算法缺陷&#xff0c;而是工业现场多维干扰叠加的真实映射。光照波动、工件表面反光、传送带抖动、镜头…...

Rustup离线安装完整指南:在没有网络的环境中搭建Rust开发平台

Rustup离线安装完整指南&#xff1a;在没有网络的环境中搭建Rust开发平台 【免费下载链接】rustup The Rust toolchain installer 项目地址: https://gitcode.com/gh_mirrors/ru/rustup 你是否曾经需要在完全隔离的网络环境中安装Rust开发工具链&#xff1f;&#x1f91…...

必收藏!大模型风口下,程序员/小白必看的就业方向与岗位解析

这两年大模型的热度可谓居高不下&#xff0c;堪称技术圈的“全民热点”&#xff0c;无论是深耕传统技术栈的开发者——比如Java、C工程师、前端开发者、数据分析师、架构师&#xff0c;还是刚入门的技术小白&#xff0c;都在主动“卷”大模型相关技能&#xff0c;生怕被行业迭代…...

告别百度云!手把手教你从Keil官网下载安装STM32全系列芯片支持包(附离线包备份技巧)

从Keil官网高效获取STM32芯片支持包的完整指南 为什么需要直接从Keil官网获取芯片支持包 在嵌入式开发领域&#xff0c;STM32系列微控制器因其出色的性能和丰富的生态系统而广受欢迎。然而&#xff0c;许多开发者在搭建开发环境时&#xff0c;往往习惯于从第三方网盘获取Keil M…...

游戏外挂开发实战:用C#和Cheat Engine读取内存实现自动补血(附完整代码)

游戏内存数据解析与自动化操作的技术实现 在数字娱乐领域&#xff0c;游戏开发与逆向工程一直是两个相互促进的技术方向。了解游戏内部数据结构和运行机制&#xff0c;不仅有助于开发者优化产品&#xff0c;也能帮助技术爱好者深入理解计算机系统的工作原理。本文将探讨一种通过…...

为什么XianyuAutoAgent的日志监控是AI客服稳定运行的守护神

为什么XianyuAutoAgent的日志监控是AI客服稳定运行的守护神 【免费下载链接】XianyuAutoAgent 智能闲鱼客服机器人系统&#xff1a;专为闲鱼平台打造的AI值守解决方案&#xff0c;实现闲鱼平台724小时自动化值守&#xff0c;支持多专家协同决策、智能议价和上下文感知对话。 …...

C# dynamic 关键字实战:5个真实场景教你如何优雅处理动态数据

C# dynamic 关键字实战&#xff1a;5个真实场景教你如何优雅处理动态数据 在C#开发中&#xff0c;我们常常会遇到需要处理动态数据的场景——可能是来自外部API的JSON响应、Excel表格中的不确定结构&#xff0c;或是与Python等动态语言交互时的数据类型转换。传统的静态类型系统…...

水墨江南模型实战:为短视频自动生成中式美学文案与字幕

水墨江南模型实战&#xff1a;为短视频自动生成中式美学文案与字幕 1. 引言&#xff1a;当短视频创作遇上“水墨江南” 如果你是做国风、文旅、历史类短视频的创作者&#xff0c;下面这个场景你一定不陌生&#xff1a;花了大半天时间拍摄和剪辑了一段精美的江南水乡片段&…...

ubuntu20.04设置开机自动登录适用与GNOME桌面环境

默认arm版本ubuntu20.04未安装nano编辑器&#xff0c;so我们要安装一下&#xff0c; sudo apt update && sudo apt install nano设置方法&#xff1a; sudo nano /etc/gdm3/custom.conf添加或修改&#xff0c;用户名区分大小写。 AutomaticLoginEnableTrue AutomaticLo…...