---
title: "Bassem Shahin (@bshahin) | Hashnode"
description: "Founder at CaptchaAI · CAPTCHA solving, scraping & automation. Read the latest articles by Bassem Shahin on Hashnode."
url: "https://hashnode.com/@bshahin"
---

@bshahin

# Bassem Shahin

@bshahin · Dubai, UAE · Joined June 2026

Founder at CaptchaAI · CAPTCHA solving, scraping & automation

[Website](https://captchaai.com/)

### [The real cost of solving reCAPTCHA at scale (per-1,000 vs thread-based)](https://bshahin.hashnode.dev/the-real-cost-of-solving-recaptcha-at-scale-per-1-000-vs-thread-based?utm_source=hashnode&utm_medium=feed)

If you automate anything on the public web for long enough, reCAPTCHA is the wall you hit most. It's on far more sites than Turnstile, hCaptcha, or the enterprise bot vendors combined. So when you wir

3 min read · [bshahin.hashnode.dev](https://bshahin.hashnode.dev/the-real-cost-of-solving-recaptcha-at-scale-per-1-000-vs-thread-based?utm_source=hashnode&utm_medium=feed)

[Aug 20](https://hashnode.com/posts/the-real-cost-of-solving-recaptcha-at-scale-per-1-000-vs-thread-based/6a86a8cf4e62f2d49e0508dc)

### [Cloudflare cf\_clearance: why it expires and how to stop the re-challenge loop](https://bshahin.hashnode.dev/cloudflare-cf-clearance-why-it-expires-and-how-to-stop-the-re-challenge-loop?utm_source=hashnode&utm_medium=feed)

Cloudflare cf\_clearance: why it expires and how to stop the re-challenge loop You solve the Cloudflare challenge, get a cf\_clearance cookie, make your next request — and Cloudflare throws you straight

5 min read · [bshahin.hashnode.dev](https://bshahin.hashnode.dev/cloudflare-cf-clearance-why-it-expires-and-how-to-stop-the-re-challenge-loop?utm_source=hashnode&utm_medium=feed)

[Jun 17](https://hashnode.com/posts/cloudflare-cf-clearance-why-it-expires-and-how-to-stop-the-re-challenge-loop/6a32474bcfc657cb66f5bf49)

### [Why your Cloudflare Turnstile token works in the browser but 403s from requests](https://bshahin.hashnode.dev/why-your-cloudflare-turnstile-token-works-in-the-browser-but-403s-from-requests?utm_source=hashnode&utm_medium=feed)

You solved the Turnstile widget. You can see the token in the page. You copy it into your script, POST the form from requests, and the server hands you back a 403 — or a JSON body with "success": fals

4 min read · [bshahin.hashnode.dev](https://bshahin.hashnode.dev/why-your-cloudflare-turnstile-token-works-in-the-browser-but-403s-from-requests?utm_source=hashnode&utm_medium=feed)

[2](https://hashnode.com/posts/why-your-cloudflare-turnstile-token-works-in-the-browser-but-403s-from-requests/6a31cced11934f9ccc8a67d9) [Jun 16](https://hashnode.com/posts/why-your-cloudflare-turnstile-token-works-in-the-browser-but-403s-from-requests/6a31cced11934f9ccc8a67d9)

### [Cloudflare Turnstile in Playwright: Why Your Tests Stall and How to Solve It in 8 Lines](https://bshahin.hashnode.dev/cloudflare-turnstile-in-playwright-why-your-tests-stall-and-how-to-solve-it-in-8-lines?utm_source=hashnode&utm_medium=feed)

Why Playwright + Selenium pipelines silently break on Turnstile - and copy-pasteable Python/Node.js to solve it.

6 min read · [bshahin.hashnode.dev](https://bshahin.hashnode.dev/cloudflare-turnstile-in-playwright-why-your-tests-stall-and-how-to-solve-it-in-8-lines?utm_source=hashnode&utm_medium=feed)

[Jun 5](https://hashnode.com/posts/cloudflare-turnstile-in-playwright-why-your-tests-stall-and-how-to-solve-it-in-8-lines/6a22173dbcd0b4119ac76845)
