Flutter for OpenHarmony:puppeteer 远程控制 Chrome 浏览器,实现截图与自动化操作(Headless Chrome 适配) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:puppeteer 远程控制 Chrome 浏览器,实现截图与自动化操作(Headless Chrome 适配) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

请添加图片描述

前言

puppeteer 是一个 Node.js 库的 Dart 移植版,它提供了一套高级 API 来通过 DevTools 协议控制 Chrome 或 Chromium。通常用于爬虫、生成 PDF、截图或自动化测试。

在 OpenHarmony 移动设备上,直接启动一个 Headless Chrome 进程是不现实的(受限于系统权限和架构)。但是,我们可以利用 puppeteer 的远程连接能力,让 OpenHarmony 应用控制部署在服务器或局域网 PC 上的浏览器实例,实现强大的远程自动化功能。本文将介绍如何在 OpenHarmony 环境下使用 puppeteer 连接并控制远程浏览器。

一、puppeteer 简介与适用场景

1.1 核心功能

  • 生成截图与 PDF:将网页转换为图片或文档。
  • 爬取内容:抓取单页应用(SPA)的动态渲染内容。
  • 自动化操作:模拟键盘输入、表单提交、UI 点击。

1.2 OpenHarmony 适配策略

由于移动端无法直接运行 Chrome 二进制文件,我们采用 Client-Server 模式

  1. Server (PC/云端): 运行 Chrome 并开启远程调试端口 (--remote-debugging-port)。
  2. Client (OpenHarmony): 使用 puppeteer.connect 连接至 Server。

远程浏览器 (PC/Server)OpenHarmony 应用远程浏览器 (PC/Server)OpenHarmony 应用启动时开启远程调试端口 (--remote-debugging-port)puppeteer.connect(ws://ip:port) - 建立 Websocket 连接newPage() - 新建页面page.goto(url) - 打开目标网页页面加载完成page.screenshot() - 执行自动化截图返回图片字节流 (bytes)在应用内显示图片内容

二、环境准备与配置

2.1 添加依赖

pubspec.yaml 中:

dependencies:puppeteer: ^3.20.0 

2.2 服务端配置(PC端)

你需要在一台电脑或服务器上启动 Chrome,允许远程调试。

# macOS 示例 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --remote-debugging-port=9222\ --headless \ --disable-gpu 

确保 OpenHarmony 设备能 ping 通这台机器的 IP(例如 192.168.1.100)。

在这里插入图片描述

三、核心 API 详解与示例

3.1 示例一:连接远程浏览器

在 OpenHarmony 应用中连接到远程 Chrome 实例。

import'package:puppeteer/puppeteer.dart';Future<void>connectToBrowser()async{// 替换为你 PC 的 IP 地址final browser =await puppeteer.connect( browserUrl:'http://192.168.1.100:9222',);print('已连接到浏览器版本: ${await browser.version}');// 记得关闭连接,但通常不关闭远程浏览器本身await browser.disconnect();}
在这里插入图片描述

3.2 示例二:远程截图

让远程浏览器打开网页截图,并将图片数据返回给 OpenHarmony 显示。

import'dart:typed_data';import'package:flutter/material.dart';import'package:puppeteer/puppeteer.dart';Future<Uint8List>takeScreenshot(String url)async{final browser =await puppeteer.connect( browserUrl:'http://192.168.1.100:9222',);final page =await browser.newPage();await page.goto(url, wait:Until.networkIdle);// 截取全屏final screenshot =await page.screenshot(fullPage:true);await page.close();await browser.disconnect();return screenshot;// 返回二进制图片数据}
在这里插入图片描述

3.3 示例三:生成 PDF

类似截图,生成 PDF 并保存(需配合文件权限)。

Future<void>generatePdf(String url)async{final browser =await puppeteer.connect( browserUrl:'http://192.168.1.100:9222',);final page =await browser.newPage();await page.goto(url);final pdfData =await page.pdf(format:PaperFormat.a4);print('PDF 生成成功,大小: ${pdfData.length} 字节');await page.close();await browser.disconnect();}

四、OpenHarmony 平台适配

4.1 网络权限

连接远程调试端口需要 Internet 权限。在 module.json5 中配置:

"requestPermissions":[{"name":"ohos.permission.INTERNET"}]

4.2 异常处理

移动网络不稳定,连接远程实例时极易超时。务必添加 try-catch 和超时设置。

try{await puppeteer.connect(..., timeout:Duration(seconds:10));}catch(e){// 提示用户检查网络或服务状态}

五、完整实战示例:网页截图查看器

本示例是一个 OpenHarmony 应用,用户输入网址,点击按钮后,应用控制局域网内的 Chrome 截图并显示在屏幕上。

5.1 示例代码

import'dart:typed_data';import'package:flutter/material.dart';import'package:puppeteer/puppeteer.dart';voidmain(){runApp(constMaterialApp(home:PuppeteerDemoPage()));}classPuppeteerDemoPageextendsStatefulWidget{constPuppeteerDemoPage({super.key});@overrideState<PuppeteerDemoPage>createState()=>_PuppeteerDemoPageState();}class _PuppeteerDemoPageState extendsState<PuppeteerDemoPage>{finalTextEditingController _urlController =TextEditingController(text:'https://www.baidu.com');// ⚠️ 请根据实际情况修改调试地址finalString _debugUrl ='http://192.168.1.5:9222';Uint8List? _imageData; bool _isLoading =false;String _status ='准备就绪';Future<void>_captureScreen()async{setState((){ _isLoading =true; _status ='正在连接远程浏览器...'; _imageData =null;});try{// 1. 连接final browser =await puppeteer.connect( browserUrl: _debugUrl, timeout:constDuration(seconds:5),// 设置超时);setState(()=> _status ='正在加载页面...');// 2. 打开页面final page =await browser.newPage();// 设置视口大小以获得更好的截图效果await page.setViewport(constDeviceViewport(width:375, height:812));await page.goto(_urlController.text, wait:Until.networkIdle);setState(()=> _status ='正在截图...');// 3. 截图final screenshot =await page.screenshot();// 4. 清理await page.close();await browser.disconnect();if(mounted){setState((){ _imageData = screenshot; _status ='截图成功';});}}catch(e){if(mounted){setState(()=> _status ='错误: $e');}}finally{if(mounted){setState(()=> _isLoading =false);}}}@overrideWidgetbuild(BuildContext context){returnScaffold( appBar:AppBar(title:constText('Puppeteer 远程截图')), body:Column( children:[Padding( padding:constEdgeInsets.all(16.0), child:Row( children:[Expanded( child:TextField( controller: _urlController, decoration:constInputDecoration( labelText:'输入网址', border:OutlineInputBorder(),),),),constSizedBox(width:16),ElevatedButton( onPressed: _isLoading ?null: _captureScreen, child: _isLoading ?constSizedBox( width:20, height:20, child:CircularProgressIndicator(strokeWidth:2),):constText('截图'),),],),),Text(_status, style:constTextStyle(color:Colors.grey)),constDivider(),Expanded( child: _imageData !=null?SingleChildScrollView( child:Image.memory( _imageData!, fit:BoxFit.contain,),):constCenter( child:Icon(Icons.image, size:64, color:Colors.grey),),),],),);}}
在这里插入图片描述

六、总结

虽然 OpenHarmony 移动设备无法直接运行 puppeteer 驱动的本地 Chrome,但通过远程连接模式,我们可以将繁重的网页渲染和处理任务卸载到服务端,让 OpenHarmony 应用轻松拥有“超级浏览器”的能力。

最佳实践

  1. 仅在受信任的网络环境中使用远程调试,注意安全。
  2. 对于简单的网页展示,优先使用 webview_flutter
  3. puppeteer 适合用于需要服务端生成复杂内容(如报表 PDF)并回传给客户端的场景。

Read more

基于腾讯云HAI + DeepSeek快速设计自己的个人网页

基于腾讯云HAI + DeepSeek快速设计自己的个人网页

前言:通过结合腾讯云HAI 强大的云端运算能力与DeepSeek先进的 AI技术,本文介绍高效、便捷且低成本的设计一个自己的个人网页。你将了解到如何轻松绕过常见的技术阻碍,在腾讯云HAI平台上快速部署DeepSeek模型,仅需简单几步,就能获取一个包含个人简介、技能特长、项目经历及联系方式等核心板块的响应式网页。 目录 一、DeepSeek模型部署在腾讯云HAI 二、设计个人网页 一、DeepSeek模型部署在腾讯云HAI 把 DeepSeek 模型部署于腾讯云 HAI,用户便能避开官网访问限制,直接依托腾讯云 HAI 的超强算力运行 DeepSeek-R1 等模型。这一举措不仅降低了技术门槛,还缩短了部署时间,削减了成本。尤为关键的是,凭借 HAI 平台灵活且可扩展的特性,用户能够依据自身特定需求定制专属解决方案,进而更出色地适配特定业务场景,满足各类技术要求 。 点击访问腾讯云HAI控制台地址: 算力管理 - 高性能应用服务 - 控制台 腾讯云高性能应用服务HAI已支持DeepSeek-R1模型预装环境和CPU算力,只需简单的几步就能调用DeepSeek - R1

By Ne0inhk
AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

云边有个稻草人-ZEEKLOG博客 目录 引言 一、什么是DeepSeek? 1.1 DeepSeek平台概述 1.2 DeepSeek的核心功能与技术 二、蓝耘通义万相2.1概述 2.1 蓝耘科技简介 2.2 蓝耘通义万相2.1的功能与优势 1. 全链条智能化解决方案 2. 强大的数据处理能力 3. 高效的模型训练与优化 4. 自动化推理与部署 5. 行业专用解决方案 三、蓝耘通义万相2.1与DeepSeek的对比分析 3.1 核心区别 3.2 结合使用的优势 四、蓝耘注册流程 五、DeepSeek与蓝耘通义万相2.1的集成应用 5.1 集成应用场景 1. 智能医疗诊断

By Ne0inhk
如何通过 3 个简单步骤在 Windows 上本地运行 DeepSeek

如何通过 3 个简单步骤在 Windows 上本地运行 DeepSeek

它是免费的——社区驱动的人工智能💪。         当 OpenAI 第一次推出定制 GPT 时,我就明白会有越来越多的人为人工智能做出贡献,并且迟早它会完全由社区驱动。         但从来没有想过它会如此接近😂让我们看看如何在 Windows 机器上完全免费使用第一个开源推理模型!  步骤 0:安装 Docker 桌面         我确信很多人已经安装了它,所以可以跳过,但如果没有 — — 这很简单,只需访问Docker 的官方网站,下载并运行安装 👍         如果您需要一些特定的设置,例如使用 WSL,那么有很多指导视频,请查看!我将继续下一步。 步骤 1:安装 CUDA 以获得 GPU 支持         如果您想使用 Nvidia 显卡运行 LLM,则必须安装 CUDA 驱动程序。(嗯……是的,它们需要大量的计算能力)         打开CUDA 下载页面,

By Ne0inhk
在 VSCode 中本地运行 DeepSeek,打造强大的私人 AI

在 VSCode 中本地运行 DeepSeek,打造强大的私人 AI

本文将分步向您展示如何在本地安装和运行 DeepSeek、使用 CodeGPT 对其进行配置以及开始利用 AI 来增强您的软件开发工作流程,所有这些都无需依赖基于云的服务。  步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT         要在本地运行 DeepSeek,我们首先需要安装Ollama,它允许我们在我们的机器上运行 LLM,以及CodeGPT,它是集成这些模型以提供编码辅助的 VSCode 扩展。 安装 Ollama Ollama 是一个轻量级平台,可以轻松运行本地 LLM。 下载Ollama 访问官方网站:https://ollama.com * 下载适合您的操作系统(Windows、macOS 或 Linux)的安装程序。 * 验证安装 安装后,打开终端并运行: ollama --version  如果 Ollama 安装正确,

By Ne0inhk