# 会话检查

该 **会话检查** 工具是一个强大的 **调试功能** Oxylabs Headless Browser 利用 VNC (Virtual Network Computing) 技术提供对浏览器自动化会话的实时可视访问。该工具在无头浏览器实例和可观察与 控制.

### 何时使用？

尽管 Oxylabs Headless Browser 提供内置的隐身功能、动态 CAPTCHA 绕过和其他特性，但某些场景需要直接的可视化观察以：

* 诊断日志或错误信息中无法看出的复杂问题
* 准确了解浏览器所见的页面渲染
* 验证自动化工作流的正确执行
* 实时排查意外行为

### 使用示例

您可以通过在连接端点添加 `o_vnc=true` 参数来启用会话检查工具，例如：

* **Chrome 浏览器：** `wss://username:password@ubc.oxylabs.io?o_vnc=true`
* **Firefox 浏览器：** `wss://username:password@ubs.oxylabs.io?o_vnc=true`

{% hint style="success" %}
此功能兼容 Playwright 和 Puppeteer 库。
{% endhint %}

{% tabs %}
{% tab title="Chrome (UBC)" %}

```javascript
const {chromium} = require('playwright');

(async () => {
    let page = null;
    let browser = null;

    try {
        // 使用 o_vnc=true 参数连接
        browser = await chromium.connectOverCDP('wss://user:pass@ubc.oxylabs.io?o_vnc=true');
        const ctx = browser.contexts()[0];

        // 创建新页面
        page = await ctx.newPage();
        page.on('console', async msg => {
            console.log(`BROWSER [${msg.type()}] ${msg.text()}`);
        });

        // 使用 CDP 会话获取会话 ID
        let sesId = await (await ctx.newCDPSession(page)).send("__session_id");
        // 使用 UB novnc 客户端或任何支持 WebSocket 的客户端连接到 VNC
        console.log(`Connect to VNC: https://vnc.headlesify.io/novnc/?id=${sesId.value}`);

        // 跳转到页面
        await page.goto('https://duckduckgo.com');

        // 睡眠 10 分钟
        await new Promise(resolve => {
            setTimeout(resolve, 6000000);
        });
    }
    catch (e) {
        console.log("Finished with error:", e);
    } finally {
        if (page != null) await page.close();
        if (browser != null) await browser.close();
        process.exit(0);
    }
})();
```

{% endtab %}

{% tab title="Firefox (UBS)" %}

```javascript
const { firefox } = require('playwright');

(async () => {
    let page = null;
    let browser = null;

    try {
        // 使用 o_vnc=true 参数连接
        browser = await firefox.connect('wss://user:pass@ubs.oxylabs.io?o_vnc=true');
        const ctx = await browser.newContext();

        // 创建新页面
        page = await ctx.newPage()
        page.on('console', async msg => {
            console.log(`BROWSER [${msg.type()}] ${msg.text()}`);
        })

        // 使用 CDP 会话获取会话 ID
        let sesId = await (await ctx.newCDPSession(page)).evaluate("__session_id")
        // 使用 UB novnc 客户端或任何支持 WebSocket 的客户端连接到 VNC
        console.log(`Connect to VNC: https://vnc.headlesify.io/novnc/?id=${sesId.value}`);

        // 跳转到页面
        await page.goto('https://duckduckgo.com');

        // 睡眠 10 分钟
        await new Promise(resolve => {
            setTimeout(resolve, 6000000);
        })
    }
    catch (e) {
        console.log("Finished with error:", e);
    } finally {
        if (page != null) await page.close();
        if (browser != null) await browser.close();
        process.exit(0);
    }
})();
```

{% endtab %}
{% endtabs %}
