@duckduckgo/autoconsent 16.48.0 → 16.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/optimize-button-patterns/SKILL.md +145 -0
- package/.agents/skills/oxylabs-testing/SKILL.md +1 -1
- package/.claude/skills/optimize-button-patterns/SKILL.md +7 -0
- package/.github/workflows/release-labels.yml +2 -6
- package/AGENTS.md +2 -0
- package/CHANGELOG.md +77 -0
- package/data/Readme.md +6 -0
- package/data/labelled-button-texts.csv +7006 -0
- package/dist/addon-firefox/background.bundle.js +6 -1
- package/dist/addon-firefox/compact-rules.json +1 -1
- package/dist/addon-firefox/content.bundle.js +26 -13
- package/dist/addon-firefox/manifest.json +1 -1
- package/dist/addon-firefox/rule-index.json +1 -1
- package/dist/addon-firefox/rules.json +1 -1
- package/dist/addon-mv3/background.bundle.js +6 -1
- package/dist/addon-mv3/compact-rules.json +1 -1
- package/dist/addon-mv3/content.bundle.js +26 -13
- package/dist/addon-mv3/manifest.json +1 -1
- package/dist/addon-mv3/rule-index.json +1 -1
- package/dist/addon-mv3/rules.json +1 -1
- package/dist/autoconsent.cjs.js +26 -13
- package/dist/autoconsent.esm.js +26 -13
- package/dist/autoconsent.playwright.js +26 -13
- package/dist/autoconsent.standalone.js +27 -14
- package/dist/types/eval-snippets.d.ts +3 -0
- package/lib/eval-snippets.ts +7 -0
- package/lib/heuristic-patterns.ts +20 -11
- package/package.json +3 -1
- package/rules/autoconsent/amazon-hiring.json +16 -0
- package/rules/autoconsent/avada-cookie-consent.json +43 -0
- package/rules/autoconsent/axeptio.json +17 -4
- package/rules/autoconsent/bigcrunch.json +39 -0
- package/rules/autoconsent/borlabs.json +5 -0
- package/rules/autoconsent/bricklink.json +33 -0
- package/rules/autoconsent/ceneo.json +9 -0
- package/rules/autoconsent/conjointly.json +43 -0
- package/rules/autoconsent/consentmo.json +51 -7
- package/rules/autoconsent/cookie-popup-close-cookies.json +37 -0
- package/rules/autoconsent/cookieconsent2.json +6 -1
- package/rules/autoconsent/costco.json +27 -0
- package/rules/autoconsent/datasign.json +85 -0
- package/rules/autoconsent/dhbbank.json +13 -0
- package/rules/autoconsent/ee-consent-notice.json +40 -0
- package/rules/autoconsent/ensembleartsphilly.json +33 -0
- package/rules/autoconsent/evium.de.json +33 -0
- package/rules/autoconsent/fera-cookies.json +67 -0
- package/rules/autoconsent/iubenda.json +13 -7
- package/rules/autoconsent/la7-cmp.json +30 -0
- package/rules/autoconsent/laravel-cookie-consent.json +45 -0
- package/rules/autoconsent/legislation-gov-uk.json +43 -0
- package/rules/autoconsent/mackeeper.json +34 -0
- package/rules/autoconsent/ndl-go-jp.json +35 -0
- package/rules/autoconsent/pandectes.json +48 -15
- package/rules/autoconsent/passle.json +32 -0
- package/rules/autoconsent/paypal-us.json +3 -3
- package/rules/autoconsent/paypal.json +5 -2
- package/rules/autoconsent/primeconsent.json +39 -0
- package/rules/autoconsent/shinden.pl.json +34 -0
- package/rules/autoconsent/texas-instruments.json +17 -0
- package/rules/autoconsent/thegrandyork.json +46 -0
- package/rules/autoconsent/thenounproject.json +61 -0
- package/rules/autoconsent/toyota.json +16 -5
- package/rules/autoconsent/tri-table.json +14 -0
- package/rules/autoconsent/truevault-polaris.json +63 -0
- package/rules/autoconsent/uft-cookie-notice.json +15 -0
- package/rules/autoconsent/wbd-legal-terms.json +32 -0
- package/rules/autoconsent/webflow.json +1 -1
- package/rules/autoconsent/wix.json +90 -8
- package/rules/compact-rules.json +1 -1
- package/rules/rule-index.json +1 -1
- package/rules/rules.json +1 -1
- package/scripts/benchmark-button-classification.ts +75 -0
- package/scripts/button-text-benchmark.ts +102 -0
- package/tests/amazon-hiring.spec.ts +3 -0
- package/tests/avada-cookie-consent.spec.ts +9 -0
- package/tests/axeptio.spec.ts +8 -4
- package/tests/bigcrunch.spec.ts +16 -0
- package/tests/borlabs.spec.ts +7 -3
- package/tests/bricklink.spec.ts +3 -0
- package/tests/ceneo.spec.ts +3 -0
- package/tests/conjointly.spec.ts +3 -0
- package/tests/consentmo.spec.ts +1 -0
- package/tests/cookie-popup-close-cookies.spec.ts +10 -0
- package/tests/cookieconsent2.spec.ts +6 -1
- package/tests/costco.spec.ts +5 -0
- package/tests/datasign.spec.ts +8 -0
- package/tests/dhbbank.spec.ts +6 -0
- package/tests/ee-consent-notice.spec.ts +9 -0
- package/tests/ensembleartsphilly.spec.ts +6 -0
- package/tests/evium.de.spec.ts +5 -0
- package/tests/fera-cookies.spec.ts +6 -0
- package/tests/iubenda.spec.ts +6 -0
- package/tests/la7-cmp.spec.ts +6 -0
- package/tests/laravel-cookie-consent.spec.ts +10 -0
- package/tests/legislation-gov-uk.spec.ts +3 -0
- package/tests/mackeeper.spec.ts +3 -0
- package/tests/ndl-go-jp.spec.ts +8 -0
- package/tests/pandectes.spec.ts +20 -1
- package/tests/passle.spec.ts +8 -0
- package/tests/paypal-us.spec.ts +2 -3
- package/tests/primeconsent.spec.ts +11 -0
- package/tests/shinden.pl.spec.ts +5 -0
- package/tests/texas-instruments.spec.ts +3 -0
- package/tests/thegrandyork.spec.ts +3 -0
- package/tests/thenounproject.spec.ts +3 -0
- package/tests/tri-table.spec.ts +5 -0
- package/tests/truevault-polaris.spec.ts +9 -0
- package/tests/uft-cookie-notice.spec.ts +3 -0
- package/tests/wbd-legal-terms.spec.ts +18 -0
- package/tests/webflow.spec.ts +7 -1
- package/tests/wix.spec.ts +8 -1
- package/tests-wtr/heuristics/button-classification-accuracy.test.ts +41 -0
- package/tests-wtr/heuristics/heuristics-utils.test.ts +64 -0
- package/rules/autoconsent/paypal-cookieprefs.json +0 -29
- package/tests/paypal-cookieprefs.spec.ts +0 -7
|
@@ -29,6 +29,7 @@ export declare const snippets: {
|
|
|
29
29
|
EVAL_BORLABS_0: () => boolean;
|
|
30
30
|
EVAL_CC_BANNER2_0: () => boolean;
|
|
31
31
|
EVAL_COINBASE_0: () => boolean;
|
|
32
|
+
EVAL_COOKIE_POPUP_CLOSE: () => true;
|
|
32
33
|
EVAL_COOKIE_LAW_INFO_0: () => boolean;
|
|
33
34
|
EVAL_COOKIE_LAW_INFO_DETECT: () => boolean;
|
|
34
35
|
EVAL_COOKIE_MANAGER_POPUP_0: () => boolean;
|
|
@@ -39,6 +40,7 @@ export declare const snippets: {
|
|
|
39
40
|
EVAL_COOKIEFIRST_1: () => boolean;
|
|
40
41
|
EVAL_COOKIEINFORMATION_0: () => any;
|
|
41
42
|
EVAL_COOKIEINFORMATION_1: () => any;
|
|
43
|
+
EVAL_EE_CONSENT_DECLINE_0: () => boolean;
|
|
42
44
|
EVAL_ETSY_0: () => boolean;
|
|
43
45
|
EVAL_ETSY_1: () => any;
|
|
44
46
|
EVAL_EZOIC_0: () => any;
|
|
@@ -86,5 +88,6 @@ export declare const snippets: {
|
|
|
86
88
|
EVAL_USERCENTRICS_API_6: () => boolean;
|
|
87
89
|
EVAL_USERCENTRICS_BUTTON_0: () => any;
|
|
88
90
|
EVAL_WAITROSE_0: () => boolean;
|
|
91
|
+
EVAL_WBD_LTP_CLOSE: () => any;
|
|
89
92
|
};
|
|
90
93
|
export declare function getFunctionBody(snippetFunc: () => any): string;
|
package/lib/eval-snippets.ts
CHANGED
|
@@ -111,6 +111,9 @@ export const snippets = {
|
|
|
111
111
|
EVAL_COINBASE_0: () =>
|
|
112
112
|
JSON.parse(decodeURIComponent(document.cookie.match(/cm_(eu|default)_preferences=([0-9a-zA-Z\\{\\}\\[\\]%:]*);?/)[2])).consent
|
|
113
113
|
.length <= 1,
|
|
114
|
+
// the close icon is an SVG, which has no click() method
|
|
115
|
+
EVAL_COOKIE_POPUP_CLOSE: () =>
|
|
116
|
+
document.querySelector('#cookie-popup #close-cookies').dispatchEvent(new MouseEvent('click', { bubbles: true })) || true,
|
|
114
117
|
EVAL_COOKIE_LAW_INFO_0: () => {
|
|
115
118
|
if (CLI.disableAllCookies) CLI.disableAllCookies();
|
|
116
119
|
if (CLI.reject_close) CLI.reject_close();
|
|
@@ -145,6 +148,9 @@ export const snippets = {
|
|
|
145
148
|
.forEach((i) => i.getAttribute('aria-checked') === 'true' && i.click()) || true,
|
|
146
149
|
EVAL_COOKIEINFORMATION_0: () => CookieInformation.declineAllCategories() || true,
|
|
147
150
|
EVAL_COOKIEINFORMATION_1: () => CookieInformation.submitAllCategories() || true,
|
|
151
|
+
// turn the single-button form into a decline submission, same fields as the CMP's own decline form
|
|
152
|
+
EVAL_EE_CONSENT_DECLINE_0: () =>
|
|
153
|
+
document.querySelectorAll('#cookieConsentFormAccept input[name^="ee:cookies_"]').forEach((i) => (i.value = 'n')) || true,
|
|
148
154
|
EVAL_ETSY_0: () =>
|
|
149
155
|
document.querySelectorAll('.gdpr-overlay-body input').forEach((toggle) => {
|
|
150
156
|
toggle.checked = false;
|
|
@@ -261,6 +267,7 @@ export const snippets = {
|
|
|
261
267
|
EVAL_USERCENTRICS_BUTTON_0: () =>
|
|
262
268
|
JSON.parse(localStorage.getItem('usercentrics')).consents.every((c) => c.isEssential || !c.consentStatus),
|
|
263
269
|
EVAL_WAITROSE_0: () => Array.from(document.querySelectorAll('label[id$=cookies-deny-label]')).forEach((e) => e.click()) || true,
|
|
270
|
+
EVAL_WBD_LTP_CLOSE: () => document.querySelector('dialog#ltp-dialog').close() || true,
|
|
264
271
|
};
|
|
265
272
|
|
|
266
273
|
export function getFunctionBody(snippetFunc: () => any) {
|
|
@@ -7,7 +7,8 @@ export const DETECT_PATTERNS = [
|
|
|
7
7
|
/only necessary cookies/gi, // "only necessary" is probably too broad
|
|
8
8
|
/(?:by continuing.{0,100}cookie)|(?:cookie.{0,100}by continuing)/gi,
|
|
9
9
|
/(?:by continuing.{0,100}privacy)|(?:privacy.{0,100}by continuing)/gi,
|
|
10
|
-
|
|
10
|
+
// a single qualifier is common: "optional", "essential", "necessary", "analytics", ...
|
|
11
|
+
/we (?:use|serve)(?: \w+)? cookies/gi,
|
|
11
12
|
/we are using cookies/gi,
|
|
12
13
|
/use of cookies/gi,
|
|
13
14
|
/website uses cookies to enhance your browsing experience/gi,
|
|
@@ -165,6 +166,10 @@ export const DETECT_PATTERNS = [
|
|
|
165
166
|
|
|
166
167
|
// Italian (IT)
|
|
167
168
|
/usiamo.{0,20}cookie/gi,
|
|
169
|
+
|
|
170
|
+
// Japanese (JA)
|
|
171
|
+
// e.g. "当サイトはCookieを使用しています", "クッキー(Cookie)を利用しています"
|
|
172
|
+
/(?:cookie|クッキー).{0,10}を(?:使用|利用)/gi,
|
|
168
173
|
];
|
|
169
174
|
|
|
170
175
|
const REJECT_PATTERNS_ENGLISH = [
|
|
@@ -180,13 +185,13 @@ const REJECT_PATTERNS_ENGLISH = [
|
|
|
180
185
|
/^\s*(continue|proceed|continue\s+browsing)\s+without\s+(accepting|agreeing|consent|cookies|tracking)(\s*→)?\s*$/is,
|
|
181
186
|
|
|
182
187
|
// essential/necessary/functional-only, e.g. "essential cookies only", "accept only essential cookies",
|
|
183
|
-
// "allow necessary cookies continue", "use essential cookies only", "functional only", "i confirm necessary"
|
|
188
|
+
// "allow necessary cookies continue", "use essential cookies only", "functional only", "essential only cookies", "i confirm necessary"
|
|
184
189
|
/^\s*(i\s+)?(want\s+to\s+)?(only\s+)?(use|accept|allow|keep|enable|choose|continue\s+with|i\s+confirm)\s*(only\s+)?(strictly\s+)?(necessary|essential|essentials|functional|required|minimal)\s*(cookies)?\s*(continue|only)?\s*$/is,
|
|
185
190
|
/^\s*(i\s+)?(want\s+to\s+)?only\s+(strictly\s+)?(necessary|essential|essentials|functional|required|minimal)\s*(cookies)?\s*(continue|only)?\s*$/is,
|
|
186
|
-
/^\s*(strictly\s+)?(necessary|essential|essentials|functional|required|minimal)\s
|
|
191
|
+
/^\s*(strictly\s+)?(necessary|essential|essentials|functional|required|minimal)\s+((cookies\s+)?only|only\s+cookies)\s*$/is,
|
|
187
192
|
|
|
188
|
-
// e.g. "do not sell or share my personal information", "opt out of sale ..." (CCPA)
|
|
189
|
-
/do\s+not\s+sell|opt\s+out\s+of\s+sale/is,
|
|
193
|
+
// e.g. "do not sell or share my personal information", "do not share my personal information", "opt out of sale ..." (CCPA)
|
|
194
|
+
/do\s+not\s+sell|do\s+not\s+share\s+my\s+(personal\s+)?(information|info|data)|opt\s+out\s+of\s+sale/is,
|
|
190
195
|
|
|
191
196
|
// e.g. "opt-out of sale/share or targeted advertising", "opt-out of advertising/social media cookies"
|
|
192
197
|
/^opt[ -]?out of /is,
|
|
@@ -390,6 +395,13 @@ const REJECT_PATTERNS_TURKISH = ['reddet', 'çerezleri reddet'];
|
|
|
390
395
|
|
|
391
396
|
const REJECT_PATTERNS_INDONESIAN = ['tolak cookie'];
|
|
392
397
|
|
|
398
|
+
const REJECT_PATTERNS_JAPANESE = [
|
|
399
|
+
// e.g. "拒否", "すべて拒否", "全て拒否する", "cookieを拒否"
|
|
400
|
+
/^(すべて|全て)?\s?(の)?(cookie|クッキー)?\s?(を)?拒否(する)?$/i,
|
|
401
|
+
'同意しない',
|
|
402
|
+
'同意しません',
|
|
403
|
+
];
|
|
404
|
+
|
|
393
405
|
/**
|
|
394
406
|
* @type {Array<string|RegExp>}
|
|
395
407
|
*/
|
|
@@ -411,6 +423,7 @@ export const REJECT_PATTERNS = [
|
|
|
411
423
|
...REJECT_PATTERNS_RUSSIAN,
|
|
412
424
|
...REJECT_PATTERNS_TURKISH,
|
|
413
425
|
...REJECT_PATTERNS_INDONESIAN,
|
|
426
|
+
...REJECT_PATTERNS_JAPANESE,
|
|
414
427
|
];
|
|
415
428
|
|
|
416
429
|
export const BUTTON_NEVER_MATCH_PATTERNS = [
|
|
@@ -645,13 +658,13 @@ export const ACCEPT_PATTERNS = [
|
|
|
645
658
|
/^continue (and accept|using cookies|with (all|recommended cookies|cookies))$/is,
|
|
646
659
|
|
|
647
660
|
// DE accept verbs
|
|
648
|
-
/^(alle[sn]?\s+|allem\s+|ich\s+|cookies\s+|ausgewählte\s+|webanalyse\s+)?(cookies?\s+)?(akzeptieren|annehmen|zustimmen|zulassen|erlauben|einwilligen|aktivieren|auswählen)(\s+(und\s+)?(weiter|
|
|
661
|
+
/^(alle[sn]?\s+|allem\s+|ich\s+|cookies\s+|ausgewählte\s+|webanalyse\s+)?(cookies?\s+)?(akzeptieren|annehmen|zustimmen|zulassen|erlauben|einwilligen|aktivieren|auswählen)(\s+(und\s+)?(weiter|schlie(ß|ss)en))?\s*$/is,
|
|
649
662
|
/^((meine\s+)?auswahl|alle)\s+(bestätigen|akzeptieren|auswählen)$/is,
|
|
650
663
|
/^(alle[nm]?\s+)?(zustimmen|einverstanden|einwilligung|zustimmung)$/is,
|
|
651
664
|
/^ich (bin einverstanden|akzeptiere( alle)?|stimme zu)$/is,
|
|
652
665
|
|
|
653
666
|
// NL accept verbs
|
|
654
|
-
/^(ja,?\s+)?(alle[s]?\s+|ik\s+)?(cookies?\s+)?(accepteer|accepteren|toestaan|aanvaard|aanvaarden|ga akkoord|akkoord)(\s+(en\s+
|
|
667
|
+
/^(ja,?\s+)?(alle[s]?\s+|ik\s+)?(cookies?\s+)?(accepteer|accepteren|toestaan|aanvaard|aanvaarden|ga akkoord|akkoord)(\s+((en\s+)?sluiten|en\s+(doorgaan|verdergaan)|cookies|alle))?\s*$/is,
|
|
655
668
|
/^(selectie (accepteren|toestaan)|accepteer (selectie|alle)|alle (toestaan|accepteren|aanvaarden)|ja, (dat is prima|prima|alles toestaan|accepteren|ik accepteer cookies|ik ga akkoord)|is goed)$/is,
|
|
656
669
|
|
|
657
670
|
// FR accept verbs
|
|
@@ -813,11 +826,7 @@ export const ACKNOWLEDGE_PATTERNS = [
|
|
|
813
826
|
/understood$/is,
|
|
814
827
|
'confirm my choices',
|
|
815
828
|
|
|
816
|
-
// French (FR)
|
|
817
|
-
'accepter fermer',
|
|
818
|
-
|
|
819
829
|
// German (DE)
|
|
820
|
-
'akzeptieren schließen',
|
|
821
830
|
'speichern schließen',
|
|
822
831
|
|
|
823
832
|
// Spanish (ES)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duckduckgo/autoconsent",
|
|
3
|
-
"version": "16.
|
|
3
|
+
"version": "16.50.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"types": "./dist/types/web.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"launch:firefox": "web-ext run -s dist/addon-firefox",
|
|
37
37
|
"release": "auto shipit",
|
|
38
38
|
"get-text-for-xpath": "ts-node scripts/get-text-for-xpath.ts",
|
|
39
|
+
"benchmark-buttons": "ts-node scripts/benchmark-button-classification.ts",
|
|
39
40
|
"bundle-config-rules": "ts-node scripts/bundle-config-rules.ts",
|
|
40
41
|
"check-pr-release-labels": "ts-node scripts/check-pr-release-labels.ts"
|
|
41
42
|
},
|
|
@@ -59,6 +60,7 @@
|
|
|
59
60
|
"bulma": "^1.0.2",
|
|
60
61
|
"chai": "^6.0.1",
|
|
61
62
|
"chokidar-cli": "^3.0.0",
|
|
63
|
+
"csv-parse": "^6.2.1",
|
|
62
64
|
"esbuild": "^0.28.0",
|
|
63
65
|
"eslint": "^10.0.3",
|
|
64
66
|
"globals": "^17.4.0",
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "amazon-hiring",
|
|
3
|
+
"vendorUrl": "https://hiring.amazon.com/",
|
|
4
|
+
"detectCmp": [{ "exists": "[data-test-id=\"consentModal\"] [data-test-id=\"consentBtn\"]" }],
|
|
5
|
+
"detectPopup": [{ "visible": "[data-test-id=\"consentModal\"] [data-test-id=\"consentBtn\"]" }],
|
|
6
|
+
"optIn": [{ "waitForThenClick": "[data-test-id=\"consentModal\"] [data-test-id=\"consentBtn\"]" }],
|
|
7
|
+
"optOut": [
|
|
8
|
+
{ "click": "[data-test-id=\"consentModal\"] button[aria-label=\"Continue without accepting cookies\"]" },
|
|
9
|
+
{ "waitForVisible": "[data-test-id=\"consentModal\"] [data-test-id=\"consentBtn\"]", "check": "none", "timeout": 2000 },
|
|
10
|
+
{
|
|
11
|
+
"if": { "exists": "[data-test-id=\"consentModal\"] button[aria-label=\"Close cookie consent card popup\"]" },
|
|
12
|
+
"then": [{ "click": "[data-test-id=\"consentModal\"] button[aria-label=\"Close cookie consent card popup\"]" }]
|
|
13
|
+
},
|
|
14
|
+
{ "waitForVisible": "[data-test-id=\"consentModal\"]", "check": "none", "timeout": 2000 }
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "avada-cookie-consent",
|
|
3
|
+
"vendorUrl": "https://apps.shopify.com/avada-cookie-bar",
|
|
4
|
+
"prehideSelectors": [".Avada-CookiesBar__OuterWrapper .Avada-CookiesBar_Container"],
|
|
5
|
+
"detectCmp": [
|
|
6
|
+
{
|
|
7
|
+
"exists": ".Avada-CookiesBar__OuterWrapper .Avada-CookiesBar_BtnDeny"
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
"detectPopup": [
|
|
11
|
+
{
|
|
12
|
+
"visible": ".Avada-CookiesBar__OuterWrapper .Avada-CookiesBar_BtnDeny",
|
|
13
|
+
"check": "any"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"optIn": [
|
|
17
|
+
{
|
|
18
|
+
"waitForThenClick": ".Avada-CookiesBar__OuterWrapper .Avada-CookiesBar_BtnAgree"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"optOut": [
|
|
22
|
+
{
|
|
23
|
+
"waitForThenClick": ".Avada-CookiesBar__OuterWrapper .Avada-CookiesBar_BtnDeny"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"any": [
|
|
27
|
+
{
|
|
28
|
+
"waitForVisible": ".Avada-CookiesBar__OuterWrapper .Avada-CookiesBar_Container",
|
|
29
|
+
"check": "none",
|
|
30
|
+
"timeout": 1000
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"waitForThenClick": ".Avada-CookiesBar-Preferences__PopUp .Avada-CookiesBar_BtnDeny"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"test": [
|
|
39
|
+
{
|
|
40
|
+
"cookieContains": "\"analytics\":false,\"marketing\":false"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
@@ -32,14 +32,27 @@
|
|
|
32
32
|
{
|
|
33
33
|
"if": { "exists": ".axeptio_mount .needsclick" },
|
|
34
34
|
"then": [
|
|
35
|
-
{
|
|
35
|
+
{
|
|
36
|
+
"waitForVisible": [
|
|
37
|
+
".axeptio_mount .needsclick",
|
|
38
|
+
"button#axeptio_btn_dismiss,button.ax-discardButton,button#axeptio_btn_close"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
36
41
|
{ "wait": 300 },
|
|
37
|
-
{
|
|
42
|
+
{
|
|
43
|
+
"if": { "exists": [".axeptio_mount .needsclick", "button#axeptio_btn_dismiss,button.ax-discardButton"] },
|
|
44
|
+
"then": [{ "click": [".axeptio_mount .needsclick", "button#axeptio_btn_dismiss,button.ax-discardButton"] }],
|
|
45
|
+
"else": [{ "click": [".axeptio_mount .needsclick", "button#axeptio_btn_close"] }]
|
|
46
|
+
}
|
|
38
47
|
],
|
|
39
48
|
"else": [
|
|
40
|
-
{ "waitForVisible": "button#axeptio_btn_dismiss,button.ax-discardButton" },
|
|
49
|
+
{ "waitForVisible": "button#axeptio_btn_dismiss,button.ax-discardButton,button#axeptio_btn_close" },
|
|
41
50
|
{ "wait": 300 },
|
|
42
|
-
{
|
|
51
|
+
{
|
|
52
|
+
"if": { "exists": "button#axeptio_btn_dismiss,button.ax-discardButton" },
|
|
53
|
+
"then": [{ "click": "button#axeptio_btn_dismiss,button.ax-discardButton" }],
|
|
54
|
+
"else": [{ "click": "button#axeptio_btn_close" }]
|
|
55
|
+
}
|
|
43
56
|
]
|
|
44
57
|
}
|
|
45
58
|
],
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bigcrunch",
|
|
3
|
+
"vendorUrl": "https://www.bigcrunch.com/",
|
|
4
|
+
"runContext": {
|
|
5
|
+
"main": true,
|
|
6
|
+
"frame": false
|
|
7
|
+
},
|
|
8
|
+
"prehideSelectors": ["#bc-cmp-host", "#bc-cmp-host-auto"],
|
|
9
|
+
"detectCmp": [
|
|
10
|
+
{
|
|
11
|
+
"exists": ["#bc-cmp-host, #bc-cmp-host-auto", "#bc-cmp-banner"]
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"detectPopup": [
|
|
15
|
+
{
|
|
16
|
+
"visible": ["#bc-cmp-host, #bc-cmp-host-auto", "#bc-cmp-banner-container:not([style*=\"display: none\"]) #bc-cmp-banner"]
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"optIn": [
|
|
20
|
+
{
|
|
21
|
+
"waitForThenClick": ["#bc-cmp-host, #bc-cmp-host-auto", "#bc-cmp-banner [data-action=accept-all]"]
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"optOut": [
|
|
25
|
+
{
|
|
26
|
+
"waitForThenClick": ["#bc-cmp-host, #bc-cmp-host-auto", "#bc-cmp-banner [data-action=reject-all]"]
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"test": [
|
|
30
|
+
{
|
|
31
|
+
"waitForVisible": [
|
|
32
|
+
"#bc-cmp-host, #bc-cmp-host-auto",
|
|
33
|
+
"#bc-cmp-banner-container:not([style*=\"display: none\"]) #bc-cmp-banner"
|
|
34
|
+
],
|
|
35
|
+
"timeout": 2000,
|
|
36
|
+
"check": "none"
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
@@ -17,6 +17,11 @@
|
|
|
17
17
|
}
|
|
18
18
|
],
|
|
19
19
|
"optOut": [
|
|
20
|
+
{
|
|
21
|
+
"waitFor": ".brlbs-btn-accept-only-essential,a[data-cookie-refuse],.brlbs-btn-save,#CookieBoxSaveButton,.brlbs-cmpnt-close-button[data-borlabs-cookie-actions=\"close-button\"],a[data-cookie-individual]",
|
|
22
|
+
"timeout": 3000,
|
|
23
|
+
"optional": true
|
|
24
|
+
},
|
|
20
25
|
{
|
|
21
26
|
"if": {
|
|
22
27
|
"exists": ".brlbs-btn-accept-only-essential,a[data-cookie-refuse]"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bricklink",
|
|
3
|
+
"vendorUrl": "https://www.bricklink.com/",
|
|
4
|
+
"runContext": {
|
|
5
|
+
"urlPattern": "^https?://([a-z0-9-]+\\.)?bricklink\\.com/"
|
|
6
|
+
},
|
|
7
|
+
"prehideSelectors": [".blp-necessary-cookies-banner"],
|
|
8
|
+
"detectCmp": [
|
|
9
|
+
{
|
|
10
|
+
"exists": ".blp-necessary-cookies-banner"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"detectPopup": [
|
|
14
|
+
{
|
|
15
|
+
"visible": ".blp-necessary-cookies-banner"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"optIn": [
|
|
19
|
+
{
|
|
20
|
+
"waitForThenClick": ".blp-necessary-cookies-banner__button"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"optOut": [
|
|
24
|
+
{
|
|
25
|
+
"waitForThenClick": ".blp-necessary-cookies-banner__button"
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"test": [
|
|
29
|
+
{
|
|
30
|
+
"cookieContains": "has-dismissed-necessary-cookies-banner=true"
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ceneo",
|
|
3
|
+
"prehideSelectors": ["#js_cookie-consent-banner"],
|
|
4
|
+
"detectCmp": [{ "exists": "#js_cookie-consent-banner .js_cookie-consent-necessary" }],
|
|
5
|
+
"detectPopup": [{ "visible": "#js_cookie-consent-banner .js_cookie-consent-necessary" }],
|
|
6
|
+
"optIn": [{ "waitForThenClick": "#js_cookie-consent-banner .js_cookie-consent-agree" }],
|
|
7
|
+
"optOut": [{ "waitForThenClick": "#js_cookie-consent-banner .js_cookie-consent-necessary" }],
|
|
8
|
+
"test": [{ "waitForVisible": "#js_cookie-consent-banner", "timeout": 1000, "check": "none" }]
|
|
9
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "conjointly",
|
|
3
|
+
"vendorUrl": "https://conjointly.com/",
|
|
4
|
+
"runContext": {
|
|
5
|
+
"urlPattern": "^https://(www\\.)?conjointly\\.com/"
|
|
6
|
+
},
|
|
7
|
+
"prehideSelectors": [".cookie-prompt-container"],
|
|
8
|
+
"detectCmp": [
|
|
9
|
+
{
|
|
10
|
+
"exists": ".cookie-prompt-container #custom-cookie-banner-container"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"detectPopup": [
|
|
14
|
+
{
|
|
15
|
+
"visible": ".cookie-prompt-container #custom-cookie-banner-container"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"optIn": [
|
|
19
|
+
{
|
|
20
|
+
"waitForThenClick": ".cookie-prompt-container .confirm-all-cookies"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"optOut": [
|
|
24
|
+
{
|
|
25
|
+
"if": {
|
|
26
|
+
"exists": ".cookie-prompt-container #analytic-cookie:checked"
|
|
27
|
+
},
|
|
28
|
+
"then": [
|
|
29
|
+
{
|
|
30
|
+
"click": ".cookie-prompt-container #analytic-cookie"
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"waitForThenClick": ".cookie-prompt-container .confirm-cookies"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"test": [
|
|
39
|
+
{
|
|
40
|
+
"cookieContains": "cookie_policy=false"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
@@ -13,23 +13,67 @@
|
|
|
13
13
|
],
|
|
14
14
|
"optIn": [
|
|
15
15
|
{
|
|
16
|
-
"waitForThenClick": [
|
|
16
|
+
"waitForThenClick": [
|
|
17
|
+
"csm-cookie-consent",
|
|
18
|
+
".csm-wrapper [data-csm-button-type='accept'], .csm-wrapper .cc-allow:not([data-csm-button-type])"
|
|
19
|
+
]
|
|
17
20
|
}
|
|
18
21
|
],
|
|
19
22
|
"optOut": [
|
|
20
23
|
{
|
|
21
|
-
"if": {
|
|
24
|
+
"if": {
|
|
25
|
+
"exists": ["csm-cookie-consent", ".csm-wrapper .cc-deny, .csm-wrapper [data-csm-button-type='reject']"]
|
|
26
|
+
},
|
|
22
27
|
"then": [
|
|
23
28
|
{
|
|
24
|
-
"waitForThenClick": ["csm-cookie-consent", ".csm-wrapper .cc-deny"]
|
|
29
|
+
"waitForThenClick": ["csm-cookie-consent", ".csm-wrapper .cc-deny, .csm-wrapper [data-csm-button-type='reject']"]
|
|
25
30
|
}
|
|
26
31
|
],
|
|
27
32
|
"else": [
|
|
28
33
|
{
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
34
|
+
"if": {
|
|
35
|
+
"exists": ["csm-cookie-consent", ".csm-wrapper [data-csm-button-type='do_not_sell']"]
|
|
36
|
+
},
|
|
37
|
+
"then": [
|
|
38
|
+
{
|
|
39
|
+
"waitForThenClick": ["csm-cookie-consent", ".csm-wrapper [data-csm-button-type='do_not_sell']"]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"comment": "the banner stays open after opting out of sale, close it",
|
|
43
|
+
"waitForThenClick": ["csm-cookie-consent", ".csm-wrapper [data-csm-button-type='dismiss']"],
|
|
44
|
+
"timeout": 2000,
|
|
45
|
+
"optional": true
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"else": [
|
|
49
|
+
{
|
|
50
|
+
"waitForThenClick": [
|
|
51
|
+
"csm-cookie-consent",
|
|
52
|
+
".csm-wrapper .cc-settings, .csm-wrapper [data-csm-button-type='preferences']"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"waitForVisible": [
|
|
57
|
+
"csm-cookie-consent",
|
|
58
|
+
".csm-wrapper .cc-deny, .csm-wrapper [data-csm-button-type='accept_selected']"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"if": {
|
|
63
|
+
"exists": ["csm-cookie-consent", ".csm-wrapper .cc-deny"]
|
|
64
|
+
},
|
|
65
|
+
"then": [
|
|
66
|
+
{
|
|
67
|
+
"click": ["csm-cookie-consent", ".csm-wrapper .cc-deny"]
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"else": [
|
|
71
|
+
{
|
|
72
|
+
"click": ["csm-cookie-consent", ".csm-wrapper [data-csm-button-type='accept_selected']"]
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
]
|
|
33
77
|
}
|
|
34
78
|
]
|
|
35
79
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cookie-popup-close-cookies",
|
|
3
|
+
"prehideSelectors": ["#cookie-popup"],
|
|
4
|
+
"detectCmp": [
|
|
5
|
+
{
|
|
6
|
+
"exists": "#cookie-popup #close-cookies"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"exists": "#cookie-popup #view-all"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"detectPopup": [
|
|
13
|
+
{
|
|
14
|
+
"exists": "#cookie-popup:not([class*=\"invisible\"]) #close-cookies"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"optIn": [
|
|
18
|
+
{
|
|
19
|
+
"waitForThenClick": "#cookie-popup #accept-all"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"optOut": [
|
|
23
|
+
{
|
|
24
|
+
"eval": "EVAL_COOKIE_POPUP_CLOSE"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"waitFor": "#cookie-popup[class*=\"invisible\"]",
|
|
28
|
+
"timeout": 2000
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"test": [
|
|
32
|
+
{
|
|
33
|
+
"cookieContains": "acceptedAnalytics=granted",
|
|
34
|
+
"negated": true
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
|
@@ -25,7 +25,12 @@
|
|
|
25
25
|
{
|
|
26
26
|
"if": { "exists": "#s-rall-bn" },
|
|
27
27
|
"then": [{ "waitForThenClick": "#s-rall-bn" }],
|
|
28
|
-
"else": [
|
|
28
|
+
"else": [
|
|
29
|
+
{ "waitForThenClick": "#c-s-bn" },
|
|
30
|
+
{ "wait": 500 },
|
|
31
|
+
{ "click": "#s-bl input.c-tgl:checked:not(:disabled)", "all": true, "optional": true },
|
|
32
|
+
{ "waitForThenClick": "#s-sv-bn" }
|
|
33
|
+
]
|
|
29
34
|
}
|
|
30
35
|
],
|
|
31
36
|
"test": [
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "costco",
|
|
3
|
+
"vendorUrl": "https://www.costco.ca/",
|
|
4
|
+
"cosmetic": true,
|
|
5
|
+
"comment": "The banner runs on Transcend airgap, whose setConsent() rejects consent changes unless the click event is trusted (isTrusted), so scripted clicks can't save an opt-out.",
|
|
6
|
+
"prehideSelectors": ["#costco-consent-manager [data-testid=\"Popup\"]"],
|
|
7
|
+
"detectCmp": [
|
|
8
|
+
{
|
|
9
|
+
"exists": "#costco-consent-manager [data-testid=\"Popup\"]"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"detectPopup": [
|
|
13
|
+
{
|
|
14
|
+
"visible": "#costco-consent-manager [data-testid=\"Popup\"]"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"optIn": [
|
|
18
|
+
{
|
|
19
|
+
"waitForThenClick": "#costco-consent-manager [data-testid=\"Popup\"] button.MuiButton-primary"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"optOut": [
|
|
23
|
+
{
|
|
24
|
+
"hide": "#costco-consent-manager"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "datasign",
|
|
3
|
+
"vendorUrl": "https://datasign.jp/",
|
|
4
|
+
"cosmetic": false,
|
|
5
|
+
"prehideSelectors": [],
|
|
6
|
+
"detectCmp": [
|
|
7
|
+
{
|
|
8
|
+
"exists": "#datasign_cmp__host"
|
|
9
|
+
}
|
|
10
|
+
],
|
|
11
|
+
"detectPopup": [
|
|
12
|
+
{
|
|
13
|
+
"visible": ["#datasign_cmp__host", "#datasign_cmp__cmp_summary"]
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"optIn": [
|
|
17
|
+
{
|
|
18
|
+
"if": {
|
|
19
|
+
"exists": ["#datasign_cmp__host", "#datasign_cmp__cmp_content input[type=checkbox]:not([disabled])"]
|
|
20
|
+
},
|
|
21
|
+
"then": [
|
|
22
|
+
{
|
|
23
|
+
"waitForThenClick": [
|
|
24
|
+
"#datasign_cmp__host",
|
|
25
|
+
"#datasign_cmp__config-button, #datasign_cmp__cmp_summary [aria-controls=datasign_cmp__cmp_content]"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"waitForVisible": ["#datasign_cmp__host", "#datasign_cmp__cmp_content_apply-button"]
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"click": ["#datasign_cmp__host", "#datasign_cmp__cmp_content input[type=checkbox]:not(:checked):not([disabled])"],
|
|
33
|
+
"all": true,
|
|
34
|
+
"optional": true
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"click": ["#datasign_cmp__host", "#datasign_cmp__cmp_content_apply-button"]
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"else": [
|
|
41
|
+
{
|
|
42
|
+
"click": ["#datasign_cmp__host", "#datasign_cmp__cmp_summary .datasign__dialogCloseButton--index-module"]
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"optOut": [
|
|
48
|
+
{
|
|
49
|
+
"if": {
|
|
50
|
+
"exists": ["#datasign_cmp__host", "#datasign_cmp__cmp_content input[type=checkbox]:not([disabled])"]
|
|
51
|
+
},
|
|
52
|
+
"then": [
|
|
53
|
+
{
|
|
54
|
+
"waitForThenClick": [
|
|
55
|
+
"#datasign_cmp__host",
|
|
56
|
+
"#datasign_cmp__config-button, #datasign_cmp__cmp_summary [aria-controls=datasign_cmp__cmp_content]"
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"waitForVisible": ["#datasign_cmp__host", "#datasign_cmp__cmp_content_apply-button"]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"click": ["#datasign_cmp__host", "#datasign_cmp__cmp_content input[type=checkbox]:checked:not([disabled])"],
|
|
64
|
+
"all": true,
|
|
65
|
+
"optional": true
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"click": ["#datasign_cmp__host", "#datasign_cmp__cmp_content_apply-button"]
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"else": [
|
|
72
|
+
{
|
|
73
|
+
"click": ["#datasign_cmp__host", "#datasign_cmp__cmp_summary .datasign__dialogCloseButton--index-module"]
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"test": [
|
|
79
|
+
{
|
|
80
|
+
"waitForVisible": ["#datasign_cmp__host", "#datasign_cmp__cmp_summary"],
|
|
81
|
+
"check": "none",
|
|
82
|
+
"timeout": 3000
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dhbbank",
|
|
3
|
+
"vendorUrl": "https://www.dhbbank.com/",
|
|
4
|
+
"runContext": {
|
|
5
|
+
"urlPattern": "^https?://(www\\.)?dhbbank\\.(com|nl|be|de)/"
|
|
6
|
+
},
|
|
7
|
+
"prehideSelectors": ["dialog.js-cookie-bar"],
|
|
8
|
+
"detectCmp": [{ "exists": "dialog.js-cookie-bar .js-reject-all" }],
|
|
9
|
+
"detectPopup": [{ "visible": "dialog.js-cookie-bar .js-reject-all" }],
|
|
10
|
+
"optIn": [{ "waitForThenClick": "dialog.js-cookie-bar .js-accept-all" }],
|
|
11
|
+
"optOut": [{ "waitForThenClick": "dialog.js-cookie-bar .js-reject-all" }],
|
|
12
|
+
"test": [{ "waitForVisible": "dialog.js-cookie-bar", "check": "none", "timeout": 3000 }, { "cookieContains": "CookieLevel=Functional" }]
|
|
13
|
+
}
|