# Inspeção de sessão

O **Session Inspection** ferramenta é uma **funcionalidade de depuração** do Oxylabs Headless Browser que utiliza a tecnologia VNC (Virtual Network Computing) para fornecer acesso visual em tempo real às suas sessões de automação do navegador. Essa ferramenta cria uma ponte segura entre sua instância de navegador headless e uma interface gráfica que você pode observar e controlar.

### Quando usá-la?

Embora o Oxylabs Headless Browser ofereça recursos embutidos de dissimulação, bypass dinâmico de CAPTCHA e outras funcionalidades, certos cenários exigem observação visual direta para:

* Diagnosticar problemas complexos que não são evidentes a partir de logs ou mensagens de erro
* Entender a renderização da página exatamente como o navegador a vê
* Verificar a execução correta dos seus fluxos de automação
* Solucionar comportamentos inesperados em tempo real

### Exemplo de uso

Você pode habilitar a ferramenta Session Inspection adicionando o `o_vnc=true` parâmetro ao endpoint de conexão, por exemplo:

* **Navegador Chrome:** `wss://username:password@ubc.oxylabs.io?o_vnc=true`
* **Navegador Firefox:** `wss://username:password@ubs.oxylabs.io?o_vnc=true`

{% hint style="success" %}
Esse recurso funciona com as bibliotecas Playwright e Puppeteer.
{% endhint %}

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

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

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

    try {
        // Use o parâmetro o_vnc=true para conectar
        browser = await chromium.connectOverCDP('wss://user:pass@ubc.oxylabs.io?o_vnc=true');
        const ctx = browser.contexts()[0];

        // Crie uma nova página
        page = await ctx.newPage();
        page.on('console', async msg => {
            console.log(`BROWSER [${msg.type()}] ${msg.text()}`);
        });

        // Obtenha o ID da sessão usando uma sessão CDP
        let sesId = await (await ctx.newCDPSession(page)).send("__session_id");
        // Use o cliente UB novnc ou qualquer cliente com suporte a WebSocket para conectar ao vnc
        console.log(`Conecte-se ao VNC: https://vnc.headlesify.io/novnc/?id=${sesId.value}`);

        // Vá para uma página
        await page.goto('https://duckduckgo.com');

        // Durma por 10 minutos
        await new Promise(resolve => {
            setTimeout(resolve, 6000000);
        });
    }
    catch (e) {
        console.log("Finalizado com erro:", 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 {
        // Use o parâmetro o_vnc=true para conectar
        browser = await firefox.connect('wss://user:pass@ubs.oxylabs.io?o_vnc=true');
        const ctx = await browser.newContext();

        // Crie uma nova página
        page = await ctx.newPage()
        page.on('console', async msg => {
            console.log(`BROWSER [${msg.type()}] ${msg.text()}`);
        })

        // Obtenha o ID da sessão usando uma sessão CDP
        let sesId = await (await ctx.newCDPSession(page)).evaluate("__session_id")
        // Use o cliente UB novnc ou qualquer cliente com suporte a WebSocket para conectar ao VNC
        console.log(`Conecte-se ao VNC: https://vnc.headlesify.io/novnc/?id=${sesId.value}`);

        // Vá para uma página
        await page.goto('https://duckduckgo.com');

        // Durma por 10 minutos
        await new Promise(resolve => {
            setTimeout(resolve, 6000000);
        })
    }
    catch (e) {
        console.log("Finalizado com erro:", e);
    } finally {
        if (page != null) await page.close();
        if (browser != null) await browser.close();
        process.exit(0);
    }
})();
```

{% endtab %}
{% endtabs %}
