Puppeteer 浏览器自动化操作工具

news2025/5/24 5:14:06

pyppeteer 是 Python 版本的 Puppeteer,而 Puppeteer 是由 Google 开发的一个 Node.js 库,用于控制 Chrome 或 Chromium 浏览器。pyppeteer 允许你通过 Python 代码自动化操作浏览器,实现网页爬取、自动化测试、生成截图或 PDF 等功能。

核心功能

  1. 网页自动化操作:模拟用户在浏览器中的各种行为(点击、输入、滚动等)。
  2. 网页内容爬取:获取动态渲染的网页内容(如 JavaScript 加载的数据)。
  3. 生成截图/PDF:将网页保存为图片或 PDF 文件。
  4. 性能分析:分析网页加载性能,生成性能报告。
  5. 自动化测试:模拟用户交互,测试网页功能。

与其他工具的对比

工具语言特点
Selenium多语言需要浏览器驱动(如 ChromeDriver),功能全面但配置复杂。
BeautifulSoupPython仅处理静态 HTML,无法解析动态内容。
ScrapyPython高效的爬虫框架,但无法处理 JavaScript 渲染的内容。
pyppeteerPython直接控制浏览器,无需额外驱动,适合处理复杂动态页面。

基本使用流程

1. 安装
pip install pyppeteer

首次运行时,pyppeteer 会自动下载 Chromium 浏览器(约 100MB)。

2. 简单示例:打开网页并截图
import asyncio
from pyppeteer import launch

async def main():
    # 启动浏览器
    browser = await launch()
    # 创建新页面
    page = await browser.newPage()
    # 导航到目标 URL
    await page.goto('https://example.com')
    # 截图
    await page.screenshot({'path': 'example.png'})
    # 关闭浏览器
    await browser.close()

# 运行异步函数
asyncio.get_event_loop().run_until_complete(main())
3. 示例:爬取动态内容
import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://example.com')
    
    # 等待特定元素加载完成
    await page.waitForSelector('.dynamic-content')
    
    # 获取元素文本
    content = await page.querySelectorEval('.dynamic-content', 'el => el.textContent')
    print(content)
    
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

高级用法

1. 模拟用户交互
# 点击按钮
await page.click('button.login')

# 输入文本
await page.type('input[name="username"]', 'your_username')

# 提交表单
await page.keyboard.press('Enter')
2. 处理弹窗
page.on('dialog', lambda dialog: asyncio.ensure_future(handle_dialog(dialog)))

async def handle_dialog(dialog):
    print(dialog.message)
    await dialog.accept()  # 或 .dismiss()
3. 执行 JavaScript 代码
# 执行 JS 函数
result = await page.evaluate('() => window.innerWidth')
print(f"浏览器宽度: {result}px")

# 获取元素属性
attr = await page.querySelectorEval('img', 'el => el.src')
4. 生成 PDF
await page.pdf({'path': 'page.pdf', 'format': 'A4'})

注意事项

  1. 异步编程pyppeteer 基于 asyncio,所有操作都是异步的,需熟悉 async/await 语法。
  2. 性能考虑:启动浏览器开销较大,建议批量处理任务。
  3. 反爬机制:频繁请求可能触发网站反爬策略,可设置随机 User-Agent 或延时。
  4. 资源释放:确保调用 browser.close() 释放浏览器资源。

应用场景

  • 网页爬虫:抓取动态渲染的内容(如单页应用)。
  • 自动化测试:模拟用户行为,测试网站功能。
  • 生成报告:将网页内容导出为 PDF 或图片。
  • 监控网站:定期检查网站内容变化。
  • 性能优化:分析页面加载时间,识别性能瓶颈。

相关工具

  • puppeteer:原版 Node.js 库,功能更全面。
  • playwright-python:Microsoft 开发的跨浏览器自动化工具,支持 Chrome、Firefox、Safari 等。
  • selenium:老牌自动化测试工具,支持更多浏览器。

如果需要更简洁的 API 或跨浏览器支持,可考虑 playwright-python

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

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

相关文章

cmd里可以使用npm,vscode里使用npm 报错

cmd里可以使用npm,vscode里使用npm 报错 报错提示原因解决方法 报错提示 npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系 统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/ fwlink/?LinkID135170 中的 about_Executi…

JAVA开发工具延长方案

亲测稳定的延长方案与避坑指南 真的搞不懂了,说点专业的术语竟然成了 QINQUAN。那就直接点,把这个方案带给需要的开发者。 延长工具直通车 保姆级教程 延长方案https://mp.weixin.qq.com/s/uajM2Y9Vz6TnolzcLur_bw还是让大家看看,发什么会被…

CSS 浮动(Float)及其应用

1. 什么是浮动(Float)? 浮动元素会脱离正常的文档流(Document Flow),并向左或向右移动,直到碰到父元素的边缘或另一个浮动元素。 基本语法 .float-left {float: left; }.float-right {float:…

CC53.【C++ Cont】一维前缀和

目录 1.定义 2.作用 3.例题:【模板】一维前缀和 分析 方法1:暴力解法 方法2:前缀和(简单的动态规划) 第一步:预处理 4.练习:P1115 最大子段和 分析 方法1:段长从1枚举到n 方法2:改进方法1 代码 提交结果 1.定义 快速求出数组中某一段的区间和,时间复杂度为(速度极…

YouTube视频字幕转成文章算重复内容吗?

很多创作者误以为「自己说的话不算抄袭」,却不知道YouTube自动生成的字幕早已被搜索引擎存档。 去年就有案例:某美食博主将教程视频字幕转为图文,结果原创度检测仅42%,导致页面权重暴跌。 本文揭秘5个实操技巧:从删除…

网络学习-利用reactor实现http请求(六)

一、实现HTTP请求 1、印象里面,总有人说C/C语言不能实现HTTP请求,其实不然。C/C语言完全可以实现HTTP请求。通过对select,poll,epoll等IO多路复用技术的学习以及reactor模式的学习,完全能够实现HTTP请求。 2、webserver 主要解决两个问题 …

【IC_Design】跨时钟域的寄存器更新后锁存

目录 设计逻辑框图场景概述总结电路使用注意事项***波形图代码 设计逻辑框图 场景概述 最典型的应用场景就是——在一个时钟域(比如 CPU/总线域)更新了一个多位配置字,需要把它安全地送到另一个时钟域(比如时钟发生器、串口、视频…

Java微服务架构:Spring Cloud全栈指南,附最新Demo源码,可独立运行!

在日常java开发中你是不是经常遇到这种问题:开发中不知道要引入什么版本,创建新项目时直接从老工程拷贝引入了一堆杂乱的包,随便升级下其中一个包就导致整个微服务跑不起来! 如果你也遇到这种问题,可以认证看下本篇文…

使用LLaMA-Factory微调ollama中的大模型(一)------家用电脑安装LLaMA-Factory工具

前提:本机已安装python,且版本大于3.9,推荐3.10 官方规定如下 我已安装 1.安装torch 查看自己电脑显卡信息 说明我没有装CUDA 使用 nvidia-smi 命令查看驱动信息 说明我NVIDIA 显卡已安装驱动,支持的 CUDA Runtime 版本为 12.6…

支持向量机(SVM):分类与回归的数学之美

在机器学习的世界里,支持向量机(Support Vector Machine,简称 SVM)是一种极具魅力且应用广泛的算法。它不仅能有效解决分类问题,在回归任务中也有着出色的表现。下面,就让我们深入探索 SVM 如何在分类和回归…

人工智能+:职业价值的重构与技能升级

当“人工智能”成为产业升级的标配时,一个令人振奋的就业图景正在展开——不是简单的岗位替代,而是职业价值的重新定义。这场变革的核心在于,AI并非抢走工作机会,而是创造了人类与技术协作的全新工作范式。理解这一范式转换的逻辑…

JVM部分内容

1.JVM内存区域划分 为什么要划分内存区域,JAVA虚拟机是仿照真实的操作系统进行设计的,JVM也就仿照了它的情况,进行了区域划分的设计。 JAVA进程也就是JAVA虚拟机会从操作系统申请内存空间给进程使用,JVM内存空间划分&#xff0c…

python-leetcode 68.有效的括号

题目: 给定一个只包括“(”),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足:左括号必须用相同类型的右括号闭合;左括号必须以正确的顺序闭合&#xff0c…

NLP学习路线图(四):Python编程语言

引言 自然语言处理(Natural Language Processing, NLP)是人工智能领域最引人注目的分支之一。从智能客服到机器翻译,从舆情分析到聊天机器人,NLP技术正在重塑人机交互的边界。本文将结合Python编程语言,带您走进NLP的…

Serverless爬虫架构揭秘:动态IP、冷启动与成本优化

一、问题背景:旧技术的瓶颈 在传统爬虫架构中,我们通常部署任务在本地机器或虚拟机中,搭配定时器调度任务。虽然这种方式简单,但存在以下明显缺陷: 固定IP易被封禁:目标网站如拼多多会通过IP频率监控限制…

从单体到分布式:深入解析Data Mesh架构及其应用场景与价值

Data Mesh(数据网格)是一种新兴的数据架构范式,旨在解决传统集中式数据平台的可扩展性、敏捷性和治理问题。它强调领域驱动的分布式数据所有权、自助数据平台以及跨组织的协作,使数据成为产品,并通过去中心化的方式提高…

AI大模型ms-swift框架实战指南(十三):Agent智能体能力构建指南

系列篇章💥 No.文章1AI大模型ms-swift框架实战指南(一):框架基础篇之全景概览2AI大模型ms-swift框架实战指南(二):开发入门之环境准备3AI大模型ms-swift框架实战指南(三&#xff09…

LLM最后怎么输出值 解码语言模型:从权重到概率的奥秘

LM Head Weights(语言模型头部权重):左侧的“LM Head Weights”表示语言模型头部的权重矩阵,它是模型参数的一部分。权重矩阵与输入数据进行运算。Logits(未归一化对数概率):经过与LM Head Weig…

Leetcode百题斩-回溯

回溯是一个特别经典的问题,也被排在了百题斩的第一部分,那么我们接下来来过一下这个系列。 这个系列一共八道题,偶然间发现我两年前还刷到这个系列的题,回忆起来当时刚经历淘系大变动与jf出走海外事件,大量同事离职闹…

超小多模态视觉语言模型MiniMind-V 训练

简述 MiniMind-V 是一个超适合初学者的项目,让你用普通电脑就能训一个能看图说话的 AI。训练过程就像教小孩:先准备好图文材料(数据集),教它基础知识(预训练),再教具体技能&#xf…