#browser-automation ## Documentation entry points - [Official documentation](https://chromedevtools.github.io/devtools-protocol/) - Some good starting points with code examples: [Tutorial and resources about the Chrome DevTools Protocol?](https://github.com/cyrus-and/chrome-remote-interface/issues/282) (this is an issue in the GitHub repo of **chrome-remote-interface**, which is also the low-level solution recommended in [Google's Web Fundamentals article on headless Chrome](https://developers.google.com/web/updates/2017/04/headless-chrome#cri)) ## CDP `!==` Puppeteer To avoid possible confusion right away: Chrome DevTools Protocol `!==` Puppeteer. Puppeteer abstracts CDP away behind a human-friendly API. CDP is quite low-level and the documentation just technical. ## CDP in Firefox - [How to send messages to Firefox through devtools protocol? - Stack Overflow](https://stackoverflow.com/a/74080241) - [Remote Protocols - Firefox Source Docs](https://firefox-source-docs.mozilla.org/remote/index.html) ## Network domain in CDP `Network.requestWillBeSent` fires for all requests that the browser is about to send to the web (i.e. this is an outgoing request, but not the response yet). So, that event can contain all sorts of requests that may not have received a response in the end. `Network.responseReceived` fires for all responses to requests, i.e. this is the stuff that the browser got back as the result of a request.