这是我参与更文挑战的第4天,活动详情查看: 更文挑战
什么是 Playwright-python
Playwright 可在所有现代浏览器中实现快速、可靠且功能强大的自动化。
本指南涵盖了这些关键差异化因素,以帮助您为自动化测试选择合适的工具。
-
支持所有浏览器
-
快速可靠的执行
-
强大的自动化能力
-
与您的工作流程集成
-
限制
-
发行说明
支持多种浏览器(3.8版本python安装了chromium、firefox、webkit、ffmpeg 四种浏览器驱动)
在 Chromium、Firefox 和 WebKit 上进行测试。
**
Playwright 拥有适用于所有现代浏览器的完整 API,包括 Google Chrome 和 Microsoft Edge(带有Chromium)、Apple Safari(带有WebKit)和 Mozilla Firefox。
跨平台 WebKit 测试。
**
借助 Playwright,使用适用于 Windows、Linux 和 macOS 的 WebKit 构建测试您的应用在 Apple Safari 中的行为。在本地和 CI 上进行测试。
测试手机。
**
使用设备模拟在移动 Web 浏览器中测试您的响应式 Web 应用程序。
无头和有头。
**
Playwright 支持所有浏览器和所有平台的无头(无浏览器 UI)和有头(带浏览器 UI)模式。
Headed 非常适合调试,而 Headless 速度更快,适合 CI/云执行。
快速可靠的执行
自动等待 API。
**
Playwright interactions会
自动等待元素
准备就绪。这提高了可靠性并简化了测试编写。
无超时自动化。
**
Playwright 接收浏览器信号,如网络请求、页面导航和页面加载事件,以消除导致不稳定的睡眠超时的需要。
与浏览器上下文的精益并行化。
**
将单个浏览器实例重用于具有
浏览器上下文的
多个并行化、隔离的执行环境。
弹性元素选择器。
**
剧作家可以依靠面向用户的字符串(如文本内容和可访问性标签)来
选择元素
。
这些字符串比紧密耦合到 DOM 结构的选择器更具弹性。
强大的自动化功能
多个域、页面和框架。
**
Playwright 是一个进程外自动化驱动,不受页内 JavaScript 执行范围的限制,可以自动化
多页场景。
强大的网络控制。
**
Playwright 引入了上下文范围的
网络拦截
来存根和模拟网络请求。
现代网络功能。
**
Playwright 通过
阴影穿透选择器
、
地理定位、权限
、网络工作者和其他现代网络 API支持网络组件。
覆盖所有场景的能力。
**
支持文件下载和上传、进程外 iframe、本机输入事件,甚至暗模式。
安装
准备Python3.8版本的环境,我用了python3.9的环境 在安装谷歌驱动的时候始终卡在最后一步下不去,网上也没找到什么好的解释。在我就要放弃的时候,重新安装了python3.8的环境,并且架了梯子,终于安装成功了。所以你如果安装失败了,可以试试用python3.8的环境看看
新建一个python项目
安装依赖
pip install playwright
python -m playwright install
安装完成
使用
官方文档:playwright.dev/python/docs…
Github地址:github.com/microsoft/p…
接下来我们看看官方文档
读取链接标题
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# 选择浏览器
browser = p.chromium.launch()
#打开页面跳转至 https://blog.csdn.net/tangcv
page = browser.new_page()
page.goto("https://blog.csdn.net/tangcv")
# 打印标签
print(page.title())
browser.close()
Playwright 支持 API 的两种变体:同步和异步。
如果您的现代项目使用 asyncio,您应该使用 async API:
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://blog.csdn.net/tangcv")
print(await page.title())
await browser.close()
asyncio.run(main())
屏幕截图
减慢浏览器访问速度
chromium.launch(headless=False, slow_mo=50)
记录脚本
命令行界面 CLI 可用于记录用户交互并生成 Python 代码。
浏览器打开页面 blog.csdn.net/tangcv
playwright codegen https://blog.csdn.net/tangcv
浏览器全部操作都会录制成脚本
from playwright.sync_api import sync_playwright
def run(playwright):
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
# Open new page
page = context.new_page()
# Go to https://www.wikipedia.org/
page.goto("https://www.wikipedia.org/")
# Go to https://mp.weixin.qq.com/s/-i8E_jeApjQ2bGASk-ai9w
page.goto("https://mp.weixin.qq.com/s/-i8E_jeApjQ2bGASk-ai9w")
# Click text=阅读原文 阅读
page.click("text=阅读原文 阅读")
# Click p:nth-child(169)
page.click("p:nth-child(169)")
# Click text=移动联通电信话费91折充值
page.click("text=移动联通电信话费91折充值")
# assert page.url == "https://mp.weixin.qq.com/s?__biz=MzI3NjYxMzI1NQ==&mid=2247484610&idx=2&sn=cafaa6f7cf2287b6c06fecf1b95eb8d8&chksm=eb73952adc041c3c6fd3863ecf7914809026092b32286138e2b959035b848f24bc5f520e167c&scene=21#wechat_redirect"
# Click p:has-text("慢充24-72小时到账")
page.click("p:has-text(\"慢充24-72小时到账\")")
# Click span:has-text("移动联通电信话费")
page.click("span:has-text(\"移动联通电信话费\")")
# Click img[alt="图片"]
page.click("img[alt=\"图片\"]")
# Click text=程序工厂 程序工厂 微信号 fuwuhao911 功能介绍 专注于黑科技软件、最新影视资源、外卖优惠券、电商优惠券、以及各种收费资源 1周前
page.click("text=程序工厂 程序工厂 微信号 fuwuhao911 功能介绍 专注于黑科技软件、最新影视资源、外卖优惠券、电商优惠券、以及各种收费资源 1周前")
# Go to https://mp.weixin.qq.com/s/-i8E_jeApjQ2bGASk-ai9w
page.goto("https://mp.weixin.qq.com/s/-i8E_jeApjQ2bGASk-ai9w")
# Click #page-content
page.click("#page-content")
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)