Spaces:
Paused
Paused
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
| <title>Fix: Cloudflare 403 Forbidden Scraping — OpticParse</title> | |
| <meta name="description" content="Getting a 403 Forbidden or 401 error when scraping with Python Requests? Learn how to bypass Cloudflare and Datadome using OpticParse Vision AI." /> | |
| <link rel="preconnect" href="https://fonts.googleapis.com"> | |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> | |
| <link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500&display=swap" onload="this.onload=null;this.rel='stylesheet'" /> | |
| <noscript> | |
| <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500&display=swap" /> | |
| </noscript> | |
| <style> | |
| *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } | |
| :root { | |
| --bg: #0a0a12; --bg2: #0f0f1a; --bg3: #13131f; | |
| --border: rgba(255,255,255,0.07); --text: #e8e8f0; --muted: #a1a1aa; | |
| --purple: #8b5cf6; --purple2: #6d28d9; --cyan: #06b6d4; --cyan2: #0891b2; | |
| } | |
| html { scroll-behavior: smooth; } | |
| body { font-family: 'Inter', sans-serif; background: var(--bg); color: var(--text); line-height: 1.6; overflow-x: hidden; } | |
| nav { | |
| position: fixed; top: 0; left: 0; right: 0; z-index: 100; | |
| display: flex; align-items: center; justify-content: space-between; | |
| padding: 1rem 2rem; | |
| background: rgba(10,10,18,0.85); backdrop-filter: blur(16px); | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .nav-logo { font-weight: 800; font-size: 1.1rem; letter-spacing: -0.5px; } | |
| .nav-logo span { background: linear-gradient(135deg, var(--purple), var(--cyan)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } | |
| .nav-links { display: flex; gap: 2rem; } | |
| .nav-links a { color: var(--muted); text-decoration: none; font-size: 0.9rem; font-weight: 500; transition: color .2s; } | |
| .nav-links a:hover { color: var(--text); } | |
| .nav-cta { background: linear-gradient(135deg, var(--purple), var(--cyan)); color: #fff; border: none; padding: .5rem 1.2rem; border-radius: 8px; font-weight: 600; font-size: .85rem; cursor: pointer; text-decoration: none; transition: opacity .2s; } | |
| .nav-cta:hover { opacity: .85; } | |
| .hero { min-height: 50vh; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 8rem 2rem 4rem; text-align: center; position: relative; overflow: hidden; } | |
| .hero h1 { font-size: clamp(2rem, 4vw, 3rem); font-weight: 900; line-height: 1.1; margin-bottom: 1.5rem; } | |
| .hero p { font-size: 1.2rem; color: var(--muted); max-width: 600px; margin-bottom: 2rem; } | |
| .code-block { background: #000; border: 1px solid var(--border); border-radius: 8px; padding: 1.5rem; text-align: left; font-family: 'JetBrains Mono', monospace; font-size: 0.9rem; color: #ff5f5f; margin-bottom: 2rem; overflow-x: auto; } | |
| section { padding: 4rem 2rem; max-width: 900px; margin: 0 auto; } | |
| .section-label { display: inline-block; font-size: .75rem; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--muted); margin-bottom: 1rem; } | |
| .section-title { font-size: clamp(1.5rem, 3vw, 2.2rem); font-weight: 800; letter-spacing: -1px; line-height: 1.1; margin-bottom: 1.5rem; } | |
| .content-block { color: var(--text-muted); font-size: 1.1rem; line-height: 1.8; margin-bottom: 2rem; } | |
| .content-block p { margin-bottom: 1.5rem; color: var(--muted); } | |
| .feature-list { list-style: none; display: flex; flex-direction: column; gap: .8rem; margin-bottom: 1.5rem; } | |
| .feature-list li { display: flex; align-items: flex-start; gap: .6rem; font-size: 1.05rem; color: var(--muted); } | |
| .feature-list li::before { content: '→'; color: var(--cyan); font-weight: 700; flex-shrink: 0; } | |
| .divider { height: 1px; background: var(--border); margin: 0 2rem; } | |
| footer { border-top: 1px solid var(--border); padding: 2.5rem 2rem; text-align: center; color: var(--muted); font-size: .85rem; } | |
| footer a { color: var(--muted); text-decoration: none; } | |
| footer a:hover { color: var(--text); } | |
| .footer-links { display: flex; gap: 2rem; justify-content: center; flex-wrap: wrap; margin-bottom: 1rem; } | |
| @media (max-width: 768px) { | |
| .nav-links { display: none; } | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <nav> | |
| <div class="nav-logo"><span>Opticparse</span> & PhishVision</div> | |
| <div class="nav-links"> | |
| <a href="/">Home</a> | |
| <a href="/phishvision.html">PhishVision</a> | |
| <a href="/api-docs.html">Docs</a> | |
| </div> | |
| <a href="https://dashboard.opticparse.com" target="_blank" class="nav-cta">Start Free →</a> | |
| </nav> | |
| <main> | |
| <div class="hero"> | |
| <h1>Fix: Cloudflare 403 Forbidden while scraping</h1> | |
| <div class="code-block">requests.exceptions.HTTPError: 403 Client Error: Forbidden for url</div> | |
| <p>Are your Python requests or basic scrapers getting blocked by Cloudflare or Datadome? Stop fighting bot protection manually.</p> | |
| </div> | |
| <section> | |
| <div class="section-label">The Problem</div> | |
| <h2 class="section-title">Why am I getting a 403?</h2> | |
| <div class="content-block"> | |
| <p>If you're using `requests.get()` or a simple HTTP client to scrape a website, Cloudflare detects immediately that you are not a real browser. They check your TLS fingerprint, JavaScript execution capabilities, and headers.</p> | |
| <p>Faking headers (`User-Agent`) doesn't work anymore. Cloudflare expects your client to execute a complex JavaScript challenge. If you can't run JS, you get a 403 Forbidden.</p> | |
| </div> | |
| </section> | |
| <div class="divider"></div> | |
| <section> | |
| <div class="section-label">The Fix</div> | |
| <h2 class="section-title">Visual Browsers bypass WAFs</h2> | |
| <div class="content-block"> | |
| <p>The only reliable way to bypass modern bot protection is to use a real, headful browser that can execute the JavaScript challenge perfectly. But managing headless browsers and rotating proxies is expensive and complex.</p> | |
| <p>That's where <strong>OpticParse</strong> comes in.</p> | |
| <ul class="feature-list"> | |
| <li>OpticParse manages real Chromium browsers automatically.</li> | |
| <li>We handle the JS execution to bypass Cloudflare challenge pages seamlessly.</li> | |
| <li>Instead of parsing HTML, we take a screenshot and use AI to extract the JSON you want.</li> | |
| </ul> | |
| <p>Stop fighting WAFs and bot detection. Send us the URL and a prompt, and we'll return the data.</p> | |
| </div> | |
| </section> | |
| </main> | |
| <footer> | |
| <div class="footer-links"> | |
| <a href="https://dashboard.opticparse.com" target="_blank">Opticparse Dashboard</a> | |
| <a href="/api-docs.html">API Documentation</a> | |
| <a href="/sitemap.xml">Sitemap</a> | |
| </div> | |
| <p>© 2026 OpticParse</p> | |
| </footer> | |
| </body> | |
| </html> | |