在 Playwright 中,`CDPSession` 类是用于与浏览器的 Chrome DevTools Protocol (CDP) 会话进行交互的对象。CDP 是与Chromium浏览器通信的底层协议,它提供了许多与浏览器进行交互和控制的功能。
`CDPSession` 类提供了执行底层 CDP 命令的方法,并允许您监视和处理与浏览器相关的事件。您可以使用 `CDPSession` 类来执行高级的浏览器操作,例如截取网络请求、检索性能数据、模拟设备等。
以下是一些常用的 `CDPSession` 类的方法:
- `cdp_session.on(event: str, listener: Callable)`:向 CDP 会话添加事件监听器。
- `cdp_session.send(method: str, params: dict={})`:向浏览器发送 CDP 命令。
- `cdp_session.detach()`:分离 CDP 会话。
以下是一个示例,展示了如何使用 `CDPSession` 类
```python
from playwright.sync_api import sync_playwright
with sync_playwright() as playwright:
browser = playwright.chromium.launch()
context = browser.new_context()
# 在新的页面上创建 CDPSession
page = context.new_page()
cdp_session = page.context.new_cdp_session(page)
# 启用网络请求截取
cdp_session.send('Network.enable', {})
# 添加请求截取事件监听器
cdp_session.on('Network.requestWillBeSent', lambda event: print(event))
# 导航到一个网页
page.goto('https://www.baidu.com')
browser.close()
```
截取网络请求:
在上面的示例中,我们使用 `new_cdp_session()` 方法在页面上创建一个新的 `CDPSession` 对象。然后,我们使用 `send()` 方法发送 `Network.enable` 命令以启用网络请求拦截功能,并使用 `on()` 方法添加一个回调函数来处理 `Network.requestWillBeSent` 事件,该事件将在每个请求发送之前触发。
方法
detach
`cdp_session.detach()` 是 Playwright 中 `CDPSession` 类的一个方法,用于分离(取消连接)CDP会话。
当您完成对CDP会话的操作或不再需要与其交互时,可以调用 `detach()` 方法来分离CDP会话。这将断开与浏览器的连接,并释放与CDP会话相关的资源。
以下是一个示例,展示了如何使用 `cdp_session.detach()` 分离CDP会话:
```python
from playwright.sync_api import sync_playwright
with sync_playwright() as playwright:
browser = playwright.chromium.launch()
context = browser.new_context()
# 在新的页面上创建 CDPSession
page = context.new_page()
cdp_session = page.context.new_cdp_session(page)
# 执行一些 CDP 操作...
# 分离 CDP 会话
cdp_session.detach()
browser.close()
```
在上面的示例中,我们创建了一个CDP会话,并执行了一些与浏览器的交互操作。最后,通过调用 `cdp_session.detach()` 方法,我们将该CDP会话与浏览器分离。
分离CDP会话后,您将无法再使用该CDP会话执行任何操作。如果需要重新连接到CDP会话,您需要创建一个新的CDP会话。