playwright network events

1. Network Events

from playwright.sync_api import Page, expect, Request, Response


def on_request(request: Request):
    print("Sent Request:", request)


def on_response(response: Response):
    print("Got Response:", response)


def test_docs_link(page: Page):
    page.on("request", on_request)
    page.on("response", on_response)
    page.goto("https://playwright.dev/python")

    docs_link = page.get_by_role("link", name="Docs")
    docs_link.click()

    expect(page).to_have_url(
        "https://playwright.dev/python/docs/intro"
    )

在这里插入图片描述
注意,这里我们执行的时候输入pytest -s是为了能看到print的输出。

2. Requests处理

from playwright.sync_api import Page, Route


def on_route(route: Route):
    print("Request aborted:", route.request)
    route.abort()


def test_docs_link(page: Page):
    page.route(
        "https://playwright.dev/python/img/playwright-logo.svg",
        on_route
    )

    page.goto("https://playwright.dev/python")

    page.screenshot(path="playwright.png")

标题1中的request.无法修改内容,所以我们想要修改request内容,可以使用route.
Run表题2中的code:
在这里插入图片描述
可以看到,playwright的logo没有被load。
在这里插入图片描述
下面再以一个abort后缀为png的图片为例:

from playwright.sync_api import Page, Route


def on_route(route: Route):
    print("Request aborted:", route.request)
    route.abort()


def test_docs_link(page: Page):
    page.route(
        "**/*.png",
        on_route
    )

    page.goto("https://playwright.dev/python")

    page.screenshot(path="playwright.png", full_page=True)

在这里插入图片描述
可以看到,页面上的png图片都没有被load。
在这里插入图片描述
在这里插入图片描述
如果所有的图片都不想要load,code修改如下:

from playwright.sync_api import Page, Route


def on_route(route: Route):
    if route.request.resource_type == "image":
        route.abort()
    else:
        route.continue_()


def test_docs_link(page: Page):
    page.route(
        "**",
        on_route
    )

    page.goto("https://playwright.dev/python")

    page.screenshot(path="playwright.png", full_page=True)

执行后:
在这里插入图片描述
在这里插入图片描述

3. 修改Response

from playwright.sync_api import Page, Route


def on_route(route: Route):
    route.fulfill(
        status=200,
        body="<html><body><h1>Custom response!</h1></body></html>",
    )


def test_docs_link(page: Page):
    page.route(
        "https://playwright.dev/python",
        on_route
    )

    page.goto("https://playwright.dev/python")
    page.pause()

在这里插入图片描述

from playwright.sync_api import Page, Route


def on_route(route: Route):
    response = route.fetch()
    body = response.text().replace(
        " enables reliable end-to-end testing for modern web apps.",
        "is an awesome framework for web automation!"
    )

    route.fulfill(
        response = response,
        body = body,
    )


def test_docs_link(page: Page):
    page.route(
        "https://playwright.dev/python",
        on_route
    )

    page.goto("https://playwright.dev/python")
    page.pause()

进入页面的某一刻,内容显示为我们所替换的,但很快又刷新为原来的值。
在这里插入图片描述

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值