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

playwright基础样例demo大全

playwright

    • 安装
    • 优点
    • 基础示例
      • 同步代码
      • 异步代码
      • 启动不同浏览器
      • 启用本地浏览器(使用浏览器cookie信息)
      • playwright页面接管
        • 设置环境变量和cmd启动浏览器
      • 窗口最大化
      • 录制脚本
        • 录制脚本保存身份验证状态
        • 代码中保存身份状态信息
        • 代码中读取身份状态信息
    • playwright发送api接口请求

安装

pip install pytest-playwright
playwright install

优点

  • 支持异步操作(assync_api)
  • 同步操作调用:sync_api

基础示例

同步代码

from playwright.sync_api import sync_playwright

with sync_playwright() as playwright:
    browser = playwright.chromium.launch()
    page = browser.new_page()
    page.goto('https://www.baidu.com')
    print(page.title())
    browser.close()

异步代码

  • 异步代码需要两个关键字:asyncawait
  • 异步方法启动需要使用导入asyncio包,运行asyncio.run()执行main()方法。
import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        # headless = False : 是否启动无头模式,无头模式是不弹出浏览器,后台运行
        browser = await p.chromium.launch(headless=False)
        page = await browser.new_page()
        await page.goto('https://www.baidu.com')
        print(await page.title())

        await browser.close()

asyncio.run(main())

启动不同浏览器

  • 浏览器默认情况下是以无痕模式启动
  • channel:“chrome”, “chrome-beta”, “chrome-dev”, “chrome-canary”, “msedge”, “msedge-beta”, “msedge-dev”, or “msedge-canary”
  • chromium:谷歌开源内核
def run(playwright: Playwright) -> None:
    # "chrome", "chrome-beta", "chrome-dev", "chrome-canary", "msedge", "msedge-beta", "msedge-dev", or "msedge-canary"
    browser = playwright.chromium.launch(headless=False, channel='msedge')
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://www.baidu.com/")
    # ---------------------
    context.close()
    browser.close()
    
with sync_playwright() as playwright:
    run(playwright)
  • 火狐

from playwright.sync_api import sync_playwright
with sync_playwright() as playwright:
	# 火狐
    browser_f = playwright.firefox.launch()
    page = browser_f.new_page()
    page.goto('https://www.bing.com')
    print(page.title())
    browser_f.close()

启用本地浏览器(使用浏览器cookie信息)

from playwright.sync_api import Playwright, sync_playwright
import getpass

user_data_dir = fr'C:\Users\{getpass.getuser()}\AppData\Local\Google\Chrome\User Data'

def run(playwright: Playwright) -> None:
    context = playwright.chromium.launch_persistent_context(
        # 本地浏览器的数据目录
        user_data_dir=user_data_dir,
        # 指定Google
        channel='chrome',
        # 无头模式
        headless=False
    )
    page = context.new_page()
    page.goto("https://www.baidu.com/")

    page.pause()
    # ---------------------
    context.close()

with sync_playwright() as playwright:
    run(playwright)

playwright页面接管

  • 针对场景:退出浏览器就需要重新登录,并且存在复杂的验证信息
设置环境变量和cmd启动浏览器
  1. 将起始位置添加到环境变量中,并且保证cmd命令窗口输出chrome直接启动浏览器。
    在这里插入图片描述
  2. 在cmd窗口中,输入启动命令和配置参数信息。
  • 指定端口:--remote-debugging-port=8888
  • 指定浏览器数据目录:--user-data-dir="D:\playwright_chrome_user_data"
chrome --remote-debugging-port=8888 --user-data-dir="D:\playwright_chrome_user_data"

在这里插入图片描述
3. 使用cdp链接chrome浏览器。

from playwright.sync_api import Playwright, sync_playwright


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.connect_over_cdp('http://localhost:8888')
    page = browser.contexts[0].pages[0]
    page.goto("https://www.baidu.com/")

    page.pause()
    # ---------------------
    page.close()


with sync_playwright() as playwright:
    run(playwright)

窗口最大化

  • --start-maximized:该参数来源是chromium浏览器命令行参数列表,https://peter.sh/experiments/chromium-command-line-switches/。
  • no_viewport=True
import re
from playwright.sync_api import Playwright, sync_playwright, expect


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False, args=['--start-maximized'])
    context = browser.new_context(no_viewport=True)
    page = context.new_page()
    page.goto("https://www.baidu.com/")

    # ---------------------
    context.close()
    browser.close()


with sync_playwright() as playwright:
    run(playwright)

录制脚本

  • 命令:
playwright codegen
  • 示例:playwright codegen https://www.baidu.com
from playwright.sync_api import Playwright, sync_playwright, expect

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("http://xx.xx.xx.xx:8080/login")
    page.get_by_role("textbox", name="用户名").click()
    page.get_by_role("textbox", name="用户名").fill("admin")
    page.get_by_role("textbox", name="密码").click()
    page.get_by_role("textbox", name="密码").fill("admin123")
    page.get_by_role("button", name="登录").click()
    # ---------------------
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)
录制脚本保存身份验证状态
  • --save-storage:会保存cookie和localStorage。
  • --load-storage:加载保存在本地的cookie信息。
  • openplaywright open启动浏览器与codegen效果相似。

保存cookie信息

playwright codegen --save-storage=auto.json

加载cookie信息

playwright open http://xx.xx.xx.xx:8080/system/user --load-storage=auto.json
代码中保存身份状态信息
  • 若导出的文件cookie信息为空,需要确认网站cookie的失效机制,是否关闭浏览器或者关闭页面即失效
from playwright.sync_api import Playwright, sync_playwright, expect

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("http://xx.xx.xx.xx:8080/login")
    page.get_by_role("textbox", name="用户名").click()
    page.get_by_role("textbox", name="用户名").fill("admin")
    page.get_by_role("textbox", name="密码").click()
    page.get_by_role("textbox", name="密码").fill("admin123")
    page.get_by_role("button", name="登录").click()
	# 添加等待事件,保证登录信息的获取
	page.wait_for_url(url='http://xx.xx.xx.xx:8080/index')

	
    # 保存storage state 到指定的文件
    storage = context.storage_state(path="../auth/ry_auto.json")
    # ---------------------
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)
代码中读取身份状态信息
from playwright.sync_api import Playwright, sync_playwright, expect

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
	context = browser.new_context(storage_state="state.json")
	

playwright发送api接口请求

@pytest.fixture(scope="session")
def api_request_context(
    playwright: Playwright,
) -> Generator[APIRequestContext, None, None]:
    headers = {
        # We set this header per GitHub guidelines.
        "Accept": "application/vnd.github.v3+json",
        # Add authorization token to all requests.
        # Assuming personal access token available in the environment.
        "Authorization": f"token {GITHUB_API_TOKEN}",
    }
    request_context = playwright.request.new_context(
        base_url="https://api.github.com", extra_http_headers=headers
    )
    yield request_context
    request_context.dispose()

相关文章:

  • 大模型LLMs框架Langchain之工具Tools
  • 详解Http:在QT中使用Http协议
  • VMware Windows Tools 存在认证绕过漏洞(CVE-2025-22230)
  • B/S阅片项目算法梳理
  • 系统与网络安全------网络应用基础(6)
  • 无人机助力道路智能养护,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建无人机航拍道路交通场景下水泥路面缺陷智能检测识别系统
  • 如何在WordPress中限制用户登录到一台设备
  • Python小练习系列 Vol.2:斐波那契数列的三种实现方式(从低效到高效)
  • Git项目要改变仓库地址
  • Windows .gitignore文件不生效的情况排查
  • 实现类今日头条主界面:ViewPager与TabLayout深度整合
  • es6的箭头函数与普通函数的区别,箭头函数的this通常指向哪里,箭头函数可以用作构造函数吗?
  • 如何在 vue 渲染百万行数据,vxe-table 渲染百万行数据性能对比,超大量百万级表格渲染
  • mapbox基础,加载popup弹出窗
  • Python+requests实现接口自动化测试框架
  • 【PyTorch】
  • 如何利用AI智能生成PPT提升工作效率
  • SD-WAN海外专线服务商选择指南
  • 泛目录程序——2025年AI多功能站群系统技术演进:无极架构的分布式智能与多模态
  • Vivado HLS 优化指令详解
  • 经典重庆论坛/百度seo关键词排名优化软件
  • 免费外贸自建网站/渠道网官网
  • 银川网站建设多少钱/嘉兴seo报价
  • wap网站案例/怎么做网站优化排名
  • 用数字做域名的网站/爱站长工具
  • 怎么在网上找做网站的客户/百度手机端排名如何优化