fix(consent-history): banner_provider als Fallback fürs CMP (#62)
Storage-Keys fehlen in Phase A (vor Consent) oft → provider blieb leer. Jetzt fällt detect_consent_history auf den bereits aus dem Banner-DOM erkannten banner_provider zurück → korrekter Anbieter + history_capable auch ohne Storage-Eintrag. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -53,9 +53,11 @@ def _is_versioned(provider: str, stored_value: Optional[str]) -> bool:
|
|||||||
return any(t in low for t in ("version", "consents", "timestamp", "consentid"))
|
return any(t in low for t in ("version", "consents", "timestamp", "consentid"))
|
||||||
|
|
||||||
|
|
||||||
async def detect_consent_history(page: Any) -> dict:
|
async def detect_consent_history(page: Any, banner_provider: str = "") -> dict:
|
||||||
"""Liest Storage/Cookies + DOM und liefert:
|
"""Liest Storage/Cookies + DOM und liefert:
|
||||||
{provider, stored, versioned_consent, history_capable, withdraw_ui}."""
|
{provider, stored, versioned_consent, history_capable, withdraw_ui}.
|
||||||
|
`banner_provider` = bereits aus dem Banner-DOM erkanntes CMP — wird als
|
||||||
|
Fallback genutzt, da Storage-Keys in Phase A (vor Consent) oft noch fehlen."""
|
||||||
keys: list[str] = []
|
keys: list[str] = []
|
||||||
try:
|
try:
|
||||||
keys = await page.evaluate("() => Object.keys(window.localStorage || {})")
|
keys = await page.evaluate("() => Object.keys(window.localStorage || {})")
|
||||||
@@ -67,7 +69,9 @@ async def detect_consent_history(page: Any) -> dict:
|
|||||||
except Exception:
|
except Exception:
|
||||||
cookie_names = []
|
cookie_names = []
|
||||||
|
|
||||||
provider = classify_provider(list(keys) + cookie_names)
|
# Provider zuerst aus Storage/Cookies, sonst aus dem erkannten Banner-CMP.
|
||||||
|
provider = (classify_provider(list(keys) + cookie_names)
|
||||||
|
or classify_provider([banner_provider or ""]))
|
||||||
|
|
||||||
stored_value = None
|
stored_value = None
|
||||||
if provider == "Borlabs":
|
if provider == "Borlabs":
|
||||||
|
|||||||
@@ -280,7 +280,8 @@ async def run_consent_test(
|
|||||||
# #62: Consent-Historie/Widerruf (Borlabs-Stil) erkennen.
|
# #62: Consent-Historie/Widerruf (Borlabs-Stil) erkennen.
|
||||||
try:
|
try:
|
||||||
from services.consent_history import detect_consent_history
|
from services.consent_history import detect_consent_history
|
||||||
result.consent_history = await detect_consent_history(page_a)
|
result.consent_history = await detect_consent_history(
|
||||||
|
page_a, result.banner_provider)
|
||||||
except Exception as _che:
|
except Exception as _che:
|
||||||
logger.warning("consent-history detection failed: %s", _che)
|
logger.warning("consent-history detection failed: %s", _che)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user