python+playwright自动化测试(一):安装及简单使用,截图录屏
目录
基本使用
浏览器调用
启用浏览器
创建窗口对象
访问URL
页面的刷新、返回、前进
关闭
截图、录屏、保存pdf
截图
录屏
保存为pdf
设置窗口大小
调试模式
手机模式及new_context的更多参数
手机模式
new_context的其他参数
设置语言和时区
设置和修改位置
用户代理设置
离线模式
禁用或启用java_script_enabled
playwright是一个非常强大的自动化框架,支持Linux、Mac以及Windows操作系统操作,支持Chromium、Firefox、WebKit等主流浏览器自动化操作。
官网:https://playwright.dev/
安装playwright框架:pip install playwright
安装浏览器驱动:playwright install ,可指定对应浏览器安装,如playwright install Chromium,不指定时安装默认的Chromium、Firefox、Webkit,自动化运行需要在对应浏览器和驱动下使用,不安装无法运行脚本。
基本使用
浏览器调用
from playwright.sync_api import sync_playwright
from time import sleepwith sync_playwright() as p:# wd = p.firefox# wd = p.chromium# wd = p.webkit
启用浏览器
headless:指定有头或无头模式(显示或隐藏浏览器界面运行脚本)
with sync_playwright() as p:browser = p.chromium.launch(headless=False)
创建窗口对象
page = browser.new_page()
访问URL
page.goto('https://www.baidu.com')
页面的刷新、返回、前进
page.reload() # 刷新页面,支持timeout和wait_until参数page.go_back() # 回退,支持timeout和wait_until参数page.go_forward() # 前进,支持timeout和wait_until参数
关闭
page.close() # 关闭页面browser.close() # 关闭浏览器
截图、录屏、保存pdf
截图
支持设置截图的前景背景大小等参数,见源码
截取整个页面
page.screenshot(path='screenshot.png', full_page=True) # 设置截取整页full_page
截取某个元素
img = page.locator('#kw')img.screenshot(path=f'input_box.png')
录屏
with sync_playwright() as p:browser = p.chromium.launch(headless=True) context = browser.new_context(record_video_dir="videos/", # 录屏保存文件保存位置record_video_size={'width': 1920, 'height': 1080} # 设置录屏像素,不设置时会发现录下来的视频很模糊)page = context.new_page()
record_video_size参数的设置关键性,不设置时录屏内容很糊(可解决playwright录屏内容模糊的问题),设置和不设置的效果对比如下
保存为pdf
page.pdf(path='page.pdf')
设置窗口大小
窗口最大化设置
方法一:
增加args参数和no_viewport参数
args=['--start-maximized']设置启动窗口最大化,传递给浏览器实例“最大化”参数项,args参数设置项非常丰富:https://peter.sh/experiments/chromium-command-line-switches/
with sync_playwright() as p:browser = p.chromium.launch(headless=False, args=['--start-maximized'])context = browser.new_context(no_viewport=True # 禁用窗口大小)page = context.new_page()
方法二:
支持自由大小设置
context = browser.new_context(viewport={'width': 1920, 'height': 1080}, # 设置窗口大小)page = context.new_page()
方法三:
支持自由大小设置
page.set_viewport_size({'width': 1920, 'height': 1080}) # 设置窗口大小
方法二和方法三效果相同,一个在创建窗体前,一个在创建窗体后。
方法一必须是headless=False时生效(即显示模式下),方法二三不受headless限制,均生效。
方法一截图操作的图片高度偏小,方法二三截图操作的图片分辨率和代码中设置的一致。
方法一截图时保持屏幕的缩放比例,方法二三按屏幕缩放比例固定为100%时进行截图。
调试模式
with sync_playwright() as p:browser = p.chromium.launch(headless=False, slow_mo=1000) # slow_mo:慢动作模式,用于调试模式context = browser.new_context(record_har_path="debug.har") # 保存调试追踪,page.pause()开启调试模式后可见效果page = context.new_page()page.pause() # 开启调试模式
手机模式及new_context的更多参数
手机模式
iphone = p.devices['iPhone 13 Pro']context = browser.new_context(**iphone, # 添加设备)
new_context的其他参数
设置语言和时区
locale='zh-CN', # 设置语言
timezone_id='Asia/Shanghai', # 设置时区为上海
将locale='de-DE'设置为德语后,访问https://bing.com/会发现页面语言变为德语
设置和修改位置
可访问百度地图看看效果哦
context = browser.new_context(
geolocation={'longitude': 120.756379, 'latitude': 30.783679},
permissions=['geolocation']
)context.set_geolocation({'longitude': 121.09213, 'latitude': 32.010647})
用户代理设置
user_agent=' xxx test user agent'
离线模式
offline=True
禁用或启用java_script_enabled
java_script_enabled=False
相关文章:
python+playwright自动化测试(一):安装及简单使用,截图录屏
目录 基本使用 浏览器调用 启用浏览器 创建窗口对象 访问URL 页面的刷新、返回、前进 关闭 截图、录屏、保存pdf 截图 录屏 保存为pdf 设置窗口大小 调试模式 手机模式及new_context的更多参数 手机模式 new_context的其他参数 设置语言和时区 设置和修改位置…...
Mysql--架构篇--体系结构(连接层,SQL层,存储引擎层,文件存储层)
MySQL是一种广泛使用的关系型数据库管理系统(RDBMS),其体系结构设计旨在提供高效的数据存储、查询处理和事务管理。MySQL的体系结构可以分为多个层次,每个层次负责不同的功能模块。 MySQL的体系结构主要由以下几个部分组成&#…...
git merge 压缩提交
在 Git 中,执行 git merge 时可以通过一些操作来“压缩”提交,通常是指将合并过程中的多个提交压缩成一个单一的提交。这可以通过使用 --squash 选项来完成,或者在合并后进行交互式 rebase。以下是两种常见的方法: 方法 1&#x…...
Python脚本自动发送电子邮件
要编写一个Python脚本来自动发送电子邮件,你可以使用smtplib库来处理SMTP协议,以及email库来构建邮件内容。 安装必要的库 通常情况下,smtplib和email库是Python标准库的一部分,因此不需要额外安装。如果你使用的是较旧的Python版…...
uniapp中rpx和upx的区别
在 UniApp 中,rpx 和 upx 是两种不同的单位,它们的主要区别在于适用的场景和计算方式。 ### rpx(Responsive Pixel) - **适用场景**:rpx 是一种响应式单位,主要用于小程序和移动端的布局。 - **计算方式**…...
CentOS 9 Stream 中查看 Python 版本并升级 Python
CentOS 9 Stream 中查看 Python 版本并升级 Python 1. 查看当前 Python 版本2. 升级 Python 版本(1)安装开发工具(2)安装必要的依赖包(3)下载和安装新版本的 Python(4)验证安装 3. …...
可以用于分割字符串的方法(python)
一、str.split(sep,maxsplit)函数(返回列表) sep:分隔符 maxsplit:分割次数 a"Hello world" list1a.split(" ",1) print(list1) 结果: [Hello, world] 二、str.rsplit(sep,maxsplit)函数&…...
【Vue】全局/局部组件使用流程(Vue2为例)
全局组件和局部组件区别 如何使用 全局组件:全局注册后,可以在任意页面中直接使用。局部组件:在页面中需要先导入子组件路径,注册组件才能使用。 适用场景 全局组件:适用于高频使用的组件,如导航栏、业…...
virtual box虚拟机误删Python3.6后导致UBUNTU18.04开机无UI界面(进不了desktop)的解决方法
最近在解决一个python引起的问题的时候,作者心一狠,删了系统自带的python3.6, 顺便还删了python3。导致重启后ubuntu的virtual box虚拟机无法看到UI登录界面,只给我了孤零零的命令行。装了很多东西不可能重装,无奈只能…...
虚拟线程JDK与Spring Core Reactor
两种虚拟线程对比:JDK vs. Spring Core Reactor性能对比 1、基于 JDK 的虚拟线程实现: 摘自实际代码: public static void withFlatMapUsingJDK() { ... var virtualThreadExecutor Executors.newThreadPerTaskExecutor( Thread .ofVirtual…...
纯 Python、Django、FastAPI、Flask、Pyramid、Jupyter、dbt 解析和差异分析
一、纯 Python 1.1 基础概念 Python 是一种高级、通用、解释型的编程语言,以其简洁易读的语法和丰富的标准库而闻名。“纯 Python” 在这里指的是不依赖特定的 Web 框架或数据分析工具,仅使用 Python 原生的功能和标准库来开发应用程序或执行任务。 1.…...
C++ NULL和nullptr
NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码: #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif 如上是条件编译的宏定义 确保在不同编程环境下正确处理NULL的定义 C中NULL可能被定义…...
算法日记1:洛谷p2678跳石头(二分答案)
1、题目 二、题解: 2.1解题思路: 1.题目要求求出最小值最大,明显的二分答案题目,所以我们可以二分可以跳跃距离int l-1,rL1; 2.此时我们思考lmid和rmid的处理,当我们的check(mid)为true时候 表明我们此时的mid是符合要求的, 那么…...
PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析
PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析 目录 PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析1. 引言2. PID控制器的基本概念2.1 PID控制器的定义2.2 PID控制器的核心思想2.3 PID控制器的应用领域 3. PID控…...
Vue中nextTick实现原理
源码实现思路(面试高分回答) 面试官问我 Vue 的 nextTick 原理是怎么实现的,我这样回答: 在调用 this.$nextTick(cb) 之前: 存在一个 callbacks 数组,用于存放所有的 cb 回调函数。存在一个 flushCallbac…...
【MATLAB】subplot如何增加title
在 Matlab 中,使用 subplot 函数将图形窗口划分为多个子图,并使用 title 函数为每个子图添加标题。以下是一个示例: matlab % 生成示例数据 x 0:0.1:10; y1 sin(x); y2 cos(x); % 创建一个 2 行 1 列的子图布局,并选…...
vue3+ts的<img :src=““ >写法
vue3ts的<img :src"" >写法<img :src"datasetImage" alt"数据分布示意图" /><script setup lang"ts">const datasetImage ref();datasetImage.value new URL(../../../assets/images/login-background.jpg, impo…...
Vue+Echarts+百度地图 实现 路径规划
实现功能: 通过选择 相关调拨,系统自动规划 路径,并且以地图的形式呈现最佳路径 技术难点: 1. vue 结合使用 echarts 2.echarts 在 vue嵌入百度地图,并且做出路径 曲线 最终结果:...
uniapp 小程序 textarea 层级穿透,聚焦光标位置错误怎么办?
前言 在开发微信小程序时,使用 textarea 组件可能会遇到一些棘手的问题。最近我在使用 uniapp 开发微信小程序时,就遇到了两个非常令人头疼的问题: 层级穿透:由于 textarea 是原生组件,任何元素都无法遮盖住它。当其…...
IGP协议的双点双向注入(路由引入)
一、拓扑环境 二、单向注入 以上拓扑为例,单点注入存在路由回包问题 在AR5上注入直连路由 55.5.5.5 需求:AR1上的10.1.1.1 需访问AR5上的55.5.5.5 1、在AR2和AR3上查看注入的55.5.5.5的路由信息 2、现在边界设备以学习到目的网段的路由信息࿰…...
【React】新建React项目
目录 create-react-app基础运用React核心依赖React 核心思想:数据驱动React 采用 MVC体系package.jsonindex.html好书推荐 官方提供了快速构建React 项目的脚手架: create-react-app ,目前使用它安装默认是19版本,我们这里降为18…...
“AI 自动化效能评估系统:开启企业高效发展新征程
在当今数字化飞速发展的时代,企业面临着日益激烈的市场竞争,如何提升效率、降低成本成为了企业生存与发展的关键。AI 自动化效能评估系统应运而生,它如同一把智能钥匙,为企业开启了高效发展的新征程。 AI 自动化效能评估系统&…...
免 root 开启 Pixel 手机 VoLTE 功能
部分运营商需要开启 VoLTE 功能才可以正常通话和接收短信,但是默认情况下,Pixel 是无法开启的,需要我们手动开启一下。经过网友的确认,这种方法还适用于荣耀 MAGIC 等其他品牌的手机。 具体流程如下: 1.打开开发者选…...
华为2024嵌入式研发面试题
01 你认为最好的排序算法是什么? 在实际的编程中,最好的排序算法要根据实际需求和数据规模来选择,因为每种排序算法都有其优势和劣势。以下是一些常见排序算法及其优缺点: 冒泡排序 冒泡排序是一种简单直观的排序算法࿰…...
Android Room 报错:too many SQL variables (code 1 SQLITE_ERROR) 原因及解决方法
报错信息: android.database.sqlite.SQLiteException: too many SQL variables (code 1 SQLITE_ERROR): while compiling: SELECT * FROM points WHERE id IN (?,?,?,...,?,?,?)SQLiteException: too many SQL variables 通常是由于一次查询或插入的 SQL 语句…...
PHP 字符串
PHP 字符串 引言 在 PHP 中,字符串是一种非常基础且重要的数据类型。字符串可以包含字母、数字、标点符号以及特殊字符。PHP 提供了丰富的字符串函数,使得字符串操作变得简单而高效。本文将详细介绍 PHP 中字符串的常用操作,包括字符串的创…...
Android15源码编译问题处理
最近想在Raspberry Pi5上面运行自己编译的Android15镜像,参考如下链接来处理: GitHub - raspberry-vanilla/android_local_manifest GitHub - raspberry-vanilla/android_kernel_manifest 代码同步完后,编译就出问题了,总是提示: FAILED: analyzing Android.bp files and…...
Transformer架构和Transformers 库和Hugging Face
Transformer架构 和 Hugging Face 之间的关系非常紧密,Hugging Face 是推动 Transformer 架构普及和应用的重要力量。以下是两者的关系及其具体联系: 1. Transformer 架构 背景: Transformer 是由 Google 在 2017 年提出的革命性架构,基于自…...
【机器学习 | 数据挖掘】离群点检测
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…...
【极速版 -- 大模型入门到进阶】除了 Prompting, 大模型还能如何被应用?
文章目录 大模型应用 -- Generative AI Projects🌊 大模型应用的时效优势🌊 大模型应用的方式 - Technology Options应用方式一 🐟 Prompting:最简单快速应用方式二🐟 Retrieval augmented generation (RAG)࿱…...
[Unity]发包前遇到的坑之GridLayoutGroup
发包前禁用了UI上面一个调试页面A后,发现无法正确获取某一个用了GridLayoutGroup组件的所有子物体的世界坐标。 一顿研究之后发现,在Start的时候想要正确获取其坐标,需要强制刷新一次布局,方法如下: UnityEngine.U…...
【C++】IO 流
文章目录 👉C 语言的输入与输出👈👉流是什么👈👉C IO 流👈C 标准 IO 流C 和 C 语言的输入格式问题C 的多次输入内置类型和自定义类型的转换日期的多次输入C 文件 IO 流文本文件和二进制文件的读写 …...
Public Key Retrieval is not allowed 解决方法
如图:我的报错是Public Key Retrieval is not allowed,我的前后端都能正常加载,但是在请求数据库时就会报错如下: 解决办法: 在 application.yaml 中的数据库设置地方加上allowPublicKeyRetrievaltrue,然后…...
大数据原生集群 (Hadoop3.X为核心) 本地测试环境搭建二
本篇安装软件版本 mysql5.6 spark3.2.1-hadoop3.2 presto0.272 zeppelin0.11.2 kafka_2.13_3.7.2 mysql 安装步骤见-》 https://blog.csdn.net/dudadudadd/article/details/110874570 spark 安装步骤见-》https://blog.csdn.net/dudadudadd/article/details/109719624 安装…...
服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found.
服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found. 1. 故障现象2. 解决思路3. 故障分析4. 案件回溯5. 解决问题 1. 故障现象 有一台服务器业务报无法连接. 尝试用Ping命令发现无法ping通. 通过控制台查看发现有以下报错: error: ..…...
RabbitMQ-消息入队
1 分布式异步的问题 对于一个业务线的处理,如果是一个完整的处理,应该是消息正 常进入队列,同时消息正常被消费掉。 问题来了: 生产者发送消息,在传输过程中,消息丢失了,咋办? 消息发…...
Angular-生命周期及钩子函数
什么是生命周期 Angular 创建和渲染组件及其子组件,当它们绑定的属性发生变化时检查它们,并在从 DOM 中移除它之前销毁它们。生命周期函数通俗的讲就是组件创建、组件更新、组件销毁的时候会触发的一系列的方法。当 Angular 使用构造函数新建一个组件或…...
算法-高精度问题(带图详细解读~)
今天来分享四道大数运算的模板题. 目录 1. 大数相加2. 大数相减3. 大数相乘4. 大数相除 1. 大数相加 题目链接: LINK 基本思路: 存入数组, 模拟运算. 逆序字符串补零操作依次取数据, 依次相加 3-1 加: (t-ret s1[i] s2[i] carry) % 10; 3-2 进: (t-ret s1[i] s2[i] car…...
MC1.12.2 macOS高清修复OptiFine运行崩溃
最近在玩RLCraft,在windows中运行正常的,移植到macOS中发现如果加载OptiFine模组就会崩溃 报错日志 报错日志如下,其中已经包含了各种版本信息,我就不单独说明了。这里说一下,报错的时候用的是oracle jdk x64的&…...
Spring Boot教程之五十六:用 Apache Kafka 消费 JSON 消息
Spring Boot | 如何使用 Apache Kafka 消费 JSON 消息 Apache Kafka 是一个流处理系统,可让您在进程、应用程序和服务器之间发送消息。在本文中,我们将了解如何使用 Apache Kafka 在 Spring Boot 应用程序的控制台上发布 JSON 消息。 为了了解如何创建 …...
远程和本地文件的互相同步
文章目录 1、rsync实现类似git push pull功能1. 基础概念2. 示例操作3. 定制化和进阶用法4. 定时同步(类似自动化) 2 命令简化1. 动态传参的脚本2. Shell 函数支持动态路径3. 结合环境变量和参数(更简洁)4. Makefile 支持动态路径…...
在ES6模块中导入和导出
在ES6模块中导入和导出 以最简单的例子举例 //shoppingCart.js //导出模块 console.log(导出模块);//script.js //导出模块 import ./shoppingCart.js; console.log(导入模块);所以要导入其他模块必须指定类型 <script type"Modules" defer src"script.js&…...
centos使用dpdk库
yum -y install dpdk dpdk-devel 在 C 中使用 DPDK(Data Plane Development Kit)库通常涉及到以下几个步骤:安装 DPDK、配置编译环境、编写 C 代码并链接 DPDK 库。以下是如何在 C 中引用和使用 DPDK 的详细步骤。 1. 安装 DPDK 首先&#…...
ChatGLM:从GLM-130B到GLM-4全系列大语言模型
摘要 我们介绍了ChatGLM,这是一个不断进化的大语言模型系列,我们一直在持续开发中。本报告主要聚焦于GLM-4语言系列,包括GLM-4、GLM-4-Air和GLM-4-9B。它们代表了我们从ChatGLM前三代中汲取的所有见解和经验教训所训练出的最强大模型。迄今为…...
EF Core分页
Skip(3).Take(8) 最好显式指定排序规则需要知道满足条件的数据的总条数: 用IQueryable的复用 LongCount和Count页数:long pageCount (long)Math.Ceiling(count * 1.0 / pageSize); class Program {static async Task Main(string[] args){using (MyDbC…...
一种ESP8266+OLED时间天气显示
在当今这个信息爆炸的时代,人们对于获取实时信息的需求日益增长,尤其是在时间与天气这两个与日常生活息息相关的方面。而将 ESP8266 与 OLED 显示屏相结合制作的时钟兼天气显示设备,凭借其便携性、实时性以及低成本等优势,成为了众…...
LabVIEW光流跟踪算法
1. 光流跟踪算法的概述 光流(Optical Flow)是一种图像处理技术,用于估算图像中像素点的运动。通过比较连续帧图像,光流算法可以分析图像中的运动信息,广泛用于目标跟踪、运动检测和视频处理等场景。该示例使用了NI Vi…...
Nacos 配置与服务注册问题排查指南
Nacos 配置与服务注册问题排查指南 1. Nacos 配置文件优先级 在 Spring Boot 应用中,配置文件的优先级从高到低依次为: bootstrap.propertiesbootstrap.ymlapplication.propertiesapplication.yml 2. Nacos 配置中心配置示例 以下是一个典型的 Naco…...
浅谈云计算06 | 云管理系统架构
云管理系统架构 一、云管理系统架构(一)远程管理系统(二)资源管理系统(三)SLA 管理系统(四)计费管理系统 二、安全与可靠性保障(一)数据安全防线(…...
system securiry: supervisor password required
报错解释: 这个错误表明系统安全模块(如SELinux或AppArmor)需要超级用户(通常是root)的密码来确认一个操作。这通常发生在尝试进行某些需要高级权限的系统更改时。 解决方法: 如果你拥有root权限࿰…...