微软开源最强Python自动化神器Playwright(不用写一行代码)


Posted in Python onJanuary 05, 2021

相信玩过爬虫的朋友都知道selenium,一个自动化测试的神器工具。写个Python自动化脚本解放双手基本上是常规的操作了,爬虫爬不了的,就用自动化测试凑一凑。

虽然selenium有完备的文档,但也需要一定的学习成本,对于一个纯小白来讲还是有些门槛的。

最近,微软开源了一个项目叫「playwright-python」,简直碉堡了!这个项目是针对Python语言的纯自动化工具,连代码都不用写,就能实现自动化功能。

微软开源最强Python自动化神器Playwright(不用写一行代码)

可能你会觉得有点不可思议,但它就是这么厉害。下面我们一起看下这个神器。

1. Playwright介绍

Playwright是一个强大的Python库,仅用一个API即可自动执行ChromiumFirefoxWebKit等主流浏览器自动化操作,并同时支持以无头模式、有头模式运行。

Playwright提供的自动化技术是绿色的、功能强大、可靠且快速,支持LinuxMac以及Windows操作系统。

微软开源最强Python自动化神器Playwright(不用写一行代码)

2. Playwright使用

安装

Playwright的安装非常简单,两步走。

# 安装playwright库
pip install playwright

# 安装浏览器驱动文件(安装过程稍微有点慢)
python -m playwright install

上面两个pip操作分别安装:

  • 安装Playwright依赖库,需要Python3.7+
  • 安装Chromium、Firefox、WebKit等浏览器的驱动文件

录制

使用Playwright无需写一行代码,我们只需手动操作浏览器,它会录制我们的操作,然后自动生成代码脚本。

下面就是录制的命令codegen,仅仅一行。

# 命令行键入 --help 可看到所有选项
python -m playwright codegen

codegen的用法可以使用--help查看,如果简单使用就是直接在命令后面加上url链接,如果有其他需要可以添加options

python -m playwright codegen --help
Usage: index codegen [options] [url]

open page and generate code for user actions

Options:
 -o, --output <file name> saves the generated script to a file
 --target <language>  language to use, one of javascript, python, python-async, csharp (default: "python")
 -h, --help    display help for command

Examples:

 $ codegen
 $ codegen --target=python
 $ -b webkit codegen https://example.com

options含义:

  • -o:将录制的脚本保存到一个文件
  • ?target:规定生成脚本的语言,有JSPython两种,默认为Python
  • -b:指定浏览器驱动

比如,我要在baidu.com搜索,用chromium驱动,将结果保存为my.pypython文件。

python -m playwright codegen --target python -o 'my.py' -b chromium https://www.baidu.com

命令行输入后会自动打开浏览器,然后可以看见在浏览器上的一举一动都会被自动翻译成代码,如下所示。

微软开源最强Python自动化神器Playwright(不用写一行代码)

结束后自动关闭浏览器,保存生成的自动化脚本到py文件。

from playwright import sync_playwright

def run(playwright):
 browser = playwright.chromium.launch(headless=False)
 context = browser.newContext()

 # Open new page
 page = context.newPage()

 page.goto("https://www.baidu.com/")

 page.click("input[name=\"wd\"]")

 page.fill("input[name=\"wd\"]", "jingdong")

 page.click("text=\"京东\"")
 
 # Click //a[normalize-space(.)='京东JD.COM官网 多快好省 只为品质生活']
 with page.expect_navigation():
  with page.expect_popup() as popup_info:
   page.click("//a[normalize-space(.)='京东JD.COM官网 多快好省 只为品质生活']")
  page1 = popup_info.value
 # ---------------------
 context.close()
 browser.close()

with sync_playwright() as playwright:
 run(playwright)

此外,playwright还提供了同步和异步的API接口,文档如下。

链接:https://microsoft.github.io/playwright-python/index.html

同步

下面示例代码:依次打开三个浏览器,前往baidu搜索,截图后退出。

from playwright import sync_playwright

with sync_playwright() as p:
 for browser_type in [p.chromium, p.firefox, p.webkit]:
  browser = browser_type.launch()
  page = browser.newPage()
  page.goto('https://baidu.com/')
  page.screenshot(path=f'example-{browser_type.name}.png')
  browser.close()

异步

异步操作可结合asyncio同时进行三个浏览器操作。

import asyncio
from playwright import async_playwright

async def main():
 async with async_playwright() as p:
  for browser_type in [p.chromium, p.firefox, p.webkit]:
   browser = await browser_type.launch()
   page = await browser.newPage()
   await page.goto('http://baidu.com/')
   await page.screenshot(path=f'example-{browser_type.name}.png')
   await browser.close()

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

移动端

更厉害的是,playwright还可支持移动端的浏览器模拟。
下面是官方文档提供的一段代码,模拟在给定地理位置上手机iphone 11 pro上的Safari浏览器,首先导航到maps.google.com,然后执行定位并截图。

from playwright import sync_playwright

with sync_playwright() as p:
 iphone_11 = p.devices['iPhone 11 Pro']
 browser = p.webkit.launch(headless=False)
 context = browser.newContext(
  **iphone_11,
  locale='en-US',
  geolocation={ 'longitude': 12.492507, 'latitude': 41.889938 },
  permissions=['geolocation']
 )
 page = context.newPage()
 page.goto('https://maps.google.com')
 page.click('text="Your location"')
 page.screenshot(path='colosseum-iphone.png')
 browser.close()

另外,还可以配合pytest插件一起使用,感兴趣可以自己试一下。

3. 总结

playwright相比已有的自动化测试工具有很多优势,比如:

  • 跨浏览器,支持Chromium、Firefox、WebKit
  • 跨操作系统,支持Linux、Mac、Windows
  • 可提供录制生成代码功能,解放双手
  • 可用于移动端

目前存在的缺点就是生态和文档还不是非常完备,比如没有API中文文档、没有较好的教程和示例供学习。不过相信,随着知道的人越来越多,未来会越来越好。

GitHub链接:https://github.com/microsoft/playwright-python

开源组织:Microsoft

到此这篇关于微软开源最强Python自动化神器Playwright(不用写一行代码)的文章就介绍到这了,更多相关Python Playwright内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
利用Python开发微信支付的注意事项
Aug 19 Python
PyQt5每天必学之组合框
Apr 20 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 Python
详解pytorch 0.4.0迁移指南
Jun 16 Python
浅谈django2.0 ForeignKey参数的变化
Aug 06 Python
python字典排序的方法
Oct 12 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
深入浅析Python 函数注解与匿名函数
Feb 24 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
Python读取ini配置文件传参的简单示例
Jan 05 #Python
matplotlib实现数据实时刷新的示例代码
Jan 05 #Python
Matplotlib配色之Colormap详解
Jan 05 #Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
Jan 05 #Python
python实现文件+参数发送request的实例代码
Jan 05 #Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 #Python
Matplotlib中rcParams使用方法
Jan 05 #Python
You might like
Terran剧情介绍
2020/03/14 星际争霸
thinkphp控制器调度使用示例
2014/02/24 PHP
淘宝搜索框效果实现分析
2011/03/05 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
Python求出0~100以内的所有素数
2018/01/23 Python
详解Python中的type和object
2018/08/15 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
python 格式化输出百分号的方法
2019/01/20 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
Python类class参数self原理解析
2020/11/19 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
加拿大时装零售商:Influence U
2018/12/22 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
物资采购管理制度
2015/08/06 职场文书
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
如何基于python实现单目三维重建详解
2022/06/25 Python