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

【通用智能体】Playwright:跨浏览器自动化工具

在这里插入图片描述

Playwright:跨浏览器自动化工具

      • 一、Playwright 是什么?
      • 二、应用场景及案例
        • 场景 1:端到端(E2E)测试
        • 场景 2:UI 自动化(表单批量提交)
        • 场景 3:页面截图与 PDF 生成
        • 场景 4:动态内容爬虫
        • 场景 5:性能监控(LCP/FCP 指标)
      • 三、核心优势对比
      • 四、总结

一、Playwright 是什么?

Playwright 是微软开发的跨浏览器自动化工具,支持 Chromium、Firefox、WebKit 等浏览器,提供多语言(Python、JavaScript、Java、C#)API。其核心能力包括:

  • 多浏览器支持:统一 API 操作不同浏览器。
  • 自动化操作:模拟点击、输入、导航等用户行为。
  • 网络拦截:捕获和修改 HTTP 请求。
  • 动态内容处理:自动等待元素加载,支持单页应用(SPA)。

二、应用场景及案例

场景 1:端到端(E2E)测试

案例:电商网站下单流程验证

  • 目标:测试用户从登录到下单的全流程是否正常。
  • 步骤
    1. 打开浏览器,导航至电商网站。
    2. 输入用户名/密码登录。
    3. 搜索商品并添加到购物车。
    4. 进入结算页,填写地址并支付。
    5. 验证订单状态是否为“支付成功”。
  • 代码片段
    from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto("https://example.com/login")page.fill("#username", "test_user")page.fill("#password", "pass123")page.click("button:has-text('登录')")page.goto("https://example.com/search?q=iphone")page.click(".add-to-cart")page.click("#checkout-button")assert page.inner_text(".order-status") == "支付成功"browser.close()
    
  • 流程图
    启动浏览器 → 登录 → 搜索商品 → 下单 → 验证结果 → 关闭浏览器
    

场景 2:UI 自动化(表单批量提交)

案例:政府网站数据批量填报

  • 目标:自动将 Excel 数据填入多个表单页。
  • 关键点
    • 使用 page.type() 填写输入框。
    • 通过 page.select_option() 选择下拉框。
    • 循环处理多行数据。
  • 代码逻辑
    import pandas as pd
    data = pd.read_excel("data.xlsx")for index, row in data.iterrows():page.goto("https://gov-form-submit.com")page.fill("#name", row["姓名"])page.select_option("#gender", row["性别"])page.click("#submit-button")
    

场景 3:页面截图与 PDF 生成

案例:生成移动端响应式页面的测试报告

  • 目标:对同一页面在不同设备尺寸下截图,并生成 PDF。
  • 实现
    devices = ["iPhone 11", "Pixel 5", "iPad Pro"]
    for device in devices:context = browser.new_context(**playwright.devices[device])page = context.new_page()page.goto("https://responsive-site.com")page.screenshot(path=f"screenshot_{device}.png")page.pdf(path=f"report_{device}.pdf")
    

场景 4:动态内容爬虫

案例:抓取社交媒体动态评论

  • 挑战:评论通过 AJAX 动态加载,需滚动触发加载。
  • 解决方案
    page.goto("https://social-media.com/post123")
    while page.is_visible("text=加载更多"):page.click("text=加载更多")page.wait_for_timeout(2000)  # 等待数据加载
    comments = page.query_selector_all(".comment")
    print([comment.inner_text() for comment in comments])
    

场景 5:性能监控(LCP/FCP 指标)

案例:检测页面核心性能指标

  • 步骤
    1. 通过 page.route() 拦截网络请求。
    2. 使用 page.evaluate() 执行性能统计脚本。
  • 代码
    page.goto("https://target-site.com")
    metrics = page.evaluate('''() => {return { LCP: performance.getEntriesByName("largest-contentful-paint")[0].startTime,FCP: performance.getEntriesByName("first-contentful-paint")[0].startTime}
    }''')
    print(f"LCP: {metrics['LCP']}ms, FCP: {metrics['FCP']}ms")
    

三、核心优势对比

场景Playwright 优势
多浏览器测试单脚本兼容 Chrome、Firefox、Safari
动态内容处理自动等待元素/网络请求,避免手动添加 sleep
移动端模拟内置设备参数库(如 iPhone、Pixel)
网络拦截可修改请求头、模拟 API 响应(如 Mock 登录态)
无头模式支持 Headless 执行,适合 CI/CD 流水线

四、总结

Playwright 适用于 自动化测试、数据采集、UI 操作、性能分析 等场景,其跨浏览器支持和动态内容处理能力显著优于传统工具(如 Selenium)。通过结合网络拦截和设备模拟,可覆盖复杂业务场景。

相关文章:

【通用智能体】Playwright:跨浏览器自动化工具

Playwright:跨浏览器自动化工具 一、Playwright 是什么?二、应用场景及案例场景 1:端到端(E2E)测试场景 2:UI 自动化(表单批量提交)场景 3:页面截图与 PDF 生成场景 4&am…...

单片机设计_停车场车位管理系统(AT89C52、LCD1602)

想要更多项目私wo!!! 一、电路设计 此电路由AT89C52单片机和LCD1602液晶显示模块等器件组成。 二、运行结果 三、部分代码 #include <reg52.h> //调用单片机头文件 #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned…...

【android bluetooth 协议分析 01】【HCI 层介绍 5】【SetEventMask命令介绍】

1. HCI_Set_Event_Mask 命令作用 项目内容命令名HCI_Set_Event_MaskOCF0x0001作用主机通过设置 Event Mask 告诉控制器&#xff1a;我只对某些事件感兴趣&#xff0c;屏蔽其他事件&#xff0c;以减少中断。事件来源事件是 HCI 与主机之间通信的反馈机制&#xff0c;控制器通过…...

python打卡day29

类的装饰器 知识点回顾 类的装饰器装饰器思想的进一步理解&#xff1a;外部修改、动态类方法的定义&#xff1a;内部定义和外部定义 回顾一下&#xff0c;函数的装饰器是 &#xff1a;接收一个函数&#xff0c;返回一个修改后的函数。类也有修饰器&#xff0c;类装饰器本质上确…...

【数据结构】树状数组

树状数组 假设一个数可以 x x x可以被二进制分解成 x 2 i 1 2 i 2 . . . 2 i m x 2^{i_1} 2^{i_2} ... 2^{i_m} x2i1​2i2​...2im​&#xff0c;不妨设 i 1 > i 2 > . . . > i m i_1 > i_2 > ... > i_m i1​>i2​>...>im​&#xff0c;进…...

Java虚拟机 - JVM与Java体系结构

Java虚拟机 JVM与Java体系结构为什么要学习JVMJava与JVM简介Java 语言的核心特性JVM&#xff1a;Java 生态的基石JVM的架构模型基于栈的指令集架构&#xff08;Stack-Based&#xff09;基于寄存器的指令集架构&#xff08;Register-Based&#xff09;JVM生命周期 总结 JVM与Jav…...

翻译:20250518

翻译题 文章目录 翻译题一带一路中国结 一带一路 The “One Belt and One Road” Initiative aims to achieve win-win and shared development. China remains unchanged in its commitment to foster partnerships. China pursues an independent foreign policy of peace, …...

SparkSQL基本操作

以下是 Spark SQL 的基本操作总结&#xff0c;涵盖数据读取、转换、查询、写入等核心功能&#xff1a; 一、初始化 SparkSession scala import org.apache.spark.sql.SparkSession val spark SparkSession.builder() .appName("Spark SQL Demo") .master("…...

Ansible模块——文件内容修改

修改文件单行内容 ansible.builtin.lineinfile 可以按行修改文件内容&#xff0c;一次修改一行&#xff0c;支持正则表达式。 选项名 类型 默认值 描述 attributesstrnull 设置目标文件的 Linux 文件系统属性&#xff08;attribute bits&#xff09;&#xff0c;作用类似于…...

基于单片机路灯自动控制仪仿真设计

标题:基于单片机路灯自动控制仪仿真设计 内容:1.摘要 本设计旨在解决传统路灯控制方式效率低、能耗大的问题&#xff0c;开展了基于单片机的路灯自动控制仪仿真设计。采用单片机作为核心控制单元&#xff0c;结合光照传感器、时钟模块等硬件&#xff0c;运用相关软件进行编程和…...

Spring Web MVC————入门(3)

今天我们来一个大练习&#xff0c;我们要实现一个登录界面&#xff0c;登录进去了先获取到登录人信息&#xff0c;可以选择计算器和留言板两个功能&#xff0c;另外我们是学后端的&#xff0c;对于前端我们会些基础的就行了&#xff0c;知道ajax怎么用&#xff0c;知道怎么关联…...

拓展运算符与数组解构赋值的区别

拓展运算符与数组解构赋值是ES6中用于处理数组的两种不同的特性&#xff0c;它们有以下区别&#xff1a; 概念与作用 • 拓展运算符&#xff1a;主要用于将数组展开成一系列独立的元素&#xff0c;或者将多个数组合并为一个数组&#xff0c;以及在函数调用时将数组作为可变参…...

【Linux】第二十章 管理基本存储

目录 1. 对 Linux 磁盘进行分区时有哪两种方案&#xff1f;分别加以详细说明。 2. 简单说下创建MBR磁盘分区涉及哪几个步骤&#xff1f; 3. 创建GPT分区与创建MBR分区有什么不同&#xff1f; 4. 在创建分区时就会在分区上创建文件系统吗&#xff1f; 5. 如何持久挂载文件系…...

DeepSeek本地部署全攻略:从零搭建到Web可视化及数据训练

目录 1. 环境准备与硬件要求2. 安装Ollama框架3. 部署DeepSeek模型4. Web可视化配置5. 数据投喂与模型训练6. 进阶技巧与常见问题1. 环境准备与硬件要求 硬件配置建议 基础配置:16GB内存 + RTX 3060显卡(流畅运行7B参数模型)进阶配置:32GB内存 + RTX 4090显卡(支持14B模型…...

JavaScript性能优化实战(12):大型应用性能优化实战案例

在前面的系列文章中,我们探讨了各种JavaScript性能优化技术和策略。本篇将聚焦于实际的大型应用场景,通过真实案例展示如何综合运用这些技术,解决复杂应用中的性能挑战。 目录 电商平台首屏加载优化全流程复杂数据可视化应用性能优化案例在线协作工具的实时响应优化移动端W…...

前缀和——中心数组下标

此题我们不应局限于前缀和的模板&#xff0c;因为该中心下标把数组分为两个部分且每个部分都要求和&#xff0c;我们就一个再创建一个”后缀和” 定义两个数组f&#xff0c;g。f[i]表示[0,i-1]所有元素的和 f[i]f[i-1]nums[i-1];g[i]表示[i1,n-1]的和 g[i]g[i1]nums[i1];因为依…...

Java——创建多线程的四种方式

一、继承Thread 步骤 1.定义一个类继承Thread 2.重写run方法&#xff0c;在方法中设置线程任务&#xff08;此线程具体执行的代码&#xff09; 3.创建自定义线程类对象 4.调用Thread中的start方法&#xff0c;开启线程&#xff0c;jvm自动调用run方法 常用方法 void sta…...

广域网学习

PPPoE技术&#xff08;拨号上网&#xff09; PPPoE &#xff08; PPP over Ethernet &#xff0c;以太网承载 PPP 协议&#xff09;是一种把 PPP 帧封装到以太网帧中的链路层协议。 PPPoE 可以使以太网网络中的多台主机连接到远端的宽带接入服务器。 应用场景 PPPoE 组网结构采…...

inverse-design-of-grating-coupler-3d

一、设计和优化3D光栅耦合器 1.1 代码讲解 通过预定义的环形间距参数(distances数组),在FDTD中生成椭圆光栅结构,并通过用户交互确认几何正确性后,可进一步执行参数扫描优化。 # os:用于操作系统相关功能(如文件路径操作) import os import sys# lumapi:Lumerical 的…...

渗透测试流程-中篇

#作者&#xff1a;允砸儿 #日期&#xff1a;乙巳青蛇年 四月廿一&#xff08;2025年5月18日&#xff09; 今天笔者带大家继续学习&#xff0c;网安的知识比较杂且知识面很广&#xff0c;这一部分会介绍很多需要使用的工具。会用各种工具是做网安的基础&#xff0c;ok咱们继续…...

2026武汉门窗门业移门木门铝艺门智能锁展会3月国博举办

展出面积&#xff1a;60000㎡ 观众&#xff1a;80000人次 参展企业&#xff1a;800 专业活动&#xff1a;20 2026武汉门窗门业移门木门铝艺门智能锁展会3月国博举办 2026第二届中国武汉整装定制家居暨门窗装饰材料博览会/2026武汉建博会 时间&#xff1a;2026年3月20-22日 …...

如何用mockito+junit测试代码

Mockito 是一个流行的 Java 模拟测试框架&#xff0c;用于创建和管理测试中的模拟对象(mock objects)。它可以帮助开发者编写干净、可维护的单元测试&#xff0c;特别是在需要隔离被测组件与其他依赖项时。 目录 核心概念 1. 模拟对象(Mock Objects) 2. 打桩(Stubbing) 3. 验…...

31、魔法生物图鉴——React 19 Web Workers

一、守护神协议&#xff08;核心原理&#xff09; 1. 灵魂分裂术&#xff08;线程架构&#xff09; // 主组件中初始化Workerconst workerRef useRef(null);​useEffect(() > {workerRef.current new Worker(new URL(./creatureWorker.js, import.meta.url));workerRef.…...

洛谷题目:P4052 [JSOI2007] 文本生成器 题解 本题(极难)

个人介绍: 题目传送门: P4052 [JSOI2007] 文本生成器 - 洛谷 (luogu.com.cn) 前言: 这道题要求计算长度为 m 的文章中,至少包含一个给定单词的可读文章的数量,并且结果需要对 10007 取模。下面是小亦为大家逐步分析解题思路: 题目整体思路: 为了方便计算…...

【Linux】命令行参数和环境变量

目录 一、命令行参数 二、环境变量 &#xff08;一&#xff09;PATH &#xff08;二&#xff09;查看环境变量 &#xff08;三&#xff09;获取环境环境变量 &#xff08;四&#xff09;为什么要环境变量 &#xff08;五&#xff09;环境变量特点总结 &#xff08;1&am…...

AGI大模型(23):LangChain框架快速入门之LangChain介绍

1 什么是LangChain? LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架,它提供了一系列工具、套件和接口,让开发者使用语言模型来实现各种复杂的任务,如文本到图像的生成、文档问答、聊天机器人等。 官网地址:https://python.langchain.com/docs/introduc…...

vmware虚拟机运行多个产生卡顿问题

最近在工作中使用电脑运行两个虚拟机&#xff0c;用来测试程序。运行的时候发现电脑会非常卡顿。导致调试工作进行到一半就会闪退卡死。 首先尝试的解决方案是开一个虚拟机&#xff0c;然后在windows上部署测试程序&#xff0c;后面发现操作很受限制。然后使用windows管…...

八股碎碎念01——HashMap原理

Java面试题周总结 HashMap HashMap实现原理 Java 1.7版本 在Java1.7中HashMap通过数组链表的方式实现&#xff0c;由于链表查询速度为O(n)&#xff0c;因此在插入大量元素后查询速度会明显降低。 Java 1.8版本 在Java1.8中对HashMap进行改进&#xff0c;采用数组链表/红黑…...

长篇小说《白鹿原》原著版本在当当网可购到

著名作家陈忠实所真实描写上世纪1959年、1960年、1961年我国三年饥荒时人吃人的长篇小说《白鹿原》原著版本&#xff0c;现能在当当网上购到&#xff0c;价格仅26元。特此推荐。 笔者是从那段不堪回首的饥饿历史中幸存下来的过来人&#xff0c;也是在改革开放初期的文艺复兴年代…...

ColorAid —— 一个面向设计师的色盲模拟工具开发记

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起因&#xff1a;CodeBuddy&#xff0c;说干就干 起初只是一个随口的想法——我想做一个“色盲辅助工具”&…...

对称加密与非对称加密在 JWT 中的应用详解

文章目录 对称加密与非对称加密在 JWT 中的应用详解引言对称加密与非对称加密概述对称加密&#xff08;Symmetric Encryption&#xff09;非对称加密&#xff08;Asymmetric Encryption&#xff09; 对称加密生成和验证 JWT 的过程生成 JWT&#xff08;HS256 示例&#xff09;验…...

Python 中 if 和 else 基础知识的详解和使用

一、基本语法结构 if 条件1:# 条件1 为真时执行的代码块 elif 条件2:# 条件1 不成立&#xff0c;条件2 成立时执行 else:# 所有条件都不成立时执行注意&#xff1a; elif 是“else if”的缩写&#xff0c;可以有多个&#xff1b;else 可省略&#xff1b;条件表达式必须是可以…...

学习黑客Active Directory 入门指南(三)

Active Directory 入门指南&#xff08;三&#xff09;&#xff1a;关键服务、用户与组管理 &#x1f91d;&#x1f4bb; 大家好&#xff01;欢迎来到 “Active Directory 入门指南” 系列的第三篇。在前两篇中&#xff0c;我们已经了解了AD的基本概念、逻辑结构&#xff08;对…...

10.9 LangChain LCEL革命:43%性能提升+声明式语法,AI开发效率飙升实战指南

LangChain 表达式语言(LCEL)架构解析:新一代链式编排引擎 关键词:LangChain Expression Language, Runnable 协议, 链式编排, 并行处理, 生产级应用开发 1. LCEL 设计理念与技术突破 LangChain Expression Language(LCEL)是 LangChain v0.3 的核心革命性升级,重新定义…...

一文读懂-嵌入式Ubuntu平台

现在直接在一些嵌入式Soc上移植ubuntu来用到产品上&#xff0c;刚开始感觉还挺臃肿的&#xff0c;后来细聊了下感觉还是有一定的优势。 ubuntu相信大家在熟悉不过了&#xff0c;几乎无处不在&#xff0c;小到咖啡机&#xff0c;大到火星车&#xff0c;为什么ubuntu如此广泛&am…...

centos7.9扩展已有分区空间

新增50G硬盘 分区 fdisk /dev/sdb Command (m for help): p #打印分区表Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors Units sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 byte…...

ubuntu22.04搭建ROS2环境

在 Ubuntu 22.04 上安装 ROS 2&#xff08;Humble Hawksbill&#xff09;时&#xff0c;针对国内网络问题&#xff0c;建议使用镜像源加速。以下是分步指南&#xff1a; 1. 更换 Ubuntu 系统源&#xff08;使用清华镜像&#xff09; sudo sed -i "shttp://.*archive.ubunt…...

java中sleep()和wait()暂停线程的区别

1. Thread.sleep() 所属类&#xff1a;它是Thread类的静态方法。作用&#xff1a;让当前正在执行的线程暂停指定的时间&#xff0c;在暂停期间&#xff0c;线程会一直持有对象锁&#xff08;也就是synchronized锁&#xff09;。中断响应&#xff1a;当线程处于sleep()状态时&a…...

printf函数参数与入栈顺序

01. printf()的核心功能 作用&#xff1a;将 格式化数据 输出到 标准输出&#xff08;stdout&#xff09;&#xff0c;支持多种数据类型和格式控制。 int printf(const char *format, ...);参数&#xff1a; format&#xff1a;格式字符串,字符串或%开头格式符...&#xff1a;…...

代码案例分析

以下是一个使用线性回归进行简单房价预测的机器学习代码案例分析&#xff1a; 代码示例 import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split # 生成一些示例数据…...

Baklib赋能企业知识资产AI化升级

AI驱动知识管理革新 在数字化转型浪潮中&#xff0c;企业知识管理的范式正经历AI技术的深度重构。传统知识库受限于静态存储与人工维护&#xff0c;而Baklib通过构建知识中台架构&#xff0c;将多模态数据处理与语义理解引擎深度融合&#xff0c;实现知识资产的动态聚合与智能…...

Leetcode 3552. Grid Teleportation Traversal

Leetcode 3552. Grid Teleportation Traversal 1. 解题思路2. 代码实现 题目链接&#xff1a;3552. Grid Teleportation Traversal 1. 解题思路 这一题的话核心就是一个广度优先遍历&#xff0c;我们只需要从原点开始&#xff0c;一点点考察其所能到达的位置&#xff0c;直至…...

【Bluedroid】蓝牙HID DEVICE 报告发送与电源管理源码解析

本文基于Android蓝牙协议栈代码&#xff0c;深度解析HID设备&#xff08;如键盘、鼠标&#xff09;从应用层发送输入报告到主机设备的完整流程&#xff0c;涵盖数据封装、通道选择、L2CAP传输、电源管理四大核心模块。通过函数调用链&#xff08;send_report → BTA_HdSendRepo…...

day15-进程管理

1. 概述 运行起来的软件就是进程&#xff0c;在内存中运行守护进程/服务&#xff1a;一直运行的进程 2. 僵尸进程 2.1. 僵尸进程zombie 当子进程比父进程先结束&#xff0c;而父进程又没有回收子进程&#xff0c;释放子进程占用的资源&#xff0c;此时子进程将成为一个僵尸…...

抖音视频下载工具 v1.1 自用分享

用免费的公益接口用AI写了个简单的抖音视频下载工具&#xff0c;自用的&#xff0c;不支持批量下载 内置两套API&#xff0c;解析失败会自动切换&#xff0c;支持视频预览播放&#xff0c;视频截图等操作 使用方法也很简单&#xff1a; 软件打开后会监听粘贴板&#xff0c;当检…...

46、什么是Windows服务,它的⽣命周期与标准的EXE程序有什么不同?

Windows服务是一种在Windows操作系统后台运行的特殊应用程序&#xff0c;与标准的EXE程序相比&#xff0c;其生命周期在启动方式、运行持续性、用户交互、运行账户、管理方式、进程状态及开发要求等方面存在显著差异。以下是对Windows服务及其与标准EXE程序生命周期差异的详细分…...

用 UniApp 构建习惯打卡 App —— HabitLoop 开发记

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 当我脑海中突然冒出一个念头&#xff1a;“做一个自己能每天打卡的习惯 App 吧”&#xff0c;我立刻打开了 Cod…...

NB-IoT技术深度解析:部署模式与节能机制全指南

知识点1【NB-IoT的介绍】 NB-IoT 是指Narrow Band Internet of Things&#xff0c;聚集于低功耗窄带宽广域物联网。 1、License介绍 “有牌照”&#xff08;license&#xff09;频谱&#xff0c;指的是政府或者监管机构通过拍卖&#xff0c;划拨等方式&#xff0c;授予给各个…...

Vue百日学习计划Day28-32天详细计划-Gemini版

总目标: 在 Day 28-32 深入理解 Vue 3 的响应式机制&#xff0c;熟练掌握 Composition API 中的 setup, ref, reactive, toRefs, readonly, computed, watch, watchEffect 等核心 API 的使用。 所需资源: Vue 3 官方文档 (组合式 API): https://cn.vuejs.org/guide/introducti…...

Leetcode134加油站

题目链接 134 题意图解&#xff1a; 题目给了n个节点&#xff0c;这些节点呈现环状&#xff0c;每次到一个低点要消耗cost[i]的油量。 从中我们可以得出一个结论&#xff1a;看一个点能不能到下一个点&#xff0c;就要用当前的油量减去消耗的量&#xff0c;那么gas[i] - cost…...