Playwright headless browser blocked by Adzuna land/ad/ redirect — "Access Denied" — how to resolve the redirect chain?

23 hours ago 3
ARTICLE AD BOX

I'm building an automated job application system. When a user clicks "Auto Apply" on an Adzuna job listing, my backend needs to follow the redirect chain to the actual employer application form and fill it out automatically.

Adzuna job listings follow this redirect chain:

https://www.adzuna.com.au/details/{id} ← job listing (loads fine) → https://www.adzuna.com.au/land/ad/{id} ← tracking redirect (BOT BLOCKED) → https://click.appcast.io/t/{token} ← appcast tracking → https://hatch.team/job/{slug} ← employer platform → https://jobs.ashbyhq.com/{company}/{id}/application ← actual form

What works:

Navigating to the Adzuna details page with Playwright — works fine

Extracting the land/ad/ URL from the Apply button — works fine

Following the full chain with Firecrawl (stealth proxy) — resolves correctly to the final Ashby ATS URL

What fails: Every method I try to resolve land/ad/ returns an "Access Denied" page served by Adzuna itself (not Cloudflare — it's an Adzuna-branded error page):

<title>Access Denied</title> <link rel="stylesheet" href="//zunastatic-abf.kxcdn.com/css/..."/>

Attempts so far:

Playwright .goto(land_url) — "Access Denied" (200 OK, bot detected)

httpx with browser-like headers:

headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...", "Accept": "text/html,application/xhtml+xml,...", "Accept-Language": "en-AU,en;q=0.9", "Referer": "https://www.adzuna.com.au/", } async with httpx.AsyncClient(headers=headers, follow_redirects=True) as client: r = await client.get(land_url) # r.url is still adzuna.com/land/ad/... — "Access Denied"

httpx with Playwright's session cookies + correct Referer (the details page was loaded by Playwright so it has valid session cookies):

pw_cookies = await page.context.cookies() session_cookies = {c["name"]: c["value"] for c in pw_cookies if "adzuna" in c["domain"]} # Still "Access Denied"

Anti-detection in Playwright context:

browser = await pw.chromium.launch(args=[ "--disable-blink-features=AutomationControlled", ]) context = await browser.new_context(user_agent="...", locale="en-AU") await context.add_init_script("Object.defineProperty(navigator,'webdriver',{get:()=>undefined})") # Details page still loads fine, but land/ad/ still blocks

How do I resolve the Adzuna land/ad/ redirect programmatically without a human browser? Specifically:

Is this TLS fingerprinting (JA3/JA4) — would curl_cffi with impersonate="chrome124" help?

Is there another way to get the final employer URL from the Adzuna details page HTML/API without going through land/ad/ at all?

Does anyone know if Adzuna exposes the destination URL anywhere (JSON-LD, data attributes, XHR response) on the details page?

Environment: Python 3.11, Playwright 1.44, httpx 0.27, running headless on Windows Server / local dev.

Read Entire Article