puppeteer-sharp icon indicating copy to clipboard operation
puppeteer-sharp copied to clipboard

Send direct messages

Open bambinorest1 opened this issue 1 year ago • 6 comments

What if i want to use Storage domain directly https://chromedevtools.github.io/devtools-protocol/tot/Storage/. It seems to me that at the moment direct SendAsync messages can be sent linked to a specific session id. But Storage for example i'snt linked to session id

bambinorest1 avatar May 18 '24 10:05 bambinorest1

What do you get if you make a call from a session?

kblok avatar May 18 '24 14:05 kblok

What do you get if you make a call from a session?

For example method https://chromedevtools.github.io/devtools-protocol/tot/Storage/#method-clearCookies takes optional argument browserContextId, how could it bind to session?

bambinorest1 avatar May 19 '24 06:05 bambinorest1

@bambinorest1 you have the BrowserContext.Id

kblok avatar May 20 '24 19:05 kblok

@bambinorest1 you have the BrowserContext.Id

I still don’t understand why you think that I should call methods from the Storage domain from the session?? Some methods from Storage, it seemed to me, do not work locally with one page or other similar target that can linked to session, but work globally with the entire browser.

bambinorest1 avatar May 21 '24 06:05 bambinorest1

@bambinorest1 you have the BrowserContext.Id

I still don’t understand why you think that I should call methods from the Storage domain from the session?? Some methods from Storage, it seemed to me, do not work locally with one page or other similar target that can linked to session, but work globally with the entire browser.

Did you at least give it a try? I could expose the Connection from the Context. But you might need to wait for a new version.

kblok avatar May 22 '24 22:05 kblok

Did you at least give it a try?

Yeah, for example this code works:

const WebSocket = require('ws');
const axios = require('axios');

(async () => {
    const response = await axios.get('http://localhost:21316/json');
    const debuggerUrl = response.data[0].webSocketDebuggerUrl;

    const ws = new WebSocket(debuggerUrl);

    ws.on('open', function open() {
        console.log('Connected to the browser');

        const storageMessage = {
            id: 1,
            method: 'Storage.getCookies'
        };
        ws.send(JSON.stringify(storageMessage));
    });

    ws.on('message', function incoming(data) {
        const cookies = JSON.parse(data.toString()).result.cookies;

        for (const cookie of cookies) {
            console.log(cookie);
        }
    });

    ws.on('close', function close() {
        console.log('Disconnected from the browser');
    });

    ws.on('error', function error(err) {
        console.error('WebSocket error:', err);
    });
})();

I could expose the Connection from the Context.

I think this will be useful in many cases

bambinorest1 avatar May 23 '24 10:05 bambinorest1