大家好,我是 boy 哥。
置信玩过爬虫的敌人都晓得 selenium
,一个自动化测试的神器工具。写个Python
自动化脚本解放双手基本上是惯例的操作了,爬虫爬不了的,就用自动化测试凑一凑。
尽管 selenium
有齐备的文档,但也须要肯定的学习老本,对于一个纯小白来讲还是有些门槛的。
最近,微软开源了一个我的项目叫「playwright-python
」,几乎碉堡了!这个我的项目是针对 Python
语言的纯自动化工具,连代码都不必写,就能实现自动化性能。
可能你会感觉有点不堪设想,但它就是这么厉害。上面咱们一起看下这个神器。
1. Playwright 介绍
Playwright
是一个弱小的 Python 库,仅用一个 API 即可主动执行 Chromium
、Firefox
、WebKit
等支流浏览器自动化操作,并同时反对以无头模式、有头模式运行。
Playwright 提供的自动化技术是绿色的、功能强大、牢靠且疾速,反对 Linux
、Mac
以及 Windows
操作系统。
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:规定生成脚本的语言,有
JS
和Python
两种,默认为 Python - -b:指定浏览器驱动
比方,我要在 baidu.com
搜寻,用 chromium
驱动,将后果保留为 my.py
的python
文件。
python -m playwright codegen --target python -o 'my.py' -b chromium https://www.baidu.com
命令行输出后会主动关上浏览器,而后能够看见在浏览器上的一举一动都会被主动翻译成代码,如下所示。
完结后主动敞开浏览器,保留生成的自动化脚本到 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/p…
同步
上面示例代码:顺次关上三个浏览器,返回 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/…
开源组织:Microsoft
原创不易,欢送点赞、在看、分享。
GitHub 开源我的项目精选,关注我的原创公众号:GitHuboy