How to Solve Captcha in RoxyBrowser with CapSolver Integration

Lucas Mitchell
Automation Engineer
04-Feb-2026

RoxyBrowser provides browser functionality through API calls and can be integrated with automation frameworks like Selenium, Puppeteer, and Playwright. Its API is designed to let you open real browser profiles programmatically and attach your automation tooling. The API has a documented rate limit of 100 calls per minute per endpoint.
Source: https://faq.roxybrowser.org/en/guide/10-API
CapSolver provides a create-and-poll API flow that returns a CAPTCHA token you can inject into the page. CapSolver supports multiple CAPTCHA types:
- reCAPTCHA v2: Task type
ReCaptchaV2TaskProxyLess, returnsgRecaptchaResponse - reCAPTCHA v3: Task type
ReCaptchaV3TaskProxyLess, returnsgRecaptchaResponsewith score - Cloudflare Turnstile: Task type
AntiTurnstileTaskProxyLess, returnstokenCheck the docs
This guide shows a practical, framework-agnostic flow: open a Roxy profile via API, attach your automation framework, solve the CAPTCHA with CapSolver, and inject the token to continue.
What is RoxyBrowser?
RoxyBrowser is an antidetect browser for multi-accounting with features like API automation and multi-window synchronizer.
For automation, the API is the most relevant piece:
-
It supports Selenium, Puppeteer, and Playwright integration.
-
Requests must include a
tokenheader. -
Default API host is
http://127.0.0.1:50000(port change requires restart).
What is CapSolver?
CapSolver solves CAPTCHAs through two API calls:
createTaskto submit the CAPTCHA parametersgetTaskResultto poll until the token is ready
For reCAPTCHA v2, CapSolver returns gRecaptchaResponse.
getTaskResult is limited to 120 queries per task and must be called within 5 minutes of task creation.
RoxyBrowser API Setup
1) Enable the API and get your token
- Open RoxyBrowser and go to API.
- Set the API switch to Enabled.
- Copy the API key (token) and confirm the host/port.
By default, the host is http://127.0.0.1:50000. If you change the port, you must restart RoxyBrowser.
2) Get workspace and profile IDs
Use /browser/workspace to fetch workspaces, then /browser/list_v3 to list profiles.
python
import requests
BASE = "http://127.0.0.1:50000"
HEADERS = {"token": "YOUR_ROXY_API_KEY"}
workspaces = requests.get(f"{BASE}/browser/workspace", headers=HEADERS).json()
workspace_id = workspaces["data"]["rows"][0]["id"]
profiles = requests.get(
f"{BASE}/browser/list_v3",
params={"workspaceId": workspace_id},
headers=HEADERS
).json()
dir_id = profiles["data"]["rows"][0]["dirId"]
3) Open a profile and capture automation endpoints
Call /browser/open. The response includes:
ws: WebSocket interface for automation toolshttp: HTTP interface for automation toolsdriver: WebDriver path for Selenium integration
Headless mode is not supported.
python
open_resp = requests.post(
f"{BASE}/browser/open",
json={"workspaceId": workspace_id, "dirId": dir_id, "args": []},
headers=HEADERS
).json()
ws_endpoint = open_resp["data"]["ws"]
http_endpoint = open_resp["data"]["http"]
driver_path = open_resp["data"]["driver"]
4) Attach your automation framework
Use the returned endpoints to attach your framework:
- Puppeteer/Playwright can connect via the DevTools WebSocket or HTTP endpoint.
- Selenium can use the
driverpath with a debugger connection.
The exact attach steps depend on your framework, but the ws, http, and driver values are explicitly provided for automation tools.
CapSolver Helper (Python)
python
import time
import requests
CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"
CAPSOLVER_BASE = "https://api.capsolver.com"
def create_task(task):
payload = {"clientKey": CAPSOLVER_API_KEY, "task": task}
r = requests.post(f"{CAPSOLVER_BASE}/createTask", json=payload)
data = r.json()
if data.get("errorId", 0) != 0:
raise RuntimeError(data.get("errorDescription", "CapSolver error"))
return data["taskId"]
def get_task_result(task_id, delay=2):
while True:
time.sleep(delay)
r = requests.post(
f"{CAPSOLVER_BASE}/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
)
data = r.json()
if data.get("status") == "ready":
return data["solution"]
if data.get("status") == "failed":
raise RuntimeError(data.get("errorDescription", "Task failed"))
def solve_recaptcha_v2(website_url, website_key):
task = {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
task_id = create_task(task)
solution = get_task_result(task_id)
return solution.get("gRecaptchaResponse", "")
def solve_recaptcha_v3(website_url, website_key, page_action="verify"):
task = {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key,
"pageAction": page_action
}
task_id = create_task(task)
solution = get_task_result(task_id)
return solution.get("gRecaptchaResponse", "")
def solve_turnstile(website_url, website_key, action=None, cdata=None):
task = {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
# Add optional metadata if provided
if action or cdata:
task["metadata"] = {}
if action:
task["metadata"]["action"] = action
if cdata:
task["metadata"]["cdata"] = cdata
task_id = create_task(task)
solution = get_task_result(task_id)
return solution.get("token", "")
For Reference:
End-to-End Flow: reCAPTCHA v2
-
Open a Roxy profile via
/browser/openand attach your automation framework. -
Navigate to the target page and extract the site key.
Example:javascriptconst siteKey = document.querySelector(".g-recaptcha")?.getAttribute("data-sitekey"); -
Solve with CapSolver using the helper above.
-
Inject the token and submit the form:
javascriptconst token = "CAPSOLVER_TOKEN"; const el = document.getElementById("g-recaptcha-response"); el.style.display = "block"; el.value = token; el.dispatchEvent(new Event("input", { bubbles: true })); el.dispatchEvent(new Event("change", { bubbles: true }));
End-to-End Flow: reCAPTCHA v3
reCAPTCHA v3 works differently - it runs in the background and returns a score (0.0 to 1.0) instead of requiring user interaction.
-
Extract the site key and action from the page:
javascript// Site key is usually in a script or meta tag const siteKey = document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey'); // Action is found in grecaptcha.execute calls // Search page source for: grecaptcha.execute('KEY', {action: 'ACTION'}) const pageAction = "submit"; // or "login", "register", etc. -
Solve with CapSolver:
pythontoken = solve_recaptcha_v3( website_url="https://example.com/login", website_key="6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxAA", page_action="login" ) -
Inject the token (same as v2):
javascriptconst token = "CAPSOLVER_TOKEN"; document.getElementById("g-recaptcha-response").value = token; // If there's a callback, trigger it if (typeof ___grecaptcha_cfg !== 'undefined') { const clients = ___grecaptcha_cfg.clients; Object.keys(clients).forEach(key => { if (clients[key].callback) { clients[key].callback(token); } }); }
End-to-End Flow: Cloudflare Turnstile
Cloudflare Turnstile is a modern CAPTCHA alternative that's faster to solve (1-20 seconds).
-
Extract the Turnstile site key:
javascriptconst siteKey = document.querySelector('.cf-turnstile')?.getAttribute('data-sitekey'); // Optional: extract action and cdata if present const action = document.querySelector('.cf-turnstile')?.getAttribute('data-action'); const cdata = document.querySelector('.cf-turnstile')?.getAttribute('data-cdata'); -
Solve with CapSolver:
pythontoken = solve_turnstile( website_url="https://example.com", website_key="0x4AAAAAAAxxxxxxxxxxxxxxx", action=action, # optional cdata=cdata # optional ) -
Inject the Turnstile token:
javascriptconst token = "CAPSOLVER_TURNSTILE_TOKEN"; // Find the Turnstile response input const input = document.querySelector('input[name="cf-turnstile-response"]'); if (input) { input.value = token; input.dispatchEvent(new Event('input', { bubbles: true })); input.dispatchEvent(new Event('change', { bubbles: true })); } // Alternative: some sites use a different input name const altInput = document.querySelector('input[name="turnstile-response"]'); if (altInput) { altInput.value = token; }
Best Practices
- Respect RoxyBrowser's API rate limit: 100 calls per minute per endpoint.
- CapSolver
getTaskResultis limited to 120 polls within 5 minutes. - Use retry logic and backoff if tokens are rejected.
- Keep the solver IP and browsing IP consistent when the target site validates token origin.
Ready to get started? Sign up for CapSolver and use bonus code ROXYBROWSER for an extra 6% bonus on your first recharge!

FAQ
-
Does RoxyBrowser support Selenium, Puppeteer, and Playwright?
Yes. The API is designed for integration with these frameworks. -
Where do I get the API token and host?
From API -> API Configuration in RoxyBrowser. The default host ishttp://127.0.0.1:50000. -
What does
/browser/openreturn?
It returnsws,http, anddriverfields used by automation tools. -
Is headless supported?
No, headless mode is not supported. -
What CAPTCHA types does CapSolver support?
-
How does CapSolver return reCAPTCHA v2 tokens?
Create a task withReCaptchaV2TaskProxyLessand pollgetTaskResultforgRecaptchaResponse. -
How does reCAPTCHA v3 differ from v2?
reCAPTCHA v3 runs in the background without user interaction and returns a score (0.0-1.0). It requires thepageActionparameter, which can be found by searching forgrecaptcha.executein the page source. -
How do I solve Cloudflare Turnstile?
Use task typeAntiTurnstileTaskProxyLesswithwebsiteURLandwebsiteKey. Optionally includemetadata.actionandmetadata.cdataif present on the widget. Turnstile solves in 1-20 seconds.
Further Reading: -
How do I find the Turnstile site key?
Look for thedata-sitekeyattribute on the.cf-turnstileelement. Turnstile site keys start with0x4. -
Do I need a proxy for CapSolver?
No, the*ProxyLesstask types use CapSolver's built-in proxy infrastructure. Use the non-ProxyLess variants if you need to use your own proxies.
Conclusion
RoxyBrowser gives you a profile-based browser environment with automation endpoints, and CapSolver provides programmatic CAPTCHA tokens. By opening a Roxy profile, attaching your framework, and injecting CapSolver tokens, you can build reliable CAPTCHA-aware automation flows.
Compliance Disclaimer: The information provided on this blog is for informational purposes only. CapSolver is committed to compliance with all applicable laws and regulations. The use of the CapSolver network for illegal, fraudulent, or abusive activities is strictly prohibited and will be investigated. Our captcha-solving solutions enhance user experience while ensuring 100% compliance in helping solve captcha difficulties during public data crawling. We encourage responsible use of our services. For more information, please visit our Terms of Service and Privacy Policy.
More

How to Solve Captcha with Nanobrowser and CapSolver Integration
Solve reCAPTCHA and Cloudflare Turnstile automatically by integrating Nanobrowser with CapSolver for seamless AI automation.

Ethan Collins
04-Feb-2026

How to Solve Captcha in RoxyBrowser with CapSolver Integration
Integrate CapSolver with RoxyBrowser to automate browser tasks and bypass reCAPTCHA, Turnstile, and other CAPTCHAs.

Lucas Mitchell
04-Feb-2026

How to Solve Captcha in EasySpider with CapSolver Integration
EasySpider is a visual, no-code web scraping and browser automation tool, and when combined with CapSolver, it can reliably solve CAPTCHAs like reCAPTCHA v2 and Cloudflare Turnstile, enabling seamless automated data extraction across websites.

Lucas Mitchell
04-Feb-2026

How to Solve reCAPTCHA v2 in Relevance AI with CapSolver Integration
Build a Relevance AI tool to solve reCAPTCHA v2 using CapSolver. Automate form submissions via API without browser automation.

Lucas Mitchell
03-Feb-2026

Web Scraping in Node.js: Using Node Unblocker and CapSolver
Master web scraping in Node.js using Node Unblocker to bypass restrictions and CapSolver to solve CAPTCHAs. This guide provides advanced strategies for efficient and reliable data extraction.

Nikolai Smirnov
03-Feb-2026

Instant Data Scraper Tools: Fast Ways to Extract Web Data Without Code
Discover the best instant data scraper tools for 2026. Learn fast ways to extract web data without code using top extensions and APIs for automated extraction.

Emma Foster
27-Jan-2026

