当前位置: 首页 > news >正文

【自动化测试框架】python使用playwright示例

安装

pip install playwright
playwright install

使用示例

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto("https://playwright.cn")print(page.title())browser.close()
#面向现代 Web 应用的快速、可靠的端到端测试 | Playwright - Playwright 测试框架

异步使用

import asyncio
from playwright.async_api import async_playwrightasync def main():async with async_playwright() as p:browser = await p.chromium.launch()page = await browser.new_page()await page.goto("https://playwright.cn")print(await page.title())await browser.close()asyncio.run(main())

1.截图

启动浏览器,访问某个页面,截图,退出

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False,slow_mo=50)#取消无头,减慢执行page = browser.new_page()page.goto("https://playwright.cn/")page.screenshot(path="example.png")browser.close()

有头和无头你可以理解为是否让程序静默执行,还是显示他的模拟操作(即显示他的模拟浏览器操作,可视化)(即有程序浏览器 UI)
上面的程序没有设置有头或无头,所以默认是无头的。
我们想要看看程序是如何模拟的,可以开启有头模式。

2.执行JS代码

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.firefox.launch()page = browser.new_page()page.goto("https://playwright.cn/")dimensions = page.evaluate("""() => {return {width: document.documentElement.clientWidth,height: document.documentElement.clientHeight,deviceScaleFactor: window.devicePixelRatio}}""")print(dimensions)browser.close()
#{'width': 1280, 'height': 720, 'deviceScaleFactor': 1}

3.拦截网络请求,打印出来

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False,slow_mo=100)page = browser.new_page()def log_and_continue_request(route, request):print(request.url)route.continue_()# Log and continue all network requestspage.route("**/*", log_and_continue_request)page.goto("https://playwright.cn/")browser.close()

4.模拟地理位置

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:pixel_5 = p.devices["Pixel 5"]browser = p.chromium.launch(headless=False,slow_mo=100)context = browser.new_context(**pixel_5,locale="en-US",geolocation={"longitude": 12.492507, "latitude": 41.889938},permissions=["geolocation"])page = context.new_page()page.goto("https://www.google.com/maps")page.click("[aria-label='Show My Location']")page.wait_for_timeout(1000)page.screenshot(path="colosseum-iphone.png")browser.close()

每个 BrowserContext(浏览器上下文)都可以拥有多个页面。Page(页面)是指浏览器上下文中的单个选项卡或弹出窗口。它应被用于导航至 URL 并与页面内容进行交互。

5.必应搜索

from playwright.sync_api import sync_playwrightclass SearchPage:def __init__(self, page):self.page = pageself.search_term_input = page.locator('[aria-label="在此处输入你的搜索 — 输入时会显示搜索建议"]')def navigate(self):self.page.goto("https://bing.com")def search(self, text):self.search_term_input.fill(text)self.search_term_input.press("Enter")with sync_playwright() as p:# in the testbrowser = p.chromium.launch(headless=False,slow_mo=100)page = browser.new_page()search_page = SearchPage(page)search_page.navigate()search_page.search("search query")time.sleep(3)

6.屏幕录制

import timefrom playwright.sync_api import sync_playwright
from playwright.sync_api import expectclass SearchPage:def __init__(self, page):self.page = pageself.search_term_input = page.locator('[aria-label="在此处输入你的搜索 — 输入时会显示搜索建议"]')def navigate(self):self.page.goto("https://www.bing.com")def search(self, text):self.search_term_input.fill(text)if expect(self.search_term_input).to_have_value(text):self.search_term_input.press("Enter")else:self.search_term_input.fill(text)self.search_term_input.press("Enter")with sync_playwright() as p:# in the testbrowser = p.chromium.launch(headless=False,slow_mo=100,args=["--start-maximized"])#全屏context = browser.new_context(no_viewport=True,record_video_dir="./videos/",record_video_size={"width": 1280, "height": 720})page = context.new_page()search_page = SearchPage(page)search_page.navigate()search_page.search("search query")time.sleep(3)

7.打开本地浏览器

import subprocess
import time
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:edge_path = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" #实际上你下载edge的目录# 方案1:使用正确的参数格式cmd = [edge_path,"--remote-debugging-port=9222","--remote-debugging-address=127.0.0.1"  # 指定使用 IPv4]# 启动浏览器process = subprocess.Popen(cmd, shell=False)# 等待浏览器完全启动time.sleep(3)# 使用 IPv4 地址连接browser = p.chromium.connect_over_cdp("http://127.0.0.1:9222")# 打印所有已有页面,帮助调试if browser.contexts and browser.contexts[0].pages:page = browser.contexts[0].pages[0]else:page = browser.contexts[0].new_page()# 获取页面page.goto("https://www.bing.com")  # 或你要用的搜索引擎page.wait_for_load_state("networkidle")  # 等待页面完全加载time.sleep(2)  # 额外等待,确保动态内容加载

#id_name对应的属性是id="..."井号代表 ID元素的 ID 往往是唯一的,首选使用

.class_name对应的属性是class="..."点号代表 Class元素有特定的样式类名时使用。

divinput标签名直接写标签页面标签比较少,或者需要缩小范围时。

[name="username"]任意属性方括号代表属性没有特殊的 id/class,但有其他特征属性时。

page.locator("#main-card")        # 通过 ID 找 (最推荐)
page.locator(".card-style")       # 通过 Class 找
page.locator("div")               # 通过标签找 (如果页面只有一个div)
page.locator("[data-type='bonus']") # 通过自定义属性找

打包

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto("https://playwright.cn/")page.screenshot(path="example.png")browser.close()
PLAYWRIGHT_BROWSERS_PATH=0 playwright install chromium
pyinstaller -F main.py
http://www.jsqmd.com/news/835251/

相关文章:

  • 2026年电动阀门优选方案:国内一线龙头澳翔自控名单 - 新闻快传
  • 抖音保存的视频水印怎样抹掉去除 新手入门实操教程 - 爱上科技热点
  • 高清无水印保存视频详细攻略 普通人轻松上手学 - 爱上科技热点
  • 南充市场警示标识|2026年5月(上、中、下旬)工厂定制及政策|华蔓广告设计制作指导价 - 四川华蔓广告有限公司
  • 实用无水印保存视频小技巧 各类短视频均可适用 - 爱上科技热点
  • 南充市场展架|2026年5月(上、中、下旬)工厂定制及政策|华蔓广告设计制作指导价 - 四川华蔓广告有限公司
  • 南充市场易拉宝|2026年5月(上、中、下旬)工厂定制及政策|华蔓广告设计制作指导价 - 四川华蔓广告有限公司
  • AI英语教育下半场:加盟还是品牌合作?拆解智学果“人机协作”的规模化密码 - GrowthUME
  • Go Gin 框架怎么实现自定义 RBAC 权限控制的 API 鉴权?
  • 南充市场围挡安装|2026年5月(上、中、下旬)工厂定制及政策|华蔓广告设计制作指导价 - 四川华蔓广告有限公司
  • Jstack定位生产环境线程阻塞问题解决
  • 2026 东莞贴膜门店排行榜 真实靠谱|各镇街优选(无隐形消费) - 元点智创
  • 【技术测评】3款主流AI检测工具横向测评,真实数据公开
  • Java面向对象程序设计——三次作业集总结
  • 面向对象程序设计三次作业集学习总结
  • 2026年电动阀门优选方案:国内一线龙头澳翔自控 - 新闻快传
  • 国内如何使用 OpenAI Codex CLI:完整配置指南
  • 2026年电动执行器选型,澳翔自控是你明智的选择 - 新闻快传
  • 南充市场灯光舞台|2026年5月(上、中、下旬)定制及政策|华蔓广告策划指导价 - 四川华蔓广告有限公司
  • 膨胀型钢结构防火涂料源头厂家推荐 - 品牌排行榜
  • 2026年5月国内贴标机厂家品牌推荐榜单:陶山包装领衔,同赋能包装自动化升级 - 新闻快传
  • 360浏览器安装Chrome广告插件
  • 南充市场演艺主持|2026年5月(上、中、下旬)定制及政策|华蔓广告策划指导价 - 四川华蔓广告有限公司
  • 2026年选电动执行器?国内一线龙头澳翔自控就是答案 - 新闻快传
  • 市面上好用的非膨胀型钢结构防火涂料厂商排行榜 - 品牌排行榜
  • 2026 南京考研机构上岸率怎么看?五大硬核评判标准 + 真实数据拆解 + 实用 FAQ - 小艾信息发布
  • 南充市场泡沫板-雪弗板|2026年5月(上、中、下旬)工厂定制及政策|华蔓广告牌设计制作指导价 - 四川华蔓广告有限公司
  • 市面上好用的膨胀型钢结构防火涂料产品有哪些 - 品牌排行榜
  • 2026年论文AIGC率98%?四招高效去AI痕迹,稳过AI检测审核! - 降AI实验室
  • 2026长沙奢侈品回收优质店家,闲置回收不套路! - 诚鑫名品