Python 版的 Playwright 如何等待网络请求结束
时间: 2024-04-28 18:24:31 浏览: 334
python-playwright修改GET/POST请求参数,抓包修改数据
在 Python 版的 Playwright 中,可以通过 `page.wait_for_request(urlOrPredicate, timeout=None)` 方法来等待网络请求结束。这个方法可以接收两个参数:
- `urlOrPredicate`: 可以是字符串类型的请求 URL,也可以是一个回调函数,用于自定义请求过滤条件。例如,`lambda req: req.url.startswith("https://example.com")` 可以筛选出所有 URL 以 `https://example.com` 开头的请求。
- `timeout`: 超时时间,单位为毫秒。如果请求在指定时间内没有结束,则会抛出 TimeoutException 异常。
示例代码如下:
```python
from playwright.sync_api import Playwright, sync_playwright
def run(playwright: Playwright) -> None:
with playwright.chromium.launch() as browser:
with browser.new_context() as context:
page = context.new_page()
page.goto("https://example.com")
# 等待所有网络请求结束
page.wait_for_load_state()
# 等待指定 URL 的网络请求结束
page.wait_for_request("https://example.com/api/data")
# 等待自定义过滤条件的网络请求结束
page.wait_for_request(lambda req: req.url.startswith("https://example.com"))
```
在上面的代码中,`page.wait_for_load_state()` 方法可以等待所有网络请求结束,也可以使用 `Page.goto(url, wait_until=None)` 方法的 `wait_until` 参数来指定页面加载完成的条件,例如 `wait_until='domcontentloaded'` 只等待 DOMContentLoaded 事件结束。
阅读全文