"""Google Jobs adapter — scroll to load more results, JS extraction.""" from __future__ import annotations from loguru import logger from gimme_job.adapters.base import ManifestDrivenAdapter from gimme_job.adapters.registry import register from gimme_job.models.dto import RawJobCard _MAX_SCROLLS = 5 _SCROLL_WAIT_MS = 2000 _CARD_SELECTOR = 'div[jsname="y1Aese"]' _EXTRACT_JS = """() => { const cards = document.querySelectorAll('div[jsname="y1Aese"]'); return Array.from(cards).map(card => { const shareEl = card.closest('[data-share-url]'); const shareUrl = shareEl ? shareEl.getAttribute('data-share-url') : ''; let htidocid = ''; if (shareUrl) { const docMatch = shareUrl.match(/htidocid=([^&]+)/); if (docMatch) htidocid = decodeURIComponent(docMatch[1]); } // Apply URLs (Indeed, Glassdoor, Monster, etc.) live INSIDE a