首页 > 编程语言 >python+playwright 学习-61 Playwright 和 Selenium 的区别是什么?

python+playwright 学习-61 Playwright 和 Selenium 的区别是什么?

时间:2023-10-12 17:13:55浏览次数:53  
标签:Playwright python Selenium 元素 selenium playwright 监听

前言

最近有不少同学问到 Playwright 和 Selenium 的区别是什么?
有同学可能之前学过 selenium 了,再学一个 playwright 感觉有些多余,可能之前有项目已经是 selenium 写的了,换成 playwright 需要时间成本,并且可能有未知风险。
也有同学之前可能没学过 selenium ,现在正准备入手一个web 自动化框架,但是对于选择selenium 和 playwright 犹豫不决,因为面试问selenium比较多,可能学了工作中也用不上,仅仅只是应付面试。
不管出于哪种原因,本篇详细分析 2 者的差异

Playwright 和 Selenium 的区别

编号功能PlaywrightSelenium哪个更优秀
1 学习资料 相对少 Selenium
2 用户群体 出现的比较晚,用户量相对少 出现的早,用户量多 Selenium
3 支持语言 TypeScript、JavaScript、Python、.NET、Java C#,Java,Perl,PHP,Python 和Ruby Selenium
4 支持浏览器 Chromium(包含chrome, msedge)、WebKit 和 Firefox IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera,Edge等 Selenium
5 跨平台 Windows,Linux(只支持Ubuntu部分系统) ,Mac Windows,Linux,Mac 都支持 Selenium
6 浏览器安装 命令行安装 自己安装 Playwright
7 浏览器驱动 不需要驱动 下载对应版本驱动 Playwright
8 启动速度 Playwright
9 context 环境隔离 Playwright
10 headless 无头模式 默认headless, 也可以设置GUI 默认GUI模式,也可以设置headless Playwright
11 无痕模式 默认无痕模式,对应测试很有帮助,对于爬虫用户可能访问页面不通过 默认非无痕默认,爬虫用户特别喜欢 Selenium
12 页面等待 wait_for_load_state可以精准等待commit,domcontentloaded,load,networkidle四种状态 implicitly_wait等待页面加载完成 Playwright
13 元素定位 提供多个内置定位器,定位方式更贴近业务,定位方式更多 八大定位 Playwright
14 元素等待 定位元素自带等待机制 需要自己封装等待方法 Playwright
15 点击元素等操作 会判断元素状态,出现位置,是否可点击智能判断 需要自己封装webdriverwait.until方法,难度较大 Playwright
16 定位报错 会人性化告诉你定位到几个元素,并推荐定位方式 报错需要自己去猜谜,自己排除各种可能性 Playwright
17 元素不在当前屏幕 会判断元素位置,自动滚动元素出现位置 需要自己去判断滚动 Playwright
18 iframe 通过对象操作,不用切换 需要来回切换 Playwright
19 alert 默认监听自动关闭,可以异步监听 需要自己判断,无异步监听 Playwright
20 文件上传 监听文件上传时间,处理优雅 无法解决非input 上传 Playwright
21 文件下载 可以监听下载 只能设置浏览器默认位置 Playwright
22 多窗口标签 可以监听窗口事件,操作方便 需要来回切换 Playwright
23 事件监听 可以监听各种事件 无法监听 Playwright
24 捕获ajax 请求 可以捕获ajax 请求和 返回 无法捕获 Playwright
25 mock 功能 可以模拟想要的任何接口数据 无mock 功能 Playwright
26 断言 提供expect 丰富断言 需要自己封装webdriverwait.until方法,难度较大 Playwright
27 录制视频 录制用例视频 Playwright
28 trace 追踪 Playwright
29 断点调试 Playwright
30 录制 可以生成pytest用例 录制功能比较简单 Playwright
31 鼠标键盘操作 调用简单方便 导入模块,操作复杂 Playwright
32 base_url 可以添加全局base_url 无此功能 Playwright
33 接口测试 提供接口测试 无此功能 Playwright
34 grid 分布式 selenium-grid 分布式 Selenium
35 协议 websockt 协议,可以实时获取页面状态 http 协议,只能获取当时的状态,需自己轮询判断 Playwright
36 执行JavaScript 可以在page,iframe,元素对象执行JavaScript 只能在driver对象执行JavaScrip Playwright
37 async异步 有同步和异步2种方式 无异步代码 Playwright
38 面试 要求playwright 比较少 问selenium 比较多 Selenium
39 学习难易程度 容易,无需封装,直接用 难度较大,需要封装 Playwright

总结:
Playwright的优点是简单方便、功能强大、稳定性高,缺点是相对新,用户群体少,学习资料少。
Selenium的优点是灵活性高、用户群体大、学习资料多,缺点是需要自己封装或者导入其他模块来实现一些功能,启动速度慢,稳定性差。

总体打分selenium 8分, playwright 31 分,如果你是新手,毫不犹豫应该直接学playwright

标签:Playwright,python,Selenium,元素,selenium,playwright,监听
From: https://www.cnblogs.com/Im-Victor/p/17759937.html

相关文章

  • Python - 深拷贝一个带有指向自身引用的列表,会报错么?紧接着用==比较,会报错么?
    问题描述深拷贝一个带有指向自身引用的列表:列表x中有指向自身的引用,因此x是一个无限嵌套的列表。importcopyx=[1]x.append(x)>>x[1,[...]]y=copy.deepcopy(x)>>y[1,[...]] 深拷贝不报错但是我们发现深度拷贝x到y后,程序并没有出现stackoverf......
  • 动物识别系统python+Django网页界面+TensorFlow算法模型+数据集训练
    一、简介动物识别系统。基于Python+TensorFlow+Django网页框架+ResNet50算法模型实现实现步骤如下:收集多种动物的图片数据集,并整理归类然后使用TensorFlow搭建ResNet50算法模型网络对数据集进行多次迭代训练最后得到一个精度较高的H5模型文件基于训练好的模型,使用Django开......
  • Python 列表详解:从基础到进阶
    Python是一种广泛使用的高级编程语言,它的设计强调代码的可读性和简洁的语法。Python支持多种编程范式,包括过程、面向对象和函数式编程。在Python中,列表是一种非常重要的数据类型,它可以包含各种类型的元素,如数字、字符串和其他列表。本文将详细介绍Python列表的基础和进阶用法。【基......
  • python beautifulsoup
    beautifulsoup1.安装pipinstallbeautifulsoup4如果这个安装不了,就手动下载安装:下载地址:https://www.crummy.com/software/BeautifulSoup/bs4/download/4.5/解压后执行pythonsetup.pyinstall拷贝python安装目录下的C:\ProgramFiles\python\Tools\scripts\2to3.py文......
  • selenium——clear()使用了不生效,解决输入框没法清空的情况
    前提:今天研究web自动化,准备模拟一个修改名称的操作,想的是定位都输入框元素,然后使用clear()方法清空输入框内容,再重新输入一些内容结果实际上发现并没有清空输入框内容,而是直接在输入框后面追加了(这里就可以确定元素肯定是定位到了的)clear()方法为什么会失效不得而知,在网上搜索......
  • python_批量处理excel文件
    情况pipinstallopenpyxlpipinstallxlrd数据Excel文件的格式为xls和xlsx,pandas读取excel文件需要安装依赖库xlrd和openpyxl。!注意:当xlrd>=2.0时,只支持xls格式,不再支持xlsx。数据代码importpandasaspdimportosimportjsonif__name__=="__main__":e......
  • Selenium打开网页时保持登陆状态
    前言今天在学习selenium的时候,每次调试网页都会打开一个新的浏览器窗口,当我想要做某些操作的时候就需要自己再去模拟登陆,太浪费时间了。那么要怎么样才能在打开网页的时候直接就是登陆状态呢?使用下面的方法就可以直接加载登陆过后的保存在本地的信息,而且不再需要手动登陆上代......
  • 使用python来对字符编码序列进行互转
    排查字符集问题时,有的时候发生乱码不知道如何生成的字符,此时就需要通过字节序列来判断该字符是什么。已知utf8字节序列时,转换为unicode或者gb18030字节序列:>>>a=b'\xef\xbc\xa1'#此时a是一个bytes对象>>>b=a.decode("utf8")#此时b是一个str对象,内部是unicode的编码字......
  • selenium系列:三(配置)
    ChromeOptionsChromeOptionsoptions=newChromeOptions();setPageLoadStrategy等待策略options.setPageLoadStrategy(PageLoadStrategy.NORMAL);PageLoadStrategy.NORMAL正常情况下,selenium会等待整个界面加载完成(指对html和子资源的下载与解析,入JS文件,图片等,不包含ajax)PageLo......
  • 【Python&语义分割】Segment Anything(SAM)模型全局语义分割代码+掩膜保存(二)
    ​ 我上篇博文分享了SegmentAnything(SAM)模型的基本操作,这篇给大家分享下官方的整张图片的语义分割代码(全局),同时我还修改了一部分支持掩膜和叠加影像的保存。1SegmentAnything介绍1.1概况        MetaAI公司的SegmentAnything模型是一项革命性的技术,该模型能......