selenium的挑战者 - playwright简析
简介
今年(2021年)微软开源了一个项目叫「playwright-python」,Playwright 是针对 Python 语言的纯自动化工具,它可以通过单个API自动执行 Chromium,Firefox 和 WebKit 浏览器,同时支持以无头模式、有头模式运行。
playwright官网
支持浏览器端的录制,生成自动化脚本,支持无头跑脚本
速度快,基本是selenium的好几倍,且支持浏览器异步运行
自动等待API,可拦截请求,随意mock
官方API
点击
搭建环境
安装库
pip install playwright
安装浏览器
python -m playwright install
录制脚本示例
命令行输入python -m playwright codegen
,会自动弹出一个浏览器和代码文本框, 在浏览器输入www.baidu.com,然后输入ceshiyixia,结束录制,效果如图:
示例
模拟手机safari浏览器打开谷歌地图,定位到某个地点,然后截图
from playwright.sync_api import sync_playwright
import timewith sync_playwright() as p:iphone_11 = p.devices['iPhone 11 Pro']browser = p.webkit.launch(headless=False)context = browser.new_context(**iphone_11,locale='en-US',geolocation={ 'longitude': 12.492507, 'latitude': 41.889938 },permissions=['geolocation'])page = context.new_page()page.goto('https://maps.google.com')page.click('text="Your location"')time.sleep(5)page.screenshot(path='colosseum-iphone.png')browser.close()
其他
Headless 和 headful: Playwright支持所有平台和浏览器上使用Headless模式和Headful模式。Headful非常适合调试。Headless运行更快,也可以更方便的在CI/云平台上运行。headless默认开启,设置为false,即为 headful模式,可以看到自动化的过程。
对比selenium
一家外网对比文章
简单来说以下几方面playwright有点优势:
执行速度 - playwright运行时可以通过设置
Headless
后台直接运行,不用展示过程Actionability - playwright不需要在代码中做等待判断,例如等待下一个页面出现时再点击某个按钮,这在playwright中会自动判断. 而selenium在代码中几乎每个点击都需要手动加入判断,甚至加入延迟时间,延迟时间加多了的话,极大影响执行效率.
Selectors - 在playwright中可以直接通过页面文本字符来选择对应元素.
Multi-tab & frames
参考
https://www.cnblogs.com/fnng/p/14274960.html
https://www.cnblogs.com/fnng/p/14311181.html
https://www.linkedin.com/pulse/playwright-selenium-next-15-years-mark-percival
selenium的挑战者 - playwright简析相关推荐
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- 简析平衡树(三)——浅谈Splay
前言 原本以为\(Treap\)已经很难了,学习了\(Splay\),我才知道,没有最难,只有更难.(强烈建议先去学一学\(Treap\)再来看这篇博客) 简介 \(Splay\)是平衡树中的一种,除 ...
- 基于libmad库的MP3解码简析
基于libmad库的MP3解码简析 MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3). ...
- 简析 .NET Core 构成体系
简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...
- Python源码学习:内建类型简析并简析int对象
Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一篇文章中已经大致分析了下,Python的启动执行流程,现在我们分析一下Pytho ...
- Python源码学习:启动流程简析
Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> Python简介: python主要是动态语言,虽然Python语言也有编译,生成中 ...
- 简析TCP的三次握手与四次分手【转】
转自 简析TCP的三次握手与四次分手 | 果冻想 http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇 ...
- ceph存储原理_Ceph存储引擎BlueStore简析
前文我们创建了一个单节点的Ceph集群,并且创建了2个基于BlueStore的OSD.同时,为了便于学习,这两个OSD分别基于不同的布局,也就是一个OSD是基于3中不同的存储介质(这里是模拟的,并非真 ...
- Android Jetpack组件App Startup简析
1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...
最新文章
- python 文件追加写入_Python写入文件–解释了打开,读取,追加和其他文件处理功能
- String,StringBuffer与StringBuilder的区别??
- boost::mp11::mp_sort_q相关用法的测试程序
- SparkSQL之External Data读写parquet
- Unix/Linux环境C编程入门教程(18) kali-linuxCCPP开发环境搭建
- RocketMQ如何动态扩容和缩容
- PHP合并大文件 高性能 低内存 低CPU 快速合并大文件 非耗时操作 快速合并PDF等影视大文件...
- 在Java中编码为Base64
- Emacs:报错:File error: Cannot open load file,cl-lib解决
- KNN(k-nearest neighbor algorithm)--从原理到实现
- SketchUp 2019 组件库的正确应用
- Granger格兰杰因果关系的设计、基本假设和额外要求
- 安卓手机云控系统框架源码,PHP+Autojs, ,这套是空框架源码
- 逃离华强北后 他们去哪儿?采访身边真实故事——华强北电脑维修 内迁 张家界电脑维修 电子市场电脑维修
- mysql免安装版修改密码
- JS密码校验规则前台验证(不能连续字符(如123、abc)连续3位或3位以上)(不能相同字符(如111、aaa)连续3位或3位以上)
- Envoy代理GRPC服务支持通过restful进行访问
- 【网络安全】细分领域总览
- 【算法】搜索算法—盲目搜索和启发式搜索
- 完美的扎克伯格,倒霉的Facebook