视觉分析开发范例:Puppeteer截图+计算机视觉动态定位

article/2025/8/26 22:16:44

爬虫代理

一、选型背景:传统爬虫已无力应对的视觉挑战

在现代互联网环境中,尤其是小红书、抖音、B站等视觉驱动型平台,传统基于 HTML 的爬虫已经难以满足精准数据采集需求:

  • 内容加载由 JS 动态触发,难以直接解析 HTML;
  • 视频、图片等关键元素无法通过 DOM 提取;
  • 页面元素位置随屏幕尺寸、渲染行为而变化。

为此,「视觉爬虫」应运而生。通过浏览器自动化 + 截图 + 图像识别,可以突破传统爬虫的局限,抓取“人眼所见”的页面内容。

本文聚焦在 Puppeteer 驱动浏览器自动化,并结合计算机视觉实现页面元素的动态定位与信息提取。


二、技术对比维度:DOM vs. 视觉爬虫

对比维度传统 DOM 爬虫视觉爬虫(Puppeteer + CV)
页面解析方式HTML 文档结构可视化渲染页面截图
定位元素依据CSS/XPath/Selector图像特征(坐标、形状、文字)
动态内容支持差,依赖额外执行 JS强,浏览器真实执行环境
稳定性页面结构变动易失效图像特征变化小,较稳
技术难度中高,涉及计算机视觉处理

三、代码对比示例:关键词搜索+视频截图+视觉定位

下面通过 Puppeteer + Node.js 实现小红书视频搜索 + 播放 + 屏幕截图 + 图像识别定位关键区域,并设置代理等提供采集成功率。

💡 目标任务:搜索关键词“旅行vlog”,点击第一个视频并截图视频播放页,对播放按钮等进行视觉定位。

项目依赖

npm install puppeteer-extra puppeteer-extra-plugin-stealth tesseract.js sharp

核心代码示例

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
const tesseract = require('tesseract.js'); // 用于图像识别
const sharp = require('sharp');            // 图像裁剪处理puppeteer.use(StealthPlugin());(async () => {// 爬虫代理配置(亿牛云示例 www.16yun.cn)const proxyHost = 'proxy.16yun.cn';const proxyPort = '31000';const proxyUser = '16YUN';const proxyPass = '16IP';// Puppeteer 启动带代理const browser = await puppeteer.launch({headless: false,args: [`--proxy-server=http://${proxyHost}:${proxyPort}`,],});const page = await browser.newPage();// 设置 User-Agent 和 Cookie(模拟真实用户)await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36');await page.setCookie({name: 'xhsTracker',value: 'your_cookie_value',domain: '.xiaohongshu.com'});// 设置代理认证await page.authenticate({username: proxyUser,password: proxyPass,});// 打开小红书搜索页面const keyword = '旅行vlog';await page.goto(`https://www.xiaohongshu.com/search_result?keyword=${encodeURIComponent(keyword)}`, {waitUntil: 'networkidle2'});await page.waitForTimeout(3000); // 等待页面加载// 点击第一个视频内容const videoSelector = 'div.video-feed-container div.feed-video-card:first-child';await page.waitForSelector(videoSelector);await page.click(videoSelector);// 等待视频播放页加载await page.waitForTimeout(5000);// 截图当前页面const screenshotPath = 'screenshot.png';await page.screenshot({ path: screenshotPath, fullPage: true });console.log('页面截图已保存:', screenshotPath);// 对截图进行图像识别(找出“暂停/播放按钮”等图标)const croppedPath = 'video_button_crop.png';// 示例:裁剪中间区域(大概率是播放按钮)await sharp(screenshotPath).extract({ left: 500, top: 300, width: 300, height: 200 }) // 可按实际屏幕调整.toFile(croppedPath);console.log('已裁剪截图区域:', croppedPath);// 使用 Tesseract 识别该区域的文本(可替换为模板匹配找图标)const result = await tesseract.recognize(croppedPath, 'eng', {logger: m => console.log(m)});console.log('识别结果:', result.data.text);await browser.close();
})();

四、场景推荐

适用场景推荐方式
采集结构化信息(如商品价格)传统 DOM 爬虫足够
视频截图、播放状态分析Puppeteer + CV 更适合
页面强 JS 渲染(如小红书)Puppeteer 更有优势
动态内容 + 图像定位Puppeteer + 图像识别最强

五、结论:让“爬虫看见”比“爬虫看懂”更重要

随着视觉化内容成为主流,“看见”页面比“理解 HTML”更关键。Puppeteer 结合计算机视觉不仅可以真实再现页面内容,还能识别图像中的元素,为复杂场景提供强有力的支持。

尤其在小红书等平台,传统 DOM 爬虫几乎“寸步难行”,而视觉爬虫打开了新一代内容采集的大门。未来,结合 OCR、模板匹配、视频分析的视觉爬虫,将成为数据采集的新范式。


http://www.hkcw.cn/article/ggYlWDEAyT.shtml

相关文章

Java 开发上门家政系统源码:全流程数字化管理,适配家政公司 / 个体户接单派单

家政服务订单管理混乱、人员调度低效、客户留存率低?基于 Java 开发的上门家政系统源码,凭借其强大的稳定性、灵活的扩展性和全流程数字化管理能力,为家政行业提供了一套高效、低成本的解决方案,实现从接单、派单到服务结算的全链…

java24

1.双列集合Map定义 collection和Map都自有contains方法 把实现类对象赋值给接口类对象属于多态的一种,但是这样不能使用实现类里面的特殊方法和重写方法 写好的API里面好像只有数组的打印值是地址值 2.Map遍历方式 Entry是Map接口里面的一个内部接口,所…

VSCode的下载与安装(2025亲测有效)

目录 0 前言1 下载2 安装3 后记 0 前言 丫的,谁懂啊,尝试了各种办法不行的话,我就不得不拿出我的最后绝招了,卸载,重新安装,我经常要重新安装,所以自己写了一个博客,给自己&#xf…

深入了解linux系统—— 库的制作和使用

什么是库? 库,简单来说就是现有的,成熟的代码; 就比如我们使用的C语言标准库,我们经常使用输入scanf和输出printf,都是库里面给我们实现好的,我们可以直接进行服用。 库呢又分为静态库和动态…

VoltAgent 是一个开源 TypeScript 框架,用于构建和编排 AI 代理

​一、软件介绍 文末提供程序和源码下载 VoltAgent 是一个开源 TypeScript 框架,用于构建和编排 AI 代理 二、什么是 VoltAgent? AI 代理框架提供了构建由自主代理提供支持的应用程序所需的基础结构和工具。这些代理通常由大型语言模型 (&am…

弹性公网IP的五大核心优势解析

在云服务架构中,弹性公网IP(EIP)已成为现代企业网络部署的核心组件。与传统固定IP相比,它通过独特的技术机制解决了动态环境下的公网访问难题。以下五大核心优势决定了其不可替代的价值: 一、动态绑定的灵活性 弹性公…

分布式数据库备份实践

在分布式备份中可以采取两种方式进行备份,一种是采用手动编写backup.yml文件进行备份,另外一种是吧备份过程交给备份工具自动执行。如果需要个性化进行备份,建议采用手动编写备份文件方式进行备份。 以下是针对两种备份方式的实践&#xff1a…

社群分享:义乌|杭州电商|店群卖家,私域鱼塘运营的排单系统开源|私域鱼塘运营|返款软件开源

熟悉东哥的朋友都知道,我自己也运营一个电商社群,主要是针对玩私域|鱼塘的电商玩家。 在当前电商环境下,社群分享型电商、店群卖家及私域鱼塘运营者,面临着日益复杂的订单管理和客服调度问题。传统的人工处理不仅效率低…

一键提取Office内图片的工具

软件介绍 OfficeImagesExtractor是一款专门用于提取office文档里面图片的软件。 软件开发 这款软件是由吾爱大佬namejm专门开发的。 软件使用方法 该软件使用起来非常简单。用户只需要把文件拖入到软件里,再设置好保存目录即可。 支持文件格式 这款软件能提取的…

NVIDIA英伟达AI图片视频内容描述总结软件describe-anything整合包

和大家分享一个英伟达联合其他大学开发的一款应用describe-anything,该应用可以通过AI识别分析并详细描述图片视频中指定区域物体内容,我基于最新版制作了免安装一键启动整合包,下载链接在文章末尾。 describe-anything介绍 Describe Anythi…

农村土地承包经营权二轮延包—归户表

"作为二轮延包公示后的一个确认方式,归户表还是要写一下的。归户表跟摸底表很相似,编程方面,用到的python库,摸底表用py-docx多一些,归户表更多用的pywin32,py-docx对于word无依赖,所以摸底…

基于vue框架的独居老人上门护理小程序的设计r322q(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,护理人员,服务预约,服务评价,服务类别,护理项目,请假记录 开题报告内容 基于Vue框架的独居老人上门护理小程序的设计开题报告 一、研究背景与意义 (一)研究背景 随着社会老龄化的加剧,独居老…

window11系统 使用GO语言建立TDengine 连接

目录 1、安装GCC、TDengine-client 1、github下载mingw64 软件包 2、解压指定目录、配置环境变量 3、检验gcc是否安装成功 4、安装TDengine-client 2、配置go环境变量 3、配置Goland 系统变量、重启Goland(该软件自己也有系统变量,有时候会和win…

OpenCV计算机视觉实战(9)——阈值化技术详解

OpenCV计算机视觉实战(9)——阈值化技术详解 0. 前言1. 全局阈值与自适应阈值2. Otsu 算法3. 实战案例:文档扫描中的二值化处理4. 算法对比小结系列链接 0. 前言 在图像处理领域,阈值化 (Binarization) 技术就像一把魔术剪刀&…

Java开发经验——阿里巴巴编码规范实践解析6

摘要 本文深入解析了阿里巴巴编码规范在数据库设计和Java开发中的实践应用。详细阐述了数据库字段命名、类型选择、索引命名等规范,以及Java POJO类的对应规范。强调了字段命名的重要性,如布尔字段命名规则、表名和字段名的命名禁忌等。同时&#xff0c…

华为防火墙NAPT配置

1.实验拓扑 2.实验配置 [SW1]dis cu # sysname SW1 # vlan batch 10 20 # interface Vlanif10ip address 192.168.10.254 255.255.255.0 # interface Vlanif20ip address 192.168.20.253 255.255.255.0 # interface GigabitEthernet0/0/1port link-type accessport default vl…

HTML Day03

Day03 0. 引言1. CSS1.1 CSS的3种使用方法1.2 内联样式1.3 内部样式表1.4 外部CSS文件 2. 图像3. 表格3.1单元格间距和单元格边框 4. 列表4.1 有序表格的不同类型4.2 不同类型的无序表格4.3 嵌套列表 5. 区块6. 布局6.1 div布局6.2 表格布局 0. 引言 HELLO ^ _ ^大家好&#xf…

【Redis】背景知识 + 环境搭建

背景知识 环境搭建 一. Redis 特性二. Redis 应用场景三. 环境搭建四. Redis 客户端介绍五. Redis 总结 Redis 是一个在内存中存储数据的中间件,用于作为数据库,用于作为数据缓存,用于作为消息队列,在分布式系统中能够大展拳脚。…

ubuntu 22.04 编译安装nignx 报错 openssl 问题

前言 Ubuntu 20.04 中安装 Nginx (通过传包编译的方式)、开启关闭防火墙、开放端口号 在ubuntu 22.04.3 服务器上照着上面的文章 通过传包编译的方式安装nginx-1.18.0 的时候报错,报错内容如下: src/event/ngx_event_openssl.c: In function ‘ngx_ssl…

【第4章 图像与视频】4.1 图像的绘制

文章目录 前言在 Canvas 之中绘制图像drawImage() 方法的用法 前言 drawImage() 方法可以将一幅图像的整体或某个部分绘制到 canvas 内的任何位置上,并且允许开发者在绘制过程中对图像进行缩放。也可以将图像绘制在离屏 canvas 中,这样的话就可以对图像…