I eat cookie consent notices. Nom nom.
Cookiemonster automatically detects cookie notices on Web pages. It's intended to help with both detection of cookie notices that we don't currently block, and to identify webcompat reports as being related to cookie consent blocking.
Cookiemonster is currently being developed as a Web app which will help us run crawls and/or integrate with the webcompat reporter backend. It can also be used as a library. In the future, we could even bundle it in the browser.
-
Install Brave Browser.
-
Install dependencies and setup browser profiles:
npm install
npm run setup -- /path/to/brave
Note: If browser profiles need to be updated, remove the profiles
directory and run the setup again.
-
Ensure you have Docker and Docker Compose installed.
-
Run the initial setup:
cp .env.example .env
docker compose run --rm --entrypoint ./docker_setup.sh brave
Note: If browser profiles need to be updated, run the setup command again.
Start the server:
npm run serve
You can customize the browser and port:
npm run serve -- /usr/bin/brave-nightly 8000
- Basic setup (without LLM support):
docker compose up brave
- With LLM support via Ollama:
docker compose --profile ollama up brave_ollama
- With LLM support via AWS Bedrock:
aws-vault exec cookiemonster-bedrock -- docker compose --profile litellm up
Note
You will need to set up the AWS profile in your environment.
For all setups, visit localhost:3000
in your browser.
import { checkPage } from 'cookiemonster';
const result = await checkPage({
url: 'https://example.com', // URL to visit
seconds: 4, // delay before checking for a notice
interactive: false, // show the browser while running?
executablePath: '/path/to/binary', // what browser to run
adblockLists: { // enable/disable filter lists by component id
'cdbbhgbmjhfnhnmgeddbliobbofkgdhe': false,
},
screenshot: true, // return images of detected notices or full page (see Screenshots section)
});
The screenshot
parameter can be set to true
, false
, always
, fullPage
, the behavior is summarized in the following table:
value | element detected | no element detected |
---|---|---|
true | 🎯 | ❌ |
false | ❌ | ❌ |
always | 🎯 | 📄 |
fullPage | 📄 | 📄 |
Legend:
🎯 - Screenshot of detected element
📄 - Screenshot of full page
❌ - No screenshot
npm run test
You can also pass a path to a different browser binary if necessary:
npm run test -- /usr/bin/brave-nightly
There is a set of regression test cases in the testcases
directory.
Each test case is a single self-contained HTML file. These files can be generated using a tool like nodeSavePageWE.