<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: luisgustvo</title>
    <description>The latest articles on DEV Community by luisgustvo (@luisgustvo).</description>
    <link>https://dev.to/luisgustvo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1894995%2F6ea13137-c292-4572-8f1e-b5a30594b3e5.jpeg</url>
      <title>DEV Community: luisgustvo</title>
      <link>https://dev.to/luisgustvo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/luisgustvo"/>
    <language>en</language>
    <item>
      <title>How to Bypass Cloudflare Turnstile in Vehicle Data Automation</title>
      <dc:creator>luisgustvo</dc:creator>
      <pubDate>Thu, 16 Apr 2026 06:33:51 +0000</pubDate>
      <link>https://dev.to/luisgustvo/how-to-bypass-cloudflare-turnstile-in-vehicle-data-automation-5a4p</link>
      <guid>https://dev.to/luisgustvo/how-to-bypass-cloudflare-turnstile-in-vehicle-data-automation-5a4p</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwcwn45qfaazgddz6tbyh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwcwn45qfaazgddz6tbyh.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Cloudflare Turnstile presents a significant hurdle for automated access to government and vehicle data portals.&lt;/li&gt;
&lt;li&gt;CapSolver offers an AI-powered service to generate valid tokens, bypassing these challenges without manual intervention.&lt;/li&gt;
&lt;li&gt;Seamless integration with automation platforms like n8n facilitates multi-step data scraping and legal data retrieval.&lt;/li&gt;
&lt;li&gt;Utilizing the AntiTurnstileTaskProxyLess task type optimizes cost-efficiency and simplifies technical infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.capsolver.com/?utm_source=dev.to&amp;amp;utm_medium=blog&amp;amp;utm_campaign=public-record-data-turnstile"&gt;CapSolver&lt;/a&gt; provides an enterprise-grade solution for stable and compliant high-volume data collection.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the contemporary landscape of vehicle data and public records automation, sophisticated security measures are frequently encountered, primarily designed to distinguish between human users and automated systems. Cloudflare Turnstile has emerged as a prominent solution adopted by many websites, implementing a non-interactive challenge that operates discreetly in the background. For professionals such as data engineers and legal technology analysts, mastering how to bypass Cloudflare Turnstile within vehicle data and public records automation workflows is crucial for sustaining uninterrupted data streams.&lt;/p&gt;

&lt;p&gt;CapSolver delivers a specialized, AI-driven service that automates bypassing these challenges, thereby enabling scripts to execute without interruption. The CapSolver API, complemented by its official n8n integration, stands out as an exceptionally efficient tool for managing extensive public records retrieval while upholding technical stability. This guide aims to elucidate the integration of these solutions into existing workflows, maximizing reliability and cost-effectiveness.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Proliferation of Cloudflare Turnstile in Public Data Portals
&lt;/h2&gt;

&lt;p&gt;Government entities and providers of vehicle history data are increasingly implementing Cloudflare Turnstile as a fundamental component of their security and verification frameworks for public-facing data access. Turnstile employs a combination of browser signals and user interaction patterns to evaluate the legitimacy of requests, offering a more streamlined alternative to conventional CAPTCHA methods that typically rely on visual puzzles.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge Type&lt;/th&gt;
&lt;th&gt;User Interaction&lt;/th&gt;
&lt;th&gt;Detection Method&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Managed&lt;/td&gt;
&lt;td&gt;No direct user interaction&lt;/td&gt;
&lt;td&gt;Browser fingerprinting signals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Non-Interactive&lt;/td&gt;
&lt;td&gt;No visible challenge&lt;/td&gt;
&lt;td&gt;Behavioral and risk-based analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invisible&lt;/td&gt;
&lt;td&gt;Fully background verification&lt;/td&gt;
&lt;td&gt;Continuous session-based evaluation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These operational modes are engineered to function with minimal disruption to end-users, while simultaneously applying varying degrees of risk assessment contingent on the context of the request.&lt;/p&gt;

&lt;p&gt;For a broader understanding of the evolution of automated traffic detection and bot mitigation strategies across diverse industries, refer to &lt;strong&gt;Cybersecurity and Automation Trends – Statista&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For teams engaged in determining how to manage Turnstile within vehicle data and public records workflows, comprehending these verification modes constitutes a foundational step in developing more dependable and resilient automation systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Limitations of Conventional Scraping Against Turnstile
&lt;/h2&gt;

&lt;p&gt;Traditional web scraping techniques frequently encounter failure when confronted with Cloudflare Turnstile, primarily because they are unable to adequately address the cryptographic challenges issued by Cloudflare. Even advanced headless browsers can be identified and blocked if their operational signals do not precisely align with expected browser behaviors. This often results in blocked requests, premature session terminations, and incomplete datasets within vehicle history or court record databases.&lt;/p&gt;

&lt;p&gt;Turnstile is specifically designed to detect indicators of automation, such as the absence of typical browser features, anomalous request headers, or inconsistent timing patterns. Without a specialized bypassing mechanism, automated processes are highly likely to become ensnared in an unending cycle of verification attempts. This underscores the necessity of a professional service to bridge the gap between rudimentary automation efforts and successful data acquisition. More information on overcoming such challenges can be found in this article: &lt;a href="https://www.capsolver.com/blog/Cloudflare/solve-cloudflare-in-2026" rel="noopener noreferrer"&gt;Solving Cloudflare Challenges in 2026&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automating Solutions with CapSolver API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.capsolver.com/?utm_source=dev.to&amp;amp;utm_medium=blog&amp;amp;utm_campaign=public-record-data-turnstile"&gt;CapSolver&lt;/a&gt; provides a streamlined API that manages the complexities of bypassing Turnstile. The primary method involves the &lt;code&gt;AntiTurnstileTaskProxyLess&lt;/code&gt; task type, which is both cost-effective and straightforward to implement. By supplying the target &lt;code&gt;websiteURL&lt;/code&gt; and the site's unique &lt;code&gt;websiteKey&lt;/code&gt;, a valid token can be obtained, allowing your scraper to proceed unimpeded.&lt;/p&gt;

&lt;p&gt;This process is designed for speed and reliability. Below is a comprehensive Python example utilizing the &lt;code&gt;requests&lt;/code&gt; library to initiate and monitor a bypassing task:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="c1"&gt;# Configuration
&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;WEBSITE_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0x4XXXXXXXXXXXXXXXXX&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;WEBSITE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.yourwebsite.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_turnstile_task&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clientKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AntiTurnstileTaskProxyLess&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;WEBSITE_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteURL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;WEBSITE_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metadata&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;login&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Optional action parameter
&lt;/span&gt;            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.capsolver.com/createTask&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;taskId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error creating task: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_task_result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clientKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;taskId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;task_id&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.capsolver.com/getTaskResult&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ready&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task solved successfully!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;solution&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{}).&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;token&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task failed to solve.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;

            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task still processing, waiting 2 seconds...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error getting task result: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;

&lt;span class="c1"&gt;# Main execution
&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_turnstile_task&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_task_result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generated Token: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This implementation is a crucial component for developers who prefer custom code when addressing Cloudflare Turnstile in vehicle data and public records automation. For those operating within a JavaScript environment, the subsequent Node.js example illustrates a comparable asynchronous workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;);

const API_KEY = "YOUR_API_KEY";
const WEBSITE_KEY = "0x4XXXXXXXXXXXXXXXXX";
const WEBSITE_URL = "https://www.yourwebsite.com";

async function solveTurnstile() {
    try {
        // Create task
        const taskResponse = await axios.post(&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;https://api.capsolver.com/createTask&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;, {
            clientKey: API_KEY,
            task: {
                type: &lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;AntiTurnstileTaskProxyLess&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;,
                websiteKey: WEBSITE_KEY,
                websiteURL: WEBSITE_URL
            }
        });

        const taskId = taskResponse.data.taskId;
        console.log(`Task created: ${taskId}`);

        // Poll for result
        while (true) {
            const resultResponse = await axios.post(&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;https://api.capsolver.com/getTaskResult&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;, {
                clientKey: API_KEY,
                taskId: taskId
            });

            if (resultResponse.data.status === &lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;ready&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;) {
                return resultResponse.data.solution.token;
            } else if (resultResponse.data.status === &lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;failed&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;) {
                throw new Error(&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;Task failed&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;);
            }

            console.log(&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;Waiting for solution...&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;);
            await new Promise(resolve =&amp;gt; setTimeout(resolve, 2000));
        }
    } catch (error) {
        console.error(&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;Error solving Turnstile:&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;, error.message);
    }
}

solveTurnstile().then(token =&amp;gt; {
    if (token) console.log(`Token: ${token}`);
});
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  CapSolver: An Enterprise-Grade Solution
&lt;/h2&gt;

&lt;p&gt;For large-scale data operations, the consistency and reliability of solutions are paramount. CapSolver functions as an enterprise-level platform, guaranteeing that high-volume data collection remains both stable and technically compliant. In contrast to smaller, less robust services, CapSolver furnishes the necessary infrastructure to manage millions of requests without any degradation in performance. This makes it the preferred option for legal technology firms and insurance providers who cannot tolerate downtime or data loss.&lt;/p&gt;

&lt;p&gt;The platform's AI models undergo continuous updates to effectively address new variations of Turnstile challenges, thereby establishing a future-proof foundation for automation projects. By delegating the complexities of CAPTCHA bypassing to an enterprise-grade service, teams can redirect their focus towards extracting valuable insights from data, rather than expending resources on debugging technical obstacles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constructing Workflows with n8n and CapSolver
&lt;/h2&gt;

&lt;p&gt;For teams that favor a visual methodology for automation, n8n presents a potent alternative to developing custom scripts. CapSolver is integrated as an official component within n8n, enabling users to effortlessly incorporate a bypasser node directly into their vehicle data scraping workflows. This feature proves particularly advantageous for intricate multi-step processes, such as authenticating into a government portal prior to searching for public records.&lt;/p&gt;

&lt;p&gt;By consulting the guide on &lt;a href="https://www.capsolver.com/blog/n8n/how-to-solve-cloudflare-turnstile-n8n" rel="noopener noreferrer"&gt;how to bypass Cloudflare Turnstile using CapSolver and n8n&lt;/a&gt;, users can construct a reusable bypasser API or embed the bypasser directly into their data collection pipelines. This approach minimizes maintenance time and allows non-technical team members to comprehend and manage the underlying automation logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case Study: Automating Accident Report Retrieval
&lt;/h2&gt;

&lt;p&gt;Within the legal and insurance sectors, the retrieval of accident reports constitutes a high-volume operation frequently impeded by Turnstile challenges. These reports are indispensable for processing claims and constructing legal arguments. When these portals deploy Turnstile, manual retrieval processes become a significant bottleneck. By integrating an automated bypasser, legal technology firms can acquire these reports at scale, ensuring that crucial information is accessible promptly upon its publication.&lt;/p&gt;

&lt;p&gt;This automation substantially diminishes the manual workload and enhances the precision of data entry. Furthermore, it guarantees that firms can manage thousands of queries daily without encountering obstructions from security protocols. This serves as a practical illustration of how to effectively manage Cloudflare Turnstile in vehicle data and public records automation to generate tangible business value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparative Analysis: CapSolver vs. Traditional Verification Methods
&lt;/h2&gt;

&lt;p&gt;When formulating a strategy for public records automation, it is imperative to evaluate the efficacy of automated bypassers against manual approaches or rudimentary scripting solutions.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;CapSolver AI&lt;/th&gt;
&lt;th&gt;Manual Entry&lt;/th&gt;
&lt;th&gt;Basic Scripting&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Speed&lt;/td&gt;
&lt;td&gt;1–10 Seconds&lt;/td&gt;
&lt;td&gt;1–2 Minutes&lt;/td&gt;
&lt;td&gt;High Failure Rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Low (Per 1k)&lt;/td&gt;
&lt;td&gt;High (Labor)&lt;/td&gt;
&lt;td&gt;Variable (Maintenance)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scalability&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Limited by Staff&lt;/td&gt;
&lt;td&gt;Difficult to Scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accuracy&lt;/td&gt;
&lt;td&gt;99%+&lt;/td&gt;
&lt;td&gt;Human Error Prone&lt;/td&gt;
&lt;td&gt;Low Reliability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As illustrated in the table, CapSolver offers an optimal balance of speed and cost-efficiency, rendering it the preferred choice for tasks involving high volumes of data. Further details regarding performance metrics can be found in the &lt;a href="https://www.capsolver.com/blog/All/captcha-solving-api-performance-comparion" rel="noopener noreferrer"&gt;CAPTCHA bypassing API performance comparison&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Utilize code &lt;code&gt;CAP26&lt;/code&gt; upon registration at &lt;a href="https://dashboard.capsolver.com/dashboard/overview/?utm_source=dev.to&amp;amp;utm_medium=blog&amp;amp;utm_campaign="&gt;CapSolver&lt;/a&gt; to receive supplementary credits!&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hqu2dxuqfjka6qcbky2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hqu2dxuqfjka6qcbky2.png" width="472" height="140"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Compliance and Ethical Automation in Public Records
&lt;/h2&gt;

&lt;p&gt;Sustaining an effective automation strategy necessitates a strong emphasis on compliance and ethical data collection practices. While CapSolver assists in navigating technical barriers, the responsibility for ensuring that scraping activities adhere to relevant data protection laws rests with the user. This is particularly pertinent when dealing with sensitive legal and vehicle data.&lt;/p&gt;

&lt;p&gt;Employing high-quality proxies and maintaining judicious request rates are considered essential best practices. Such measures mitigate the load on target servers and diminish the probability of an IP address being flagged as suspicious.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Proficiency in managing Cloudflare Turnstile within vehicle data and public records automation is an indispensable capability for any organization driven by data. By strategically utilizing CapSolver’s AI-powered API and its seamless integration with n8n, organizations can effortlessly surmount security obstacles and ensure a consistent influx of high-quality data. This professional methodology guarantees that automation efforts are both efficient and robust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does bypassing Turnstile necessitate a proxy?
&lt;/h3&gt;

&lt;p&gt;No, the &lt;code&gt;AntiTurnstileTaskProxyLess&lt;/code&gt; task type used by CapSolver for bypassing does not require you to provide your own proxy. This design simplifies the setup process and contributes to reduced infrastructure expenditures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is integration with Python-based scrapers feasible for CapSolver?
&lt;/h3&gt;

&lt;p&gt;Absolutely. CapSolver offers a comprehensive SDK and a REST API, facilitating straightforward integration with popular programming languages such as Python, Node.js, and Go.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is n8n better than custom code for bypassing Turnstile in vehicle data automation?
&lt;/h3&gt;

&lt;p&gt;The optimal choice largely depends on the specific skill set of your team. n8n excels in visual workflow management and rapid integration, whereas custom code provides greater flexibility for implementing complex logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I find the Turnstile &lt;code&gt;websiteKey&lt;/code&gt; to bypass it?
&lt;/h3&gt;

&lt;p&gt;You can find the &lt;code&gt;websiteKey&lt;/code&gt; by inspecting the target page’s HTML and looking for the Turnstile widget element, which usually contains a &lt;code&gt;data-sitekey&lt;/code&gt; attribute. Alternatively, the CapSolver browser extension can identify it for you automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the success rate for bypassing Turnstile on public record portals?
&lt;/h3&gt;

&lt;p&gt;CapSolver maintains a very high success rate for bypassing Turnstile challenges, often exceeding 99%. This ensures the sustained reliability of your automation, even when targeting highly secure government portals.&lt;/p&gt;

</description>
      <category>turnstile</category>
      <category>data</category>
      <category>ai</category>
    </item>
    <item>
      <title>Agentic RAG: From Smart Q&amp;A to Self-Governing AI Decisions</title>
      <dc:creator>luisgustvo</dc:creator>
      <pubDate>Thu, 09 Apr 2026 07:57:09 +0000</pubDate>
      <link>https://dev.to/luisgustvo/agentic-rag-from-smart-qa-to-self-governing-ai-decisions-181k</link>
      <guid>https://dev.to/luisgustvo/agentic-rag-from-smart-qa-to-self-governing-ai-decisions-181k</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvzln9bgyutkvrj6jbws.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvzln9bgyutkvrj6jbws.jpg" alt="What is Agentic RAG?" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Consider yourself the chief executive of a major corporation. Your organization possesses a wealth of knowledge—documents, reports, customer insights, and market analyses spanning decades. However, these invaluable assets are often fragmented across disparate systems, leading employees to spend considerable time daily just searching for information. Furthermore, when you query an AI assistant, asking, for instance, "What was our customer satisfaction like in a specific region last quarter?" you might receive either an unhelpful response or fabricated data.&lt;/p&gt;

&lt;p&gt;This fundamental challenge is precisely what Retrieval-Augmented Generation (RAG) technology seeks to address. This piece will explore the three evolutionary stages of RAG—Basic RAG, Graph RAG, and Agentic RAG—illustrating how each functions as a distinct tier of enterprise consultant, progressively elevating AI's intelligence and its contribution to business value.&lt;/p&gt;




&lt;h2&gt;
  
  
  Chapter 1: A Comprehensive Overview of the Three Primary RAG Architectures
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Basic RAG: The Enterprise's "Intelligent Information Specialist"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Architectural Diagram:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feon12oggverv6u2w2pkl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feon12oggverv6u2w2pkl.png" alt="Basic RAG Architecture" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fundamental Mechanism:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Phase 1:&lt;/strong&gt; You submit a question (Query).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Phase 2:&lt;/strong&gt; The system retrieves pertinent information from its knowledge repository (Search Relevant Information).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Phase 3:&lt;/strong&gt; This retrieved content, along with your original question, is then provided to a Large Language Model (LLM).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Phase 4:&lt;/strong&gt; The LLM subsequently generates an accurate, evidence-backed answer.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Basic RAG can be likened to a diligent information specialist. If you inquire about "a company's financial standing," it promptly consults its archives for the latest annual reports, financial statements, and relevant analyses, presenting these materials for your review. It does not invent data but ensures that every piece of information is verifiable. For organizations embarking on this journey, understanding &lt;a href="https://www.capsolver.com/blog/AI/ai-llm-practice?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agentic-rag"&gt;how AI LLM practices&lt;/a&gt; integrate with these retrieval systems marks the initial step towards mitigating hallucinations.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Graph RAG: The Enterprise's "Strategic Insights Analyst"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Architectural Diagram:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fio4kn3p0jdm66wb4xf1v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fio4kn3p0jdm66wb4xf1v.png" alt="Graph RAG Architecture" width="720" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fundamental Mechanism:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Phase 1:&lt;/strong&gt; You pose a question (Query), and the system automatically identifies key entities and their relational intentions (e.g., "competitors," "supply chain," "investment ties").&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Phase 2:&lt;/strong&gt; The system conducts graph traversal retrieval within a knowledge graph, not only locating relevant text but also uncovering multi-hop relationship paths between entities (e.g., A → Supplier → B → Shareholder → C).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Phase 3:&lt;/strong&gt; The retrieved structured relational evidence (entities + relationships + attributes) is then passed to the LLM alongside the original question, forming a "relationship-enriched context."&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Phase 4:&lt;/strong&gt; The LLM generates an answer grounded in the network logic of these relationships, explaining not just "what" but also "why" and "what else is connected."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Graph RAG operates much like a strategic insights analyst skilled in understanding complex interconnections. It doesn't merely know "Jack works at Company A"; it comprehends that "Jack is the CTO of Company A, Company A and Company B are rivals, and Company B recently secured investment from Company C." When asked "Who is Jack?", it analyzes the entire relational network to offer profound insights. This progression is part of a broader trend where &lt;a href="https://nstarxinc.com/blog/the-next-frontier-of-rag-how-enterprise-knowledge-systems-will-evolve-2026-2030/" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;enterprise knowledge systems are evolving&lt;/strong&gt;&lt;/a&gt; to manage intricate, theme-level inquiries.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.3 Agentic RAG: The Enterprise's "Autonomous Project Lead"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Architectural Principle:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6k4ait90c2wmda7xhfn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6k4ait90c2wmda7xhfn.png" alt="Agentic RAG Architecture" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Mechanism:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Phase 1:&lt;/strong&gt; You present a complex task or question (Prompt + Query). The system not only grasps the intent but also pinpoints the actionable goals to be executed.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Phase 2:&lt;/strong&gt; The system independently devises a task pathway and orchestrates multiple AI agents to invoke tools/data sources (e.g., search, databases, APIs) for dynamic information retrieval.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Phase 3:&lt;/strong&gt; The integrated execution outcomes from various sources (including retrieved content, tool-generated data, and both long-term and short-term memory) are compiled into an augmented context and provided to the LLM.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Phase 4:&lt;/strong&gt; The LLM produces an actionable, iterative final response or an execution plan, capable of self-correction based on feedback (ReAct/CoT).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In contrast to Basic and Graph RAG, Agentic RAG functions more like a highly independent project lead. When you instruct it to "Help me formulate next quarter's marketing strategy," it doesn't just retrieve documents; it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Self-Plans:&lt;/strong&gt; Breaks down the objective into sub-tasks such as "analyze previous quarter's data → research competitors → define user personas → draft the plan."&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Utilizes Tools:&lt;/strong&gt; Automatically accesses the CRM system, employs data analysis tools, and searches for market reports.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Iteratively Refines:&lt;/strong&gt; Adjusts subsequent steps based on the outcomes of each stage.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Delivers Results:&lt;/strong&gt; Ultimately presents a comprehensive market analysis report and promotional strategy.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Chapter 2: From RAG to Agentic RAG: The Inevitable Progression of Enterprise Intelligence
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Evolutionary Trajectory: Why RAG Must Advance Towards "Autonomous Agents"
&lt;/h3&gt;

&lt;p&gt;Retrieval-Augmented Generation (RAG) technology emerged to tackle the issues of LLM "hallucinations" and outdated knowledge. Early Basic RAG acted as an efficient information clerk—you inquire, it searches the knowledge base, and delivers the findings to the LLM. This significantly boosted accuracy and lowered hallucination risks by over 70%, yielding an ROI of 150%–300%.&lt;/p&gt;

&lt;p&gt;However, as business complexities grew, enterprises encountered Basic RAG's limitation: it could only answer "what," struggling with "why" and "what else." This led to the development of Graph RAG, which superimposed a knowledge graph onto vector retrieval to trace multi-hop relationships. This capability supports intricate reasoning tasks such as identifying fraud networks and understanding supply chain risk propagation, enhancing relationship mining depth by threefold.&lt;/p&gt;

&lt;p&gt;Yet, Graph RAG remains a passive system—it requires human prompts and only offers analytical conclusions without initiating actions. When businesses desire AI not just to "analyze" but also to "act," Agentic RAG becomes the logical next step. It introduces three fundamental capabilities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Autonomous Task Decomposition:&lt;/strong&gt; Automatically deconstructs ambiguous, complex objectives into executable sequences of sub-tasks.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;External Tool Integration:&lt;/strong&gt; Connects to external systems like CRM, ERP, BI, web browsers, and APIs via protocols such as MCP to actively fetch data and perform operations.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Dynamic Adaptation:&lt;/strong&gt; Self-corrects strategies based on intermediate results without requiring human intervention.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This evolution from an "information retrieval utility" to a "relational reasoning consultant" and then to an "autonomous action agent" is crucial for developing "digital employees" capable of end-to-end operations. Leading platforms are already identifying the &lt;a href="https://www.capsolver.com/blog/AI/best-ai-agents?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agentic-rag"&gt;most effective AI agents&lt;/a&gt; that can manage these intricate workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Advantages and Disadvantages: Why Agentic RAG is Gaining Prominence
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Basic RAG&lt;/th&gt;
&lt;th&gt;Graph RAG&lt;/th&gt;
&lt;th&gt;Agentic RAG&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Benefits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;• Rapid deployment, minimal cost&lt;br&gt;• Substantial reduction in hallucinations&lt;br&gt;• Real-time access to operational data&lt;/td&gt;
&lt;td&gt;• Profound relational reasoning&lt;br&gt;• Uncovers hidden connections (e.g., fraud patterns)&lt;br&gt;• High degree of explainability&lt;/td&gt;
&lt;td&gt;• End-to-end automation, 50–80% labor savings&lt;br&gt;• Integrates CRM/ERP/BI systems&lt;br&gt;• Adapts dynamically to environmental shifts&lt;br&gt;• A single agent can manage numerous tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Drawbacks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;• Incapable of handling multi-hop complex queries&lt;br&gt;• Retrieval quality dependent on vector precision&lt;br&gt;• Lacks action execution capability&lt;/td&gt;
&lt;td&gt;• High expenses for knowledge graph construction/maintenance&lt;br&gt;• Still limited to passive analysis, cannot execute actions&lt;br&gt;• Underutilization of unstructured data&lt;/td&gt;
&lt;td&gt;• High computational demands (+40–80% cost)&lt;br&gt;• Autonomous decisions necessitate human oversight&lt;br&gt;• Longer deployment timeframe (3–6 months)&lt;br&gt;• Must manage tool call exceptions (e.g., CAPTCHAs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ROI Range&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;150–300%&lt;/td&gt;
&lt;td&gt;200–400%&lt;/td&gt;
&lt;td&gt;300–600%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;While Agentic RAG demands a higher initial investment, its gains in efficiency (over 80% workflow automation) and labor savings significantly surpass those of other RAG forms. It can accomplish tasks that Basic and Graph RAG simply cannot—such as automatically monitoring inventory, generating purchase orders, and adjusting pricing. This "query-to-action" cycle positions it as the most commercially appealing direction, as highlighted in &lt;a href="https://www.impactanalytics.ai/blog/agentic-rag" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;reports on Agentic RAG's enterprise advantages&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Practical Validation: Why Agentic RAG is the "Most Comprehensive and Applicable" Enterprise AI Solution
&lt;/h3&gt;

&lt;p&gt;Agentic RAG can permeate nearly all enterprise processes that involve "human + system" collaboration—including customer service, internal knowledge management, sales, marketing, financial risk control, and research &amp;amp; development.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability Aspect&lt;/th&gt;
&lt;th&gt;Basic RAG&lt;/th&gt;
&lt;th&gt;Graph RAG&lt;/th&gt;
&lt;th&gt;Agentic RAG&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary Task Type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Single-hop Q&amp;amp;A, factual lookup&lt;/td&gt;
&lt;td&gt;Multi-hop reasoning, relationship discovery&lt;/td&gt;
&lt;td&gt;Multi-step, cross-system, closed-loop execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Interaction Paradigm&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Passive response&lt;/td&gt;
&lt;td&gt;Passive response&lt;/td&gt;
&lt;td&gt;Active planning + execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Scope&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Static knowledge bases/documents&lt;/td&gt;
&lt;td&gt;Knowledge graph + documents&lt;/td&gt;
&lt;td&gt;Multi-source heterogeneous systems (real-time)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automated Tool/API Invocation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Handling Open-Ended Long Workflows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Partial (reasoning only)&lt;/td&gt;
&lt;td&gt;✅ (including actions)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Typical Task Completion Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;95%+ (for simple tasks)&lt;/td&gt;
&lt;td&gt;70–85% (for complex reasoning)&lt;/td&gt;
&lt;td&gt;80–95% (for end-to-end complex tasks)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment Duration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2–4 weeks&lt;/td&gt;
&lt;td&gt;2–3 months&lt;/td&gt;
&lt;td&gt;3–6 months&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Applicable Scenarios&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30+&lt;/td&gt;
&lt;td&gt;15–20&lt;/td&gt;
&lt;td&gt;50+ (encompassing almost all business functions)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Agentic RAG integrates retrieval, analysis, and execution into a cohesive business cycle. For instance, starting from a customer inquiry, it can automatically access the knowledge base, diagnose the issue, create a support ticket, update CRM tags, and trigger a personalized resolution. By interfacing with enterprise systems, it achieves multi-system synergy and self-correction based on feedback, elevating AI from a mere "search utility" to a truly executable "intelligent agent."&lt;/p&gt;




&lt;h2&gt;
  
  
  Chapter 3: Overcoming Data Barriers: How Agentic RAG Navigates CAPTCHAs for Global Data Acquisition
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 The Discrepancy Between Ideal and Reality: The Unseen Limit of the MCP Toolchain
&lt;/h3&gt;

&lt;p&gt;Agentic RAG is lauded as the closest manifestation of a "true intelligent agent." However, when this "autonomous project lead" attempts to access web pages via the &lt;a href="https://www.anthropic.com/news/model-context-protocol" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;&lt;/a&gt; to gather real-time market intelligence or competitor dynamics, a straightforward yet frustrating obstacle emerges: CAPTCHAs.&lt;/p&gt;

&lt;p&gt;Imagine your Agentic RAG system is tasked with "analyzing competitor Q3 financial reports and formulating a response strategy." It confidently plans: Step 1, locate the latest reports; Step 2, scrape the official website; Step 3, cross-reference industry data. Yet, upon accessing the target site through an MCP tool, it's met not with data, but with a silent &lt;a href="https://www.capsolver.com/blog/reCAPTCHA/high-score-recaptcha-v3?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agentic-rag"&gt;reCAPTCHA v3 score&lt;/a&gt; or a &lt;a href="https://www.capsolver.com/blog/Cloudflare/how-to-pass-cloudflare-verifying-you-are-human?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agentic-rag"&gt;Cloudflare Turnstile "Please verify you are human" prompt&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This represents a universal predicament for Agentic RAG in real-world web environments:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Data Access Obstacles:&lt;/strong&gt; High-value commercial information is frequently protected by CAPTCHAs. CAPTCHAs are designed as "human-machine differentiation tests," and autonomous agents are, by definition, "machines."&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Rate Limiting:&lt;/strong&gt; Frequent access easily triggers anti-scraping mechanisms, often resulting in IP bans.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Diversity of Challenges:&lt;/strong&gt; CAPTCHAs vary from simple text to complex semantic selections. No single strategy can effectively manage all scenarios.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If Agentic RAG cannot overcome this "digital gatekeeper," its capacity for autonomous action will be stalled at the outset, and its reasoning will remain theoretical. This is &lt;a href="https://www.capsolver.com/blog/AI/why-web-automation-keeps-failing-on-captcha?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agentic-rag"&gt;why web automation consistently fails on CAPTCHA&lt;/a&gt; without specialized solutions.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 CapSolver: Empowering Autonomous Agents with "Intelligent Access Keys"
&lt;/h3&gt;

&lt;p&gt;How can Agentic RAG efficiently and reliably bypass CAPTCHA hurdles without compromising compliance? The solution lies in integrating specialized CAPTCHA-solving tools like &lt;strong&gt;&lt;a href="https://dashboard.capsolver.com/dashboard/overview/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agentic-rag"&gt;CapSolver&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsg3lgs3n4shrhlujhn23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsg3lgs3n4shrhlujhn23.png" width="800" height="121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If Agentic RAG is a market researcher, then CapSolver serves as its "passport specialist." Regardless of whether a website employs reCAPTCHA, Cloudflare Turnstile, or AWS WAF, CapSolver can swiftly provide a "passport." It acts as a "locksmith" proficient in all entry systems, capable of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Identifying Numerous CAPTCHA Variants:&lt;/strong&gt; Including reCAPTCHA v2/v3, AWS WAF, Cloudflare, image selection, slider simulations, and more.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Millisecond Responsiveness:&lt;/strong&gt; Real-time analysis via AI models to deliver verification tokens.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Cost-Effective, High Success Rate:&lt;/strong&gt; An average success rate exceeding 90%, with costs significantly lower than manual processing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When an Agentic RAG's MCP tool encounters a CAPTCHA, CapSolver, designed for automation, is integrated into the toolchain. The system automatically transmits the CAPTCHA context to CapSolver, which resolves it in milliseconds, allowing the agent to proceed unimpeded.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;CapSolver Performance&lt;/th&gt;
&lt;th&gt;Value Proposition for Agentic RAG&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supported Types&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;reCAPTCHA, Cloudflare, AWS WAF, GeeTest, etc. (20+ types)&lt;/td&gt;
&lt;td&gt;Covers over 95% of prevalent scenarios; eliminates the need for site-specific custom logic.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Accuracy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Overall success rate ≥ 96%&lt;/td&gt;
&lt;td&gt;Task failure rate less than 5%, preventing workflow disruptions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Response Speed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple: &amp;lt; 1s; reCAPTCHA: &amp;lt; 3s; Complex: 4–6s&lt;/td&gt;
&lt;td&gt;5–10 times faster than manual input, ensuring real-time performance for &lt;a href="https://www.capsolver.com/blog/AI/solving-captchas-for-price-monitoring-ai-agents?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agentic-rag"&gt;AI agents monitoring prices&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The entire process remains transparent to the higher-level business logic. Agentic RAG maintains its "plan → execute → optimize" cycle as if the CAPTCHA never existed.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 Integration Value: Truly Connecting Agentic RAG to Real-World Data
&lt;/h3&gt;

&lt;p&gt;Integrating CapSolver into the Agentic RAG MCP toolchain is more than just a functional addition; it is the crucial infrastructure that enables intelligent agents to operate effectively on the open internet. This integration delivers three core levels of value:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Firstly, a substantial increase in task completion rates.&lt;/strong&gt;&lt;br&gt;
Without CAPTCHA recognition, automation success rates often fall below 60%. With CapSolver, AI agents can access web pages as smoothly as human users, elevating end-to-end success rates to 92%–97%. This is essential for continuous, unattended operation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Secondly, the full realization of real-time data acquisition capabilities.&lt;/strong&gt;&lt;br&gt;
Many applications, such as financial surveillance or competitive price tracking, demand highly current data. CapSolver's millisecond recognition allows Agentic RAG to obtain the latest information without delay. For corporate decision-making, this translates to data updates in minutes rather than days. Developers can learn more about &lt;a href="https://www.capsolver.com/blog/AI/integrating-capsolver-with-webmcp?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agentic-rag"&gt;integrating CapSolver with WebMCP&lt;/a&gt; to achieve this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thirdly, the cost advantage for large-scale automated operations.&lt;/strong&gt;&lt;br&gt;
Manual CAPTCHA resolution typically costs $0.05–$0.20 per instance. CapSolver's automated methodology costs approximately $0.0002–$0.002, representing a 1/100th to 1/250th reduction compared to manual efforts. In scenarios involving extensive data collection, this difference is monumental, decreasing overall system operational costs by 40%–60%.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Experience it yourself! Use code &lt;code&gt;CAP26&lt;/code&gt; when registering at &lt;a href="https://dashboard.capsolver.com/dashboard/overview/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agentic-rag"&gt;CapSolver&lt;/a&gt; to receive bonus credits!&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsc8s07utx4yajxrcj87.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsc8s07utx4yajxrcj87.png" width="472" height="140"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In essence, this integration transforms Agentic RAG from a "conceptual agent" into an &lt;strong&gt;enterprise-grade automated data system&lt;/strong&gt; capable of sustained operation in dynamic network environments.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;From Basic RAG to Graph RAG, and ultimately to Agentic RAG, we have observed the evolution of AI in enterprise knowledge management—progressing from a simple query tool to a relational reasoning consultant, and finally to a "digital employee" that can autonomously plan, execute, and iterate. Throughout this journey, Agentic RAG not only integrates diverse data but also leverages &lt;a href="https://dashboard.capsolver.com/dashboard/overview/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agentic-rag"&gt;CapSolver&lt;/a&gt; to overcome CAPTCHA barriers, providing real-time, comprehensive, and actionable intelligent decision support.&lt;/p&gt;

&lt;p&gt;When AI truly embodies the "understand-execute-self-optimize" loop, enterprises no longer depend solely on manual search and analysis. They gain a 24/7, cost-effective, and highly efficient intelligent assistant that brings knowledge assets to life, fostering business innovation. The synergy of Agentic RAG and CapSolver makes this vision a tangible reality—intelligent agents are becoming a pivotal force for enterprises seeking a competitive edge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. What distinguishes Basic RAG from Agentic RAG?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Basic RAG functions as a passive information retrieval system, answering direct questions by locating relevant documents. Agentic RAG, conversely, is an active, autonomous system capable of comprehending complex objectives, breaking them into sequential steps, utilizing various tools (such as web browsers or APIs), and executing a plan from inception to completion, much like a human project manager.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Why is Agentic RAG considered the future of enterprise AI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agentic RAG is regarded as the future because it transcends simple data retrieval to achieve end-to-end task automation. It can connect disparate enterprise systems (CRM, ERP, BI), act upon information, and adapt to new circumstances without human intervention. This creates a "digital workforce" capable of managing complex workflows, leading to substantial efficiency gains and cost reductions (50-80% labor savings).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. What is the primary challenge for Agentic RAG in practical applications?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The foremost challenge involves accessing live, real-world data from the internet, as much of it is safeguarded by CAPTCHAs and other anti-bot measures. Without the ability to circumvent these barriers, an Agentic RAG system cannot reliably gather the external information necessary to perform tasks like market analysis, competitor tracking, or price monitoring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. How does CapSolver assist Agentic RAG?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CapSolver acts as a specialized tool within the Agentic RAG's toolchain, providing an "intelligent key" to bypass CAPTCHAs. When the AI agent encounters a CAPTCHA, it automatically invokes the CapSolver API to resolve it in real-time. This enables the agent to seamlessly access protected websites, ensuring high task completion rates (over 92%) and facilitating genuine automation on the open internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Is Agentic RAG challenging to implement?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Compared to Basic RAG, Agentic RAG is more intricate and has a longer deployment cycle (3–6 months). It demands greater computational resources and meticulous planning for tool integration and human oversight. However, its potential for a significantly higher ROI (up to 600%) and its capacity to automate entire workflows make it a highly valuable long-term investment for enterprises.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Bypass Any CAPTCHA in HyperBrowser Using CapSolver (Comprehensive Setup Guide)</title>
      <dc:creator>luisgustvo</dc:creator>
      <pubDate>Tue, 31 Mar 2026 08:41:31 +0000</pubDate>
      <link>https://dev.to/luisgustvo/how-to-bypass-any-captcha-in-hyperbrowser-using-capsolver-comprehensive-setup-guide-5d3h</link>
      <guid>https://dev.to/luisgustvo/how-to-bypass-any-captcha-in-hyperbrowser-using-capsolver-comprehensive-setup-guide-5d3h</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgz0ditrkj43jkgrp0e07.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgz0ditrkj43jkgrp0e07.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI-driven browser agents are fundamentally transforming how developers engage with the internet. These agents are capable of navigating web pages, completing forms, and extracting data autonomously, from data scraping to workflow automation. However, the appearance of a CAPTCHA invariably halts their progress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HyperBrowser&lt;/strong&gt; provides cloud-based browser infrastructure specifically engineered for AI agents, offering native CAPTCHA bypassing capabilities for Turnstile and reCAPTCHA. Nevertheless, the internet features a broader spectrum of CAPTCHA types. Challenges such as AWS WAF, GeeTest, various enterprise reCAPTCHA versions, and other anti-bot mechanisms often remain unaddressed by native tools alone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.capsolver.com/?dev.to_source=official&amp;amp;dev.to_medium=blog&amp;amp;dev.to_campaign=hyperbrowser"&gt;CapSolver&lt;/a&gt;&lt;/strong&gt; bridges this gap. By directly uploading the CapSolver Chrome extension to HyperBrowser via its extension API, users gain extensive CAPTCHA coverage across all sessions, for every CAPTCHA type, and at any scale, without requiring modifications to their existing automation code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introduction to HyperBrowser
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/hyperbrowserai/HyperAgent" rel="noopener noreferrer"&gt;HyperBrowser&lt;/a&gt; is a cloud browser infrastructure platform specifically designed for AI agents. It delivers managed browser sessions with out-of-the-box native Chrome DevTools Protocol (CDP) access, proxy support, and advanced anti-detection features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Browser Sessions&lt;/strong&gt;: Enables the on-demand creation of isolated browser instances, eliminating the need for local Chrome installations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native CDP Access&lt;/strong&gt;: Facilitates direct connection of Playwright, Puppeteer, or Selenium to cloud sessions via WebSocket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HyperAgent&lt;/strong&gt;: An integrated AI browser automation agent for executing web tasks using natural language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anti-Detection Capabilities&lt;/strong&gt;: Incorporates stealth profiles, residential proxies, and fingerprint randomization into every session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome Extension Support&lt;/strong&gt;: Offers a robust extension upload API, allowing users to ZIP an extension, upload it, and attach it to any session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable Infrastructure&lt;/strong&gt;: Supports running hundreds of concurrent sessions without the complexities of managing browser pools.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Developers Opt for HyperBrowser
&lt;/h3&gt;

&lt;p&gt;HyperBrowser alleviates the operational overhead associated with browser automation. Instead of managing Chromium binaries, configuring headless modes, rotating proxies, and implementing anti-fingerprinting measures, developers receive a streamlined API that provides a WebSocket URL. This allows for immediate automation by connecting existing Playwright or Puppeteer scripts.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introduction to CapSolver
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.capsolver.com/?dev.to_source=official&amp;amp;dev.to_medium=blog&amp;amp;dev.to_campaign=hyperbrowser"&gt;CapSolver&lt;/a&gt; is a leading service for bypassing CAPTCHAs, offering AI-powered solutions to overcome various CAPTCHA challenges. With support for numerous CAPTCHA types and rapid response times, CapSolver integrates seamlessly into automated workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supported CAPTCHA Categories
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.capsolver.com/products/recaptchav2" rel="noopener noreferrer"&gt;&lt;strong&gt;reCAPTCHA v2&lt;/strong&gt;&lt;/a&gt; (including image-based and invisible variants)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.capsolver.com/products/recaptchav3" rel="noopener noreferrer"&gt;&lt;strong&gt;reCAPTCHA v3 &amp;amp; v3 Enterprise&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.capsolver.com/products/cloudflare" rel="noopener noreferrer"&gt;&lt;strong&gt;Cloudflare Turnstile&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.capsolver.com/en/guide/captcha/cloudflare_challenge/" rel="noopener noreferrer"&gt;&lt;strong&gt;Cloudflare 5-second Challenge&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.capsolver.com/products/awswaf" rel="noopener noreferrer"&gt;&lt;strong&gt;AWS WAF CAPTCHA&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.capsolver.com/en/guide/captcha/Geetest/" rel="noopener noreferrer"&gt;&lt;strong&gt;GeeTest v3/v4&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.capsolver.com/en/guide/api-server/" rel="noopener noreferrer"&gt;&lt;strong&gt;Other widely adopted CAPTCHA and anti-bot mechanisms&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before initiating the integration setup, ensure the following components are available:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;A HyperBrowser account&lt;/strong&gt; with an associated API key (&lt;a href="https://www.hyperbrowser.ai" rel="noopener noreferrer"&gt;sign up at hyperbrowser.ai&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;A CapSolver account&lt;/strong&gt; with an API key and sufficient credits (&lt;a href="https://www.capsolver.com/?dev.to_source=official&amp;amp;dev.to_medium=blog&amp;amp;dev.to_campaign=hyperbrowser"&gt;sign up here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The CapSolver Chrome extension&lt;/strong&gt; downloaded and properly configured.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Node.js 18+&lt;/strong&gt; with &lt;code&gt;@hyperbrowser/sdk&lt;/code&gt; and &lt;code&gt;playwright-core&lt;/code&gt; installed.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @hyperbrowser/sdk playwright-core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step-by-Step Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Acquire Your CapSolver API Key
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; Register or log in at &lt;a href="https://www.capsolver.com/?dev.to_source=official&amp;amp;dev.to_medium=blog&amp;amp;dev.to_campaign=hyperbrowser"&gt;capsolver.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; Navigate to your Dashboard.&lt;/li&gt;
&lt;li&gt; Copy your API key (it follows the format: &lt;code&gt;CAP-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; Add credits to your account (utilize bonus code &lt;strong&gt;HYPERBROWSER&lt;/strong&gt; for an additional 6% on your initial recharge).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 2: Download and Configure the CapSolver Extension
&lt;/h3&gt;

&lt;p&gt;Download the CapSolver Chrome extension and set it up with your API key:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Visit the &lt;a href="https://github.com/capsolver/capsolver-browser-extension/releases" rel="noopener noreferrer"&gt;CapSolver extension releases on GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; Download the most recent &lt;code&gt;CapSolver.Browser.Extension-chrome-vX.X.X.zip&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt; Extract the extension contents:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; capsolver-extension
unzip CapSolver.Browser.Extension-chrome-v&lt;span class="k"&gt;*&lt;/span&gt;.zip &lt;span class="nt"&gt;-d&lt;/span&gt; capsolver-extension/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Open &lt;code&gt;capsolver-extension/assets/config.js&lt;/code&gt; and insert your API key:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;defaultConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CAP-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// your key here&lt;/span&gt;
  &lt;span class="na"&gt;useCapsolver&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// ... rest of config&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Verify the extension's directory structure:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls &lt;/span&gt;capsolver-extension/manifest.json
&lt;span class="c"&gt;# This file should be present&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Compress the Extension Directory into a ZIP File
&lt;/h3&gt;

&lt;p&gt;HyperBrowser's extension upload API mandates a ZIP file. Package the configured extension:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;capsolver-extension &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; zip &lt;span class="nt"&gt;-r&lt;/span&gt; ../capsolver-extension.zip &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This action generates &lt;code&gt;capsolver-extension.zip&lt;/code&gt; in your project's root directory, ready for upload.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Upload the Extension to HyperBrowser
&lt;/h3&gt;

&lt;p&gt;Utilize the HyperBrowser SDK to upload the extension ZIP file. This is a one-time operation; the returned &lt;code&gt;extensionId&lt;/code&gt; can be reused across all subsequent sessions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Hyperbrowser&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hyperbrowser/sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Hyperbrowser&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HYPERBROWSER_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Upload the CapSolver extension (a single operation)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;filePath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;capsolver-extension.zip&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Extension ID:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Retain this ID for reuse in every session&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Guidance&lt;/strong&gt;: Store the &lt;code&gt;ext.id&lt;/code&gt; in your environment variables or configuration. Re-uploading is only necessary if the extension version or API key is modified.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 5: Establish a Session with the Extension Enabled
&lt;/h3&gt;

&lt;p&gt;Create a HyperBrowser session that incorporates the CapSolver extension:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;extensionIds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;ext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;useProxy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Requires a paid plan — omit for the free tier&lt;/span&gt;
  &lt;span class="na"&gt;bypassCaptchas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Utilizing CapSolver instead of native bypassing&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Session ID:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;WebSocket URL:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wsEndpoint&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Set &lt;code&gt;bypassCaptchas: false&lt;/code&gt; when using CapSolver to prevent conflicts between the two bypassing mechanisms. For a fallback chain, refer to the "When to Use Native vs CapSolver" section below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Integrate Playwright with the Session
&lt;/h3&gt;

&lt;p&gt;Connect Playwright to the HyperBrowser session via its WebSocket endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;playwright-core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connectOverCDP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wsEndpoint&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;contexts&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Navigate to a CAPTCHA-protected web page&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.google.com/recaptcha/api2/demo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Allow time for the CapSolver extension to detect and bypass the CAPTCHA&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;waitForTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Submit the form&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#recaptcha-demo-submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;waitForLoadState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;networkidle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Confirm successful bypass&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Result:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Expected outcome: the body text should contain "Verification Success"&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 7: Validate on a reCAPTCHA Demonstration Page
&lt;/h3&gt;

&lt;p&gt;Below is a complete end-to-end script that uploads the extension, establishes a session, bypasses a CAPTCHA, and verifies the outcome:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Hyperbrowser&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hyperbrowser/sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;playwright-core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;HYPERBROWSER_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HYPERBROWSER_API_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CAPSOLVER_EXTENSION_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CAPSOLVER_EXTENSION_ID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Optional: for reusing an existing ID&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Hyperbrowser&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;HYPERBROWSER_API_KEY&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Step 1: Upload extension (or utilize an existing ID)&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;extensionId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;CAPSOLVER_EXTENSION_ID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;extensionId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;filePath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;capsolver-extension.zip&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nx"&gt;extensionId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Uploaded extension:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;extensionId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Step 2: Create a session with the CapSolver extension&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;extensionIds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;extensionId&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;useProxy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Requires a paid plan — omit for the free tier&lt;/span&gt;
    &lt;span class="na"&gt;bypassCaptchas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Session initiated:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Step 3: Connect Playwright&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connectOverCDP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wsEndpoint&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;contexts&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Step 4: Navigate to the reCAPTCHA demonstration page&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Navigating to reCAPTCHA demo...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.google.com/recaptcha/api2/demo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Step 5: Await CapSolver to bypass the CAPTCHA&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Awaiting CapSolver to bypass CAPTCHA...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;waitForTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Step 6: Submit the form&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Submitting form...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#recaptcha-demo-submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;waitForLoadState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;networkidle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Step 7: Check the outcome&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bodyText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bodyText&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Verification Success&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CAPTCHA bypassed successfully!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Verification result:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;bodyText&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Session terminated.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;HYPERBROWSER_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_key npx tsx captcha-test.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Operational Mechanics
&lt;/h2&gt;

&lt;p&gt;Here is a detailed overview of the process, from extension upload to CAPTCHA bypassing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Initial Configuration
  ═══════════════════════════════════════════════════════

  capsolver-extension/           HyperBrowser Cloud
  ├── manifest.json    ──ZIP──►  POST /extensions
  ├── assets/con
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CAPTCHA Persistence (Form Submission Failure)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: The page loads, but the CAPTCHA remains unbypassed after a waiting period, leading to form submission failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Possible Explanations&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Insufficient wait duration&lt;/strong&gt; — Extend &lt;code&gt;waitForTimeout&lt;/code&gt; to 45-60 seconds.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Invalid API key&lt;/strong&gt; — Access your CapSolver dashboard to confirm the validity of the key.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Inadequate balance&lt;/strong&gt; — Replenish your CapSolver account credits.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Unsupported CAPTCHA type&lt;/strong&gt; — Consult the &lt;a href="https://docs.capsolver.com/en/guide/api-server/" rel="noopener noreferrer"&gt;CapSolver documentation&lt;/a&gt; for a list of supported types.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Session WebSocket Connection Issues
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: &lt;code&gt;chromium.connectOverCDP()&lt;/code&gt; generates a connection error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resolution&lt;/strong&gt;: Verify that the session is still active. Sessions have a predefined timeout (which varies by plan). If the previous session has expired, create a new one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connectOverCDP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wsEndpoint&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Session expired, initiating a new one...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newSession&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;extensionIds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;extensionId&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;useProxy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Requires a paid plan — omit for the free tier&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connectOverCDP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wsEndpoint&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Extension Discrepancy: Local vs. HyperBrowser Functionality
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: The CapSolver extension operates correctly when loaded locally in Chrome but fails within HyperBrowser sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Possible Explanations&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;&lt;code&gt;config.js&lt;/code&gt; exclusion from ZIP&lt;/strong&gt; — Double-check that the modified &lt;code&gt;assets/config.js&lt;/code&gt; file is included in the ZIP archive.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Network restrictions&lt;/strong&gt; — The extension requires access to &lt;code&gt;api.capsolver.com&lt;/code&gt;. Ensure that the HyperBrowser session's network configuration permits outbound HTTPS connections.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Extension version incompatibility&lt;/strong&gt; — For optimal compatibility, use the latest release of the CapSolver extension.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Recommended Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Upload the Extension Once, Reuse the Identifier
&lt;/h3&gt;

&lt;p&gt;The extension upload is a singular event. Store the &lt;code&gt;extensionId&lt;/code&gt; returned and reuse it across all subsequent sessions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Upload once&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;filePath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;capsolver-extension.zip&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CAPSOLVER_EXT_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Reuse for each session&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;targetUrls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;extensionIds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;CAPSOLVER_EXT_ID&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;useProxy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Requires a paid plan — omit for the free tier&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="c1"&gt;// ... automate&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Consistently Enable Proxies
&lt;/h3&gt;

&lt;p&gt;CAPTCHAs are more prone to appear (and are more challenging to bypass) when requests originate from datacenter IP addresses. HyperBrowser's integrated proxies help mitigate this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;extensionIds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;extensionId&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;useProxy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Requires a paid plan — omit for the free tier. Residential proxies reduce CAPTCHA frequency&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Employ Appropriate Waiting Periods
&lt;/h3&gt;

&lt;p&gt;Different CAPTCHA types necessitate varying bypass durations:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CAPTCHA Type&lt;/th&gt;
&lt;th&gt;Typical Bypass Time&lt;/th&gt;
&lt;th&gt;Recommended Wait&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v2 (checkbox)&lt;/td&gt;
&lt;td&gt;5-15 seconds&lt;/td&gt;
&lt;td&gt;30 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v2 (invisible)&lt;/td&gt;
&lt;td&gt;5-15 seconds&lt;/td&gt;
&lt;td&gt;25 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v3&lt;/td&gt;
&lt;td&gt;3-10 seconds&lt;/td&gt;
&lt;td&gt;20 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Turnstile&lt;/td&gt;
&lt;td&gt;3-10 seconds&lt;/td&gt;
&lt;td&gt;20 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS WAF&lt;/td&gt;
&lt;td&gt;5-15 seconds&lt;/td&gt;
&lt;td&gt;30 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GeeTest v3/v4&lt;/td&gt;
&lt;td&gt;5-20 seconds&lt;/td&gt;
&lt;td&gt;30 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Hint&lt;/strong&gt;: When uncertain, a 30-second wait is generally advisable. It is preferable to wait slightly longer than to submit prematurely.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. Monitor Your CapSolver Account Balance
&lt;/h3&gt;

&lt;p&gt;Each CAPTCHA bypass consumes credits. Integrate balance checks into your automation to prevent interruptions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;checkBalance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.capsolver.com/getBalance&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;clientKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;checkBalance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CAPSOLVER_API_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;warn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Low CapSolver balance! Top up at capsolver.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Terminate Sessions Appropriately
&lt;/h3&gt;

&lt;p&gt;Always stop sessions once their purpose is fulfilled to avoid incurring unnecessary charges:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ... your automation code&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Re-ZIP After API Key Changes
&lt;/h3&gt;

&lt;p&gt;If your CapSolver API key is rotated, you must update &lt;code&gt;config.js&lt;/code&gt;, re-zip the extension, and re-upload it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Update the key in config.js, then:&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;capsolver-extension &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; zip &lt;span class="nt"&gt;-r&lt;/span&gt; ../capsolver-extension.zip &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Subsequently, upload the new ZIP file and update your stored &lt;code&gt;extensionId&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The combined capabilities of HyperBrowser and CapSolver offer the most comprehensive CAPTCHA bypassing solution available for AI browser automation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;HyperBrowser&lt;/strong&gt; manages the underlying infrastructure, including cloud sessions, proxies, anti-detection features, and native Turnstile/reCAPTCHA bypassing.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;CapSolver&lt;/strong&gt; extends this coverage to include AWS WAF, GeeTest, enterprise reCAPTCHA, and other CAPTCHA types not addressed by the native bypasser.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The integration process is straightforward: compress the CapSolver extension into a ZIP file, upload it once via the HyperBrowser SDK, and then attach it to any session. This approach eliminates the need for code-level CAPTCHA detection, token injection, or API polling, as the extension handles these aspects within the browser context.&lt;/p&gt;

&lt;p&gt;Whether you are developing web scrapers, AI agents, or automated testing pipelines, this powerful combination ensures that CAPTCHAs no longer pose a barrier, regardless of their type.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Ready to begin?&lt;/strong&gt; &lt;a href="https://www.capsolver.com/?dev.to_source=official&amp;amp;dev.to_medium=blog&amp;amp;dev.to_campaign=hyperbrowser"&gt;Sign up for CapSolver&lt;/a&gt; and use bonus code &lt;strong&gt;HYPERBROWSER&lt;/strong&gt; for an extra 6% bonus on your initial recharge!&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqun530jr4q8fah2jldv6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqun530jr4q8fah2jldv6.png" width="526" height="234"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions (FAQ)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is HyperBrowser?
&lt;/h3&gt;

&lt;p&gt;HyperBrowser is a cloud browser infrastructure platform designed for AI agents. It provides managed, isolated browser sessions with native CDP access, enabling connection of Playwright, Puppeteer, or Selenium to cloud-hosted Chromium instances. It includes built-in proxies, anti-detection features, and native CAPTCHA bypassing for Turnstile and reCAPTCHA.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does the extension upload process work?
&lt;/h3&gt;

&lt;p&gt;HyperBrowser features a dedicated extension API. You compress your Chrome extension directory into a ZIP file, upload it using &lt;code&gt;client.extensions.create()&lt;/code&gt;, and receive an &lt;code&gt;extensionId&lt;/code&gt;. This ID is then passed to &lt;code&gt;client.sessions.create()&lt;/code&gt;, and the extension is automatically loaded into the cloud browser session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which CAPTCHA types does CapSolver support?
&lt;/h3&gt;

&lt;p&gt;CapSolver supports reCAPTCHA v2 (both checkbox and invisible), reCAPTCHA v3, reCAPTCHA Enterprise, Cloudflare Turnstile, Cloudflare 5-second Challenge, AWS WAF, GeeTest v3/v4, among others. The Chrome extension automatically detects and bypasses the CAPTCHA type.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the cost of CapSolver?
&lt;/h3&gt;

&lt;p&gt;CapSolver offers competitive pricing structures based on CAPTCHA type and usage volume. Visit &lt;a href="https://www.capsolver.com/?dev.to_source=official&amp;amp;dev.to_medium=blog&amp;amp;dev.to_campaign=hyperbrowser"&gt;capsolver.com&lt;/a&gt; for current pricing details. Use the code &lt;strong&gt;HYPERBROWSER&lt;/strong&gt; to receive a 6% bonus on your first recharge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it necessary to re-upload the extension for every session?
&lt;/h3&gt;

&lt;p&gt;No. The extension needs to be uploaded only once. The returned &lt;code&gt;extensionId&lt;/code&gt; can be reused across all sessions. Re-uploading is only required if you modify the CapSolver API key within the extension or update the extension's version.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Puppeteer be used as an alternative to Playwright?
&lt;/h3&gt;

&lt;p&gt;Yes. HyperBrowser is compatible with Playwright, Puppeteer, and Selenium. To use Puppeteer, replace the Playwright &lt;code&gt;connectOverCDP&lt;/code&gt; call with Puppeteer's equivalent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;puppeteer-core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;browserWSEndpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wsEndpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CapSolver extension functions identically regardless of the automation framework used for connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is HyperBrowser available for free?
&lt;/h3&gt;

&lt;p&gt;HyperBrowser provides a free tier with a limited number of sessions. Paid plans unlock additional sessions, extended timeouts, and advanced features. For current pricing and plan details, visit &lt;a href="https://www.hyperbrowser.ai" rel="noopener noreferrer"&gt;hyperbrowser.ai&lt;/a&gt;.&lt;/p&gt;




</description>
      <category>ai</category>
      <category>programming</category>
      <category>agents</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Bypass CAPTCHA in Vibium Without Extensions (reCAPTCHA, Turnstile, AWS WAF)</title>
      <dc:creator>luisgustvo</dc:creator>
      <pubDate>Tue, 31 Mar 2026 08:17:44 +0000</pubDate>
      <link>https://dev.to/luisgustvo/how-to-bypass-captcha-in-vibium-without-extensions-recaptcha-turnstile-aws-waf-2n3e</link>
      <guid>https://dev.to/luisgustvo/how-to-bypass-captcha-in-vibium-without-extensions-recaptcha-turnstile-aws-waf-2n3e</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz8xnv7sdni4r4wblko4b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz8xnv7sdni4r4wblko4b.png" alt="Bypass CAPTCHA in Vibium " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When artificial intelligence agents are employed to automate browser interactions for real-world tasks, &lt;strong&gt;CAPTCHAs&lt;/strong&gt; frequently present a significant impediment. These protective measures can block agent access to secured pages, prevent form submissions, and halt entire automated workflows, necessitating human intervention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vibium&lt;/strong&gt; represents a new generation of browser automation tools, designed for both AI agents and human users. Utilizing the WebDriver BiDi protocol, developed by the creators of Selenium and Appium, Vibium offers agents a rapid and standardized method for browser control. However, like other automation tools, it encounters challenges when confronted with CAPTCHAs.&lt;/p&gt;

&lt;p&gt;A critical aspect to note is that &lt;strong&gt;Vibium's Go launcher hardcodes &lt;code&gt;--disable-extensions&lt;/code&gt;&lt;/strong&gt;, which means custom Chrome flags cannot be passed. Consequently, the Chrome extension-based approaches commonly used by tools such as Playwright and Puppeteer are incompatible with Vibium.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.capsolver.com/?dev.to_source=official&amp;amp;dev.to_medium=blog&amp;amp;dev.to_campaign=vibium"&gt;CapSolver&lt;/a&gt;&lt;/strong&gt; addresses this limitation through an alternative methodology. Instead of relying on a browser extension, CapSolver's REST API is directly invoked to bypass the CAPTCHA. The resulting token is then injected into the web page using Vibium's JavaScript evaluation capabilities. This API-centric strategy provides comprehensive control and integrates seamlessly with Vibium's architectural design.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding Vibium
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/VibiumDev/vibium" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;Vibium&lt;/strong&gt;&lt;/a&gt; is a browser automation platform tailored for AI agents and human operators. It is distributed as a standalone Go binary, offering a zero-configuration installation, and leverages the modern WebDriver BiDi protocol for efficient, bidirectional communication with web browsers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Capabilities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WebDriver BiDi protocol&lt;/strong&gt;: A standards-based, bidirectional communication method for browsers, distinct from the Chrome DevTools Protocol (CDP).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server&lt;/strong&gt;: Features an integrated Model Context Protocol server, enabling AI agents to control browsers natively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic element identification&lt;/strong&gt;: Allows for locating web elements based on their meaning rather than solely on CSS selectors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-language SDKs&lt;/strong&gt;: Provides client libraries for JavaScript/TypeScript, Python, and Java.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single Go binary&lt;/strong&gt;: Ensures zero dependencies and configuration, requiring only download and execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developed by Selenium/Appium creators&lt;/strong&gt;: Benefits from extensive expertise in browser automation standards.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI Agent Application
&lt;/h3&gt;

&lt;p&gt;Vibium's MCP server facilitates AI agents in issuing browser commands through a standardized protocol. Agents can perform actions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigating to URLs and interacting with page elements.&lt;/li&gt;
&lt;li&gt;Semantically identifying elements (e.g., "the login button" instead of &lt;code&gt;#btn-login&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Executing arbitrary JavaScript on the page via &lt;code&gt;browser_evaluate&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Completing forms, clicking buttons, and extracting content.&lt;/li&gt;
&lt;li&gt;Managing multiple browser sessions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This functionality essentially provides AI agents with a browser interface that can be controlled using natural language commands.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding CapSolver
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.capsolver.com/?dev.to_source=official&amp;amp;dev.to_medium=blog&amp;amp;dev.to_campaign=vibium"&gt;CapSolver&lt;/a&gt; is a prominent CAPTCHA bypassing service that offers AI-driven solutions for overcoming various CAPTCHA challenges. With support for numerous CAPTCHA types and rapid response times, CapSolver integrates effectively into automated workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supported CAPTCHA Categories
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.capsolver.com/products/recaptchav2" rel="noopener noreferrer"&gt;&lt;strong&gt;reCAPTCHA v2&lt;/strong&gt;&lt;/a&gt; (both image-based and invisible variants)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.capsolver.com/products/recaptchav3" rel="noopener noreferrer"&gt;&lt;strong&gt;reCAPTCHA v3 &amp;amp; v3 Enterprise&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.capsolver.com/products/cloudflare" rel="noopener noreferrer"&gt;&lt;strong&gt;Cloudflare Turnstile&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.capsolver.com/en/guide/captcha/cloudflare_challenge/" rel="noopener noreferrer"&gt;&lt;strong&gt;Cloudflare 5-second Challenge&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.capsolver.com/products/awswaf" rel="noopener noreferrer"&gt;&lt;strong&gt;AWS WAF CAPTCHA&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.capsolver.com/en/guide/api-server/" rel="noopener noreferrer"&gt;&lt;strong&gt;Other widely utilized CAPTCHA and anti-bot mechanisms&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Distinctive Integration Approach
&lt;/h2&gt;

&lt;p&gt;Most browser automation tools, including Playwright, Puppeteer, OpenClaw, and NanoClaw, typically bypass CAPTCHAs by directly loading the CapSolver Chrome extension into the browser. This extension automatically detects CAPTCHAs, bypasses them in the background, and injects tokens without visible interaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vibium, however, cannot employ this method.&lt;/strong&gt; Its Go launcher explicitly hardcodes &lt;code&gt;--disable-extensions&lt;/code&gt; when launching Chrome, precluding any configuration or workaround for loading extensions.&lt;/p&gt;

&lt;p&gt;Instead, this integration directly utilizes the &lt;strong&gt;CapSolver REST API&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Extension-Based Approach (e.g., Playwright)&lt;/th&gt;
&lt;th&gt;API-Based Approach (Vibium)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mechanism&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Extension autonomously detects and bypasses CAPTCHAs&lt;/td&gt;
&lt;td&gt;Your code initiates API calls, retrieves a token, and injects it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Extension Requirement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (Chrome extension loaded via &lt;code&gt;--load-extension&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;No (relies purely on HTTP API calls)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent Awareness&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent operates without explicit knowledge of CAPTCHA handling&lt;/td&gt;
&lt;td&gt;Agent or script actively manages the bypassing process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chrome Flags&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires &lt;code&gt;--load-extension&lt;/code&gt; support&lt;/td&gt;
&lt;td&gt;Compatible with any Chrome flags, including &lt;code&gt;--disable-extensions&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Control Level&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automated, opaque&lt;/td&gt;
&lt;td&gt;Explicit, offering granular control over each step&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited to extension's predefined capabilities&lt;/td&gt;
&lt;td&gt;Allows customization of detection, retry logic, and token injection per site&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Optimal Use Case&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tools that permit custom Chrome arguments&lt;/td&gt;
&lt;td&gt;Tools like Vibium that impose restrictions on Chrome arguments&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key takeaway&lt;/strong&gt;: The API-based approach offers enhanced capabilities. It provides control over when to detect, when to bypass, and precisely how to inject the token. This method is compatible with any browser automation tool, irrespective of its Chrome flag limitations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before configuring this integration, ensure the following are in place:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Vibium&lt;/strong&gt; is installed (&lt;a href="https://github.com/VibiumDev/vibium" rel="noopener noreferrer"&gt;download from GitHub&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A CapSolver account&lt;/strong&gt; with an active API key (&lt;a href="https://www.capsolver.com/?dev.to_source=official&amp;amp;dev.to_medium=blog&amp;amp;dev.to_campaign=vibium"&gt;sign up here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One of the following environments&lt;/strong&gt;: Node.js 18+ / Python 3.8+ / Java 17+&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Vibium Installation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# For macOS / Linux — single binary, no dependencies&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://vibium.dev/install.sh | bash

&lt;span class="c"&gt;# Alternatively, download directly from GitHub releases&lt;/span&gt;
&lt;span class="c"&gt;# https://github.com/VibiumDev/vibium/releases&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the installation by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vibium &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  No Dedicated Chrome Installation Required
&lt;/h3&gt;

&lt;p&gt;Vibium independently manages its browser lifecycle. There is no need to install Chrome for Testing, Playwright's bundled Chromium, or any specific browser variant. Vibium handles the internal download and management of browsers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step-by-Step Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Obtain Your CapSolver API Key
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Register at &lt;a href="https://www.capsolver.com/?dev.to_source=official&amp;amp;dev.to_medium=blog&amp;amp;dev.to_campaign=vibium"&gt;capsolver.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Access your dashboard&lt;/li&gt;
&lt;li&gt;Copy your API key (it typically begins with &lt;code&gt;CAP-&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Set this key as an environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;CAPSOLVER_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"CAP-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Install the Vibium SDK and HTTP Client
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;JavaScript:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;vibium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Python:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;vibium requests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Java (Gradle):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s1"&gt;'com.vibium:vibium:26.3.18'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Develop a CAPTCHA Detection Utility
&lt;/h3&gt;

&lt;p&gt;Prior to bypassing a CAPTCHA, it is necessary to identify its type and extract the site key. This can be achieved by inspecting the page using Vibium's &lt;code&gt;browser_evaluate&lt;/code&gt; function.&lt;/p&gt;

&lt;p&gt;The JavaScript code for detection remains consistent across all three programming languages; only the host call varies:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vibium/sync&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;detectCaptcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`(() =&amp;gt; {
    const v2 = document.querySelector('.g-recaptcha');
    if (v2) return { type: 'recaptcha-v2', siteKey: v2.getAttribute('data-sitekey') };

    for (const s of document.querySelectorAll('script[src*="recaptcha/api.js"]')) {
      const m = s.src.match(/render=([^&amp;amp;]+)/);
      if (m &amp;amp;&amp;amp; m[1] !== 'explicit') return { type: 'recaptcha-v3', siteKey: m[1] };
    }

    const t = document.querySelector('.cf-turnstile');
    if (t) return { type: 'turnstile', siteKey: t.getAttribute('data-sitekey') };

    return { type: 'none', siteKey: null };
  })()`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Python:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;vibium&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;detect_captcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;(() =&amp;gt; {
        const v2 = document.querySelector(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.g-recaptcha&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;);
        if (v2) return { type: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;recaptcha-v2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, siteKey: v2.getAttribute(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data-sitekey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;) };

        for (const s of document.querySelectorAll(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;script[src*=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recaptcha/api.js&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;)) {
            const m = s.src.match(/render=([^&amp;amp;]+)/);
            if (m &amp;amp;&amp;amp; m[1] !== &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;explicit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;) return { type: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;recaptcha-v3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, siteKey: m[1] };
        }

        const t = document.querySelector(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.cf-turnstile&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;);
        if (t) return { type: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;turnstile&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, siteKey: t.getAttribute(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data-sitekey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;) };

        return { type: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;none&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, siteKey: null };
    })()&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Java:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;evaluate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""
    (() =&amp;gt; {
        const v2 = document.querySelector('.g-recaptcha');
        if (v2) return { type: 'recaptcha-v2', siteKey: v2.getAttribute('data-sitekey') };

        for (const s of document.querySelectorAll('script[src*="recaptcha/api.js"]')) {
            const m = s.src.match(/render=([^&amp;amp;]+)/);
            if (m &amp;amp;&amp;amp; m[1] !== 'explicit') return { type: 'recaptcha-v3', siteKey: m[1] };
        }

        const t = document.querySelector('.cf-turnstile');
        if (t) return { type: 'turnstile', siteKey: t.getAttribute('data-sitekey') };

        return { type: 'none', siteKey: null };
    })()
    """&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;captchaType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;siteKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"siteKey"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Implement the CAPTCHA Bypassing Function
&lt;/h3&gt;

&lt;p&gt;Initiate a task with the CapSolver API, then continuously query for the outcome.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CAPSOLVER_API&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.capsolver.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CAPSOLVER_API_KEY&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;taskData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;CAPSOLVER_API&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/createTask`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;clientKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;taskData&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errorId&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`CapSolver: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errorDescription&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getTaskResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;maxAttempts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;maxAttempts&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;CAPSOLVER_API&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/getTaskResult`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;clientKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;taskId&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ready&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;failed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Failed: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errorDescription&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CapSolver: Task timed out&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;bypassCaptcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;taskType&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;recaptcha-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="nx"&gt;taskType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ReCaptchaV2TaskProxyLess&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;recaptcha-v3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="nx"&gt;taskType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ReCaptchaV3TaskProxyLess&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;turnstile&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="nx"&gt;taskType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AntiTurnstileTaskProxyLess&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Unsupported CAPTCHA type: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;taskId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;createTask&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;taskType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;websiteURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;websiteKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getTaskResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gRecaptchaResponse&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example Usage (JavaScript)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;page&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// 1. Navigate&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;targetUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.google.com/recaptcha/api2/demo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;go&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;targetUrl&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// 2. Detect&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;detectCaptcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;No CAPTCHA detected.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Detected &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; — key &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteKey&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// 3. Bypass&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;bypassCaptcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetUrl&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bypassed!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// 4. Inject + submit&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`
    document.querySelector('textarea[name="g-recaptcha-response"]').value = "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;";
    try { const c = ___grecaptcha_cfg.clients; for (const id in c) {
      const f = (o) =&amp;gt; { for (const k in o) { if (typeof o[k]==='object'&amp;amp;&amp;amp;o[k]!==null) {
        if (typeof o[k].callback==='function'){o[k].callback("&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;");return true}
        if(f(o[k]))return true}} return false}; f(c[id]) }} catch(e){}
  `&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`document.querySelector('#recaptcha-demo-form').submit()`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// 5. Verify&lt;/span&gt;
  &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Result:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;document.body.innerText&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Python:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;vibium&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;CAPSOLVER_API&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.capsolver.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CAPSOLVER_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CAPSOLVER_API&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/createTask&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clientKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;task_data&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;errorId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CapSolver: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;errorDescription&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;taskId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_task_result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CAPSOLVER_API&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/getTaskResult&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clientKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;taskId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ready&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Failed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;errorDescription&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;CapSolver: Task timed out&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;bypass_captcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;task_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;recaptcha-v2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;task_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ReCaptchaV2TaskProxyLess&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;recaptcha-v3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;task_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ReCaptchaV3TaskProxyLess&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;turnstile&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;task_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;AntiTurnstileTaskProxyLess&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unsupported CAPTCHA type: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_task&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteURL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;siteKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_task_result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;solution&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gRecaptchaResponse&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;solution&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;token&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;bro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;page&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# 1. Navigate
&lt;/span&gt;    &lt;span class="n"&gt;target_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.google.com/recaptcha/api2/demo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;go&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 2. Detect
&lt;/span&gt;    &lt;span class="n"&gt;info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;(() =&amp;gt; {
        const el = document.querySelector(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.g-recaptcha&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;);
        return el ? { type: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;recaptcha-v2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, siteKey: el.getAttribute(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data-sitekey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;) }
                   : { type: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;none&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, siteKey: null };
    })()&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;none&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No CAPTCHA detected.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Detected &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — key &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;siteKey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. Bypass
&lt;/span&gt;    &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;bypass_captcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bypassed!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 4. Inject + submit
&lt;/span&gt;    &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
        document.querySelector(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;textarea[name=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;g-recaptcha-response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;).value = &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;;
        try {{ const c = ___grecaptcha_cfg.clients; for (const id in c) {{
            const f = (o) =&amp;gt; {{ for (const k in o) {{ if (typeof o[k]===&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;amp;&amp;amp;o[k]!==null) {{
                if (typeof o[k].callback===&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;){{o[k].callback(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;);return true}}
                if(f(o[k]))return true}}}} return false}}; f(c[id]) }}}} catch(e){{}}
        &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;document.querySelector(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#recaptcha-demo-form&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;).submit()&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 5. Verify
&lt;/span&gt;    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Result:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;document.body.innerText&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;bro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Java:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.vibium.Vibium&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.json.JSONObject&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.net.URI&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.net.http.HttpClient&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.net.http.HttpRequest&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.net.http.HttpResponse&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Map&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CapSolverIntegration&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="no"&gt;CAPSOLVER_API&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"https://api.capsolver.com"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="no"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getenv&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"CAPSOLVER_API_KEY"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;createTask&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;JSONObject&lt;/span&gt; &lt;span class="n"&gt;taskData&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;HttpClient&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;HttpClient&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newHttpClient&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="nc"&gt;HttpRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;HttpRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newBuilder&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;URI&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;create&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;CAPSOLVER_API&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"/createTask"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Content-Type"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"application/json"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;POST&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BodyPublishers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ofString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;JSONObject&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"clientKey"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;API_KEY&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"task"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;taskData&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;()))&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="nc"&gt;HttpResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;send&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;HttpResponse&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BodyHandlers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ofString&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="nc"&gt;JSONObject&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;JSONObject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"errorId"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Exception&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"CapSolver: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"errorDescription"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"taskId"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;JSONObject&lt;/span&gt; &lt;span class="nf"&gt;getTaskResult&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;taskId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;maxAttempts&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;HttpClient&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;HttpClient&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newHttpClient&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;maxAttempts&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;Thread&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sleep&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nc"&gt;HttpRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;HttpRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newBuilder&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;URI&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;create&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;CAPSOLVER_API&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"/getTaskResult"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
                    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Content-Type"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"application/json"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;POST&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BodyPublishers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ofString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;JSONObject&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"clientKey"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;API_KEY&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"taskId"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;taskId&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;()))&lt;/span&gt;
                    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="nc"&gt;HttpResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;send&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;HttpResponse&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BodyHandlers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ofString&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
            &lt;span class="nc"&gt;JSONObject&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;JSONObject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"status"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ready"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"status"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"failed"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Failed: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"errorDescription"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Exception&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"CapSolver: Task timed out"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;bypassCaptcha&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;taskType&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"recaptcha-v2"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;taskType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"ReCaptchaV2TaskProxyLess"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"recaptcha-v3"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;taskType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"ReCaptchaV3TaskProxyLess"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"turnstile"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;taskType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"AntiTurnstileTaskProxyLess"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Exception&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Unsupported CAPTCHA type: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="nc"&gt;JSONObject&lt;/span&gt; &lt;span class="n"&gt;taskData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;JSONObject&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;taskType&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"websiteURL"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"websiteKey"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"siteKey"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;taskId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;createTask&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;taskData&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;JSONObject&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;getTaskResult&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;taskId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getJSONObject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"solution"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;optString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"gRecaptchaResponse"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getJSONObject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"solution"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"token"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;bro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Vibium&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;page&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// 1. Navigate&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;targetUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"https://www.google.com/recaptcha/api2/demo"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;go&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;targetUrl&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// 2. Detect&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;)&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;evaluate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""
            (() =&amp;gt; {
                const el = document.querySelector('.g-recaptcha');
                return el ? { type: 'recaptcha-v2', siteKey: el.getAttribute('data-sitekey') }
                           : { type: 'none', siteKey: null };
            })()"""&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"none"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;)))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"No CAPTCHA detected."&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;printf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Detected %s — key %s%n"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"siteKey"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;

        &lt;span class="c1"&gt;// 3. Bypass&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bypassCaptcha&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;targetUrl&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bypassed!"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// 4. Inject + submit&lt;/span&gt;
        &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;evaluate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""
            document.querySelector('textarea[name="g-recaptcha-response"]').value = "%s";
            try { const c = ___grecaptcha_cfg.clients; for (const id in c) {
                const f = (o) =&amp;gt; { for (const k in o) { if (typeof o[k]==='object'&amp;amp;&amp;amp;o[k]!==null) {
                    if (typeof o[k].callback==='function'){o[k].callback("%s");return true}
                    if(f(o[k]))return true}}}} return false}; f(c[id]) }}}} catch(e){}
            """&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;evaluate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"document.querySelector('#recaptcha-demo-form').submit()"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// 5. Verify&lt;/span&gt;
        &lt;span class="nc"&gt;Thread&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sleep&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Result: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;evaluate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"document.body.innerText"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="n"&gt;bro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stop&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Supported CAPTCHA Task Categories
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CAPTCHA Type&lt;/th&gt;
&lt;th&gt;CapSolver Task Type&lt;/th&gt;
&lt;th&gt;Token Field&lt;/th&gt;
&lt;th&gt;Estimated Bypass Time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReCaptchaV2TaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;textarea[name="g-recaptcha-response"]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;5-15 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v2 (invisible)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReCaptchaV2TaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;textarea[name="g-recaptcha-response"]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;5-15 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReCaptchaV3TaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;input[name="g-recaptcha-response"]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;3-10 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA Enterprise&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReCaptchaV2EnterpriseTaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;textarea[name="g-recaptcha-response"]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;10-20 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Turnstile&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AntiTurnstileTaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;input[name="cf-turnstile-response"]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;3-10 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS WAF&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AntiAwsWafTaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Custom (site-dependent)&lt;/td&gt;
&lt;td&gt;5-15 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GeeTest v3/v4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GeeTestTaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Custom (site-dependent)&lt;/td&gt;
&lt;td&gt;5-15 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Troubleshooting Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Token Expiration Before Form Submission
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: The form is submitted, but the server rejects the CAPTCHA response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause&lt;/strong&gt;: CAPTCHA tokens possess a limited validity period (typically 90-120 seconds for reCAPTCHA, 300 seconds for Turnstile). If there is an excessive delay between bypassing the CAPTCHA and submitting the form, the token may expire.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resolution&lt;/strong&gt;: Inject and submit the token immediately upon receipt. Avoid introducing unnecessary delays between the bypassing and submission steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  CAPTCHA Not Detected on Page
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: The detection script reports &lt;code&gt;{ type: 'none' }&lt;/code&gt; even when a CAPTCHA is visibly present.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Potential Causes:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Incomplete page loading&lt;/strong&gt; — Introduce a waiting period after navigation (e.g., &lt;code&gt;time.sleep(3)&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CAPTCHA within an iframe&lt;/strong&gt; — Some reCAPTCHA implementations load inside an iframe. It may be necessary to detect the iframe and extract the site key from the page source or network requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic loading&lt;/strong&gt; — The CAPTCHA widget might load asynchronously. Wait for the element to appear before attempting detection.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  CapSolver API Errors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Common Error Scenarios:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Error Code&lt;/th&gt;
&lt;th&gt;Underlying Cause&lt;/th&gt;
&lt;th&gt;Corrective Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ERROR_KEY_DOES_NOT_EXIST&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Invalid API key provided&lt;/td&gt;
&lt;td&gt;Verify your &lt;code&gt;CAPSOLVER_API_KEY&lt;/code&gt; setting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ERROR_ZERO_BALANCE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Insufficient credits in your account&lt;/td&gt;
&lt;td&gt;Recharge your account at &lt;a href="https://www.capsolver.com/?dev.to_source=official&amp;amp;dev.to_medium=blog&amp;amp;dev.to_campaign=vibium"&gt;capsolver.com&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ERROR_WRONG_CAPTCHA_TYPE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Incorrect task type specified for the CAPTCHA&lt;/td&gt;
&lt;td&gt;Confirm the CAPTCHA type using the detection utility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ERROR_CAPTCHA_UNSOLVABLE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The CAPTCHA could not be bypassed&lt;/td&gt;
&lt;td&gt;Attempt a retry, as transient failures can occur&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  CORS Issues During CapSolver API Calls
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: API requests originating from the browser fail due to Cross-Origin Resource Sharing (CORS) policies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause&lt;/strong&gt;: This occurs when attempting to invoke the CapSolver API from within &lt;code&gt;browser_evaluate&lt;/code&gt; (i.e., from the browser's context). The CapSolver API does not permit cross-origin requests from arbitrary websites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resolution&lt;/strong&gt;: Always make CapSolver API calls from your &lt;strong&gt;script's environment&lt;/strong&gt; (Node.js, Python, or Java process), not from within the browser. &lt;code&gt;browser_evaluate&lt;/code&gt; should be reserved for detection (reading the DOM) and injection (setting form values). API interactions must be handled server-side.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Submission Failure
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: The token is injected, but the form either fails to submit or the server does not accept it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Potential Causes:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Missing callback trigger&lt;/strong&gt; — Many reCAPTCHA implementations require the callback function to be invoked with the token, not merely setting the textarea value. Refer to the &lt;code&gt;injectToken&lt;/code&gt; function example above, which traverses &lt;code&gt;___grecaptcha_cfg.clients&lt;/code&gt; to locate and trigger the callback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom form validation&lt;/strong&gt; — The website may incorporate additional JavaScript validation. Inspect the form's submit handler in developer tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token format discrepancy&lt;/strong&gt; — Ensure that &lt;code&gt;gRecaptchaResponse&lt;/code&gt; is used for reCAPTCHA and &lt;code&gt;token&lt;/code&gt; for Turnstile, as provided by the CapSolver result.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Implement a Sensible Polling Interval
&lt;/h3&gt;

&lt;p&gt;Query &lt;code&gt;/getTaskResult&lt;/code&gt; every &lt;strong&gt;2 seconds&lt;/strong&gt;. More frequent polling can lead to wasted API calls and potential rate limiting. Less frequent polling introduces unnecessary latency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// JavaScript: Optimal — 2-second interval&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Python: Optimal — 2-second interval
&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Java: Optimal — 2-second interval&lt;/span&gt;
&lt;span class="nc"&gt;Thread&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sleep&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Incorporate Retry Logic with Exponential Backoff
&lt;/h3&gt;

&lt;p&gt;CAPTCHA bypassing can occasionally encounter failures. Encapsulate your bypassing function with retry mechanisms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;bypassWithRetry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;retries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;retries&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;bypassCaptcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;retries&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Python:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;bypass_with_retry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;retries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;retries&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;bypass_captcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;retries&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;raise&lt;/span&gt;
            &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Utilize the Appropriate Task Type for Each CAPTCHA
&lt;/h3&gt;

&lt;p&gt;Employing an incorrect task type will result in bypassing failure. Always detect the CAPTCHA type initially, then map it to the corresponding CapSolver task:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CAPTCHA Type&lt;/th&gt;
&lt;th&gt;CapSolver Task Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v2 (checkbox)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReCaptchaV2TaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v2 (invisible)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReCaptchaV2TaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReCaptchaV3TaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v2 Enterprise&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReCaptchaV2EnterpriseTaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v3 Enterprise&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReCaptchaV3EnterpriseTaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Turnstile&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AntiTurnstileTaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS WAF&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AntiAwsWafTaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  4. Immediate Injection and Submission
&lt;/h3&gt;

&lt;p&gt;CAPTCHA tokens have a limited lifespan. Once the token is received from CapSolver, inject it and submit the form as swiftly as possible. Avoid introducing artificial delays between the bypassing and submission phases.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Monitor Balance Before Extended Operations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;JavaScript:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;CAPSOLVER_API&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/getBalance`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;clientKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;API_KEY&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;balance&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;warn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Low CapSolver balance!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Python:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CAPSOLVER_API&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/getBalance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clientKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;balance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Low CapSolver balance!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Maintain Server-Side API Calls
&lt;/h3&gt;

&lt;p&gt;Never invoke the CapSolver API from within &lt;code&gt;browser_evaluate&lt;/code&gt;. HTTP requests made from the browser context will fail due to CORS restrictions, and exposing your API key in browser-side JavaScript poses a security risk. All API calls must originate from your application's process (Node.js, Python, or Java).&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The integration of Vibium with the CapSolver API demonstrates that browser extensions are not a prerequisite for bypassing CAPTCHAs in automated workflows. When a tool like Vibium imposes restrictions on Chrome flags, the API-based approach offers &lt;strong&gt;enhanced control, rather than diminished capabilities&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Detect&lt;/strong&gt; the CAPTCHA type and site key using &lt;code&gt;browser_evaluate&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bypass&lt;/strong&gt; the CAPTCHA by invoking the CapSolver REST API from your script.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inject&lt;/strong&gt; the obtained token back into the page via &lt;code&gt;browser_evaluate&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Submit&lt;/strong&gt; the form.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This methodology is applicable to any browser automation tool that supports JavaScript evaluation, extending beyond just Vibium. Regardless of whether you are utilizing WebDriver BiDi, CDP, or another protocol, the CapSolver API approach provides a universal solution.&lt;/p&gt;

&lt;p&gt;By combining Vibium's standards-compliant browser automation with CapSolver's efficient and dependable CAPTCHA bypassing API, a robust pipeline is established for seamless automated operations.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>browser</category>
      <category>cloudflarechallenge</category>
    </item>
    <item>
      <title>How to Bypass CAPTCHAs in Vibium: A Complete Guide for AI Agents</title>
      <dc:creator>luisgustvo</dc:creator>
      <pubDate>Fri, 27 Mar 2026 07:30:45 +0000</pubDate>
      <link>https://dev.to/luisgustvo/how-to-bypass-captchas-in-vibium-a-complete-guide-for-ai-agents-6ki</link>
      <guid>https://dev.to/luisgustvo/how-to-bypass-captchas-in-vibium-a-complete-guide-for-ai-agents-6ki</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz8xnv7sdni4r4wblko4b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz8xnv7sdni4r4wblko4b.png" alt="Bypass CAPTCHA in Vibium" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the world of &lt;strong&gt;AI browser automation&lt;/strong&gt;, CAPTCHAs remain the most significant hurdle. When AI agents attempt to navigate protected pages or submit forms, these security measures often stall workflows, requiring manual human intervention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vibium&lt;/strong&gt; has emerged as a powerful, next-generation automation tool designed specifically for AI agents. Built on the modern &lt;strong&gt;WebDriver BiDi protocol&lt;/strong&gt; by the creators of Selenium and Appium, it offers a high-performance, standards-based way to control browsers. However, Vibium presents a unique challenge: it hardcodes the &lt;code&gt;--disable-extensions&lt;/code&gt; flag, meaning traditional browser extension-based CAPTCHA bypassers won't work.&lt;/p&gt;

&lt;p&gt;This is where &lt;a href="https://www.capsolver.com/?utm_source=dev.to&amp;amp;utm_medium=blog&amp;amp;utm_campaign=vibium"&gt;CapSolver&lt;/a&gt; comes in. By utilizing the &lt;strong&gt;CapSolver REST API&lt;/strong&gt;, you can bypass CAPTCHAs programmatically without needing any browser extensions. This guide will show you how to integrate CapSolver with Vibium to create seamless, automated workflows for your AI agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding Vibium
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/VibiumDev/vibium" rel="noopener noreferrer"&gt;Vibium&lt;/a&gt; is a streamlined browser automation platform. It is distributed as a single Go binary, making it incredibly easy to install and deploy. Unlike older tools that rely on the Chrome DevTools Protocol (CDP), Vibium leverages the &lt;strong&gt;WebDriver BiDi protocol&lt;/strong&gt; for faster, bidirectional communication.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Advantages of Vibium
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;WebDriver BiDi Support&lt;/strong&gt;: Provides a standardized, high-speed connection to the browser.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Native AI Integration&lt;/strong&gt;: Includes a built-in &lt;strong&gt;MCP (Model Context Protocol) server&lt;/strong&gt;, allowing AI agents to control the browser directly.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Semantic Interaction&lt;/strong&gt;: Agents can find elements based on their meaning (e.g., "the checkout button") rather than brittle CSS selectors.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cross-Language SDKs&lt;/strong&gt;: Official support for Python, JavaScript/TypeScript, and Java.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero-Config Setup&lt;/strong&gt;: A single binary with no external dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For AI agents, Vibium acts as a bridge, allowing them to interact with the web using natural language commands while maintaining the precision of a programmatic API.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is CapSolver?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.capsolver.com/?utm_source=dev.to&amp;amp;utm_medium=blog&amp;amp;utm_campaign=vibium"&gt;CapSolver&lt;/a&gt; is an industry-leading &lt;strong&gt;CAPTCHA bypassing service&lt;/strong&gt; powered by advanced AI. It provides automated solutions for a wide variety of anti-bot challenges, ensuring your automation scripts remain uninterrupted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supported CAPTCHA Solutions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://www.capsolver.com/products/recaptchav2" rel="noopener noreferrer"&gt;&lt;strong&gt;reCAPTCHA v2 &amp;amp; v3&lt;/strong&gt;&lt;/a&gt; (including Enterprise versions)&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.capsolver.com/products/cloudflare" rel="noopener noreferrer"&gt;&lt;strong&gt;Cloudflare Turnstile&lt;/strong&gt;&lt;/a&gt; &amp;amp; 5-second Challenges&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.capsolver.com/products/awswaf" rel="noopener noreferrer"&gt;&lt;strong&gt;AWS WAF CAPTCHA&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://docs.capsolver.com/en/guide/captcha/geetest/" rel="noopener noreferrer"&gt;&lt;strong&gt;GeeTest v3/v4&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;And many other anti-bot mechanisms.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why the API-Based Approach is Superior for Vibium
&lt;/h2&gt;

&lt;p&gt;Most automation frameworks like Playwright or Puppeteer bypass CAPTCHAs by loading a Chrome extension. Since Vibium disables extensions by default, we use the &lt;strong&gt;CapSolver API&lt;/strong&gt; approach. This method is actually more robust and offers greater control.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Extension-Based (Playwright/Puppeteer)&lt;/th&gt;
&lt;th&gt;API-Based (Vibium + CapSolver)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mechanism&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic detection via extension&lt;/td&gt;
&lt;td&gt;Explicit API calls and token injection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Extension Required&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;No&lt;/strong&gt; (Pure HTTP)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Opaque/Automatic&lt;/td&gt;
&lt;td&gt;Full programmatic control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compatibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited by browser flags&lt;/td&gt;
&lt;td&gt;Works with any configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fixed logic&lt;/td&gt;
&lt;td&gt;Customizable retry and injection logic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;By using the API, you can precisely manage when a CAPTCHA is bypassed and how the resulting token is submitted, making it the ideal choice for restricted environments.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;To get started, ensure you have the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Vibium Installed&lt;/strong&gt;: Get it from the &lt;a href="https://github.com/VibiumDev/vibium" rel="noopener noreferrer"&gt;official GitHub repository&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;CapSolver Account&lt;/strong&gt;: &lt;a href="https://www.capsolver.com/?utm_source=dev.to&amp;amp;utm_medium=blog&amp;amp;utm_campaign=vibium"&gt;Sign up here&lt;/a&gt; to get your API key.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Development Environment&lt;/strong&gt;: Node.js 18+, Python 3.8+, or Java 17+.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Installing Vibium
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Quick install for macOS / Linux&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://vibium.dev/install.sh | bash

&lt;span class="c"&gt;# Verify installation&lt;/span&gt;
vibium &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vibium manages its own browser instances, so you don't need to worry about installing specific versions of Chromium or Chrome for Testing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step-by-Step Integration Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Configure Your API Key
&lt;/h3&gt;

&lt;p&gt;Sign up at &lt;a href="https://www.capsolver.com/?utm_source=dev.to&amp;amp;utm_medium=blog&amp;amp;utm_campaign=vibium"&gt;CapSolver&lt;/a&gt; and retrieve your API key from the dashboard. Set it as an environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;CAPSOLVER_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"CAP-YOUR_ACTUAL_API_KEY"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Install Dependencies
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;For Node.js:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;vibium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For Python:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;vibium requests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Detect CAPTCHAs on the Page
&lt;/h3&gt;

&lt;p&gt;Use Vibium's &lt;code&gt;browser_evaluate&lt;/code&gt; to inspect the DOM and identify the CAPTCHA type and site key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vibium/sync&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;detectCaptcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`(() =&amp;gt; {
    const v2 = document.querySelector('.g-recaptcha');
    if (v2) return { type: 'recaptcha-v2', siteKey: v2.getAttribute('data-sitekey') };

    for (const s of document.querySelectorAll('script[src*="recaptcha/api.js"]')) {
      const m = s.src.match(/render=([^&amp;amp;]+)/);
      if (m &amp;amp;&amp;amp; m[1] !== 'explicit') return { type: 'recaptcha-v3', siteKey: m[1] };
    }

    const t = document.querySelector('.cf-turnstile');
    if (t) return { type: 'turnstile', siteKey: t.getAttribute('data-sitekey') };

    return { type: 'none', siteKey: null };
  })()`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Python Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;vibium&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;detect_captcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;(() =&amp;gt; {
        const v2 = document.querySelector(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.g-recaptcha&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;);
        if (v2) return { type: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;recaptcha-v2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, siteKey: v2.getAttribute(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data-sitekey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;) };

        for (const s of document.querySelectorAll(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;script[src*=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recaptcha/api.js&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;)) {
            const m = s.src.match(/render=([^&amp;amp;]+)/);
            if (m &amp;amp;&amp;amp; m[1] !== &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;explicit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;) return { type: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;recaptcha-v3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, siteKey: m[1] };
        }

        const t = document.querySelector(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.cf-turnstile&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;);
        if (t) return { type: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;turnstile&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, siteKey: t.getAttribute(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data-sitekey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;) };

        return { type: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;none&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, siteKey: null };
    })()&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Java Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;evaluate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""
    (() =&amp;gt; {
        const v2 = document.querySelector('.g-recaptcha');
        if (v2) return { type: 'recaptcha-v2', siteKey: v2.getAttribute('data-sitekey') };

        for (const s of document.querySelectorAll('script[src*="recaptcha/api.js"]')) {
            const m = s.src.match(/render=([^&amp;amp;]+)/);
            if (m &amp;amp;&amp;amp; m[1] !== 'explicit') return { type: 'recaptcha-v3', siteKey: m[1] };
        }

        const t = document.querySelector('.cf-turnstile');
        if (t) return { type: 'turnstile', siteKey: t.getAttribute('data-sitekey') };

        return { type: 'none', siteKey: null };
    })()
    """&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;captchaType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;siteKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"siteKey"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Bypass and Inject the Token
&lt;/h3&gt;

&lt;p&gt;Once detected, call the CapSolver API to bypass the challenge and inject the resulting token back into the page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript Implementation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CAPSOLVER_API&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.capsolver.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CAPSOLVER_API_KEY&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;taskData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;CAPSOLVER_API&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/createTask`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;clientKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;taskData&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errorId&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`CapSolver: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errorDescription&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getTaskResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;maxAttempts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;maxAttempts&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;CAPSOLVER_API&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/getTaskResult`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;clientKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;taskId&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ready&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;failed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Failed: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errorDescription&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Timeout&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Full Workflow (Python):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;vibium&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;CAPSOLVER_API&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.capsolver.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CAPSOLVER_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;bro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;page&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# 1. Navigate to the target page
&lt;/span&gt;    &lt;span class="n"&gt;target_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/protected-page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;go&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 2. Detect the CAPTCHA
&lt;/span&gt;    &lt;span class="n"&gt;info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;(() =&amp;gt; {
        const el = document.querySelector(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.g-recaptcha&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;);
        return el ? { type: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;recaptcha-v2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, siteKey: el.getAttribute(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data-sitekey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;) }
                   : { type: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;none&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, siteKey: null };
    })()&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;none&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No CAPTCHA found.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Detected &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — key &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;siteKey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. Bypass via CapSolver API
&lt;/span&gt;    &lt;span class="c1"&gt;# (Assuming solve_captcha helper is implemented)
&lt;/span&gt;    &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;solve_captcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solved!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 4. Inject the token and submit the form
&lt;/span&gt;    &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
        document.querySelector(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;textarea[name=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;g-recaptcha-response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;).value = &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;;
        try {{ const c = ___grecaptcha_cfg.clients; for (const id in c) {{
            const f = (o) =&amp;gt; {{ for (const k in o) {{ if (typeof o[k]===&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;amp;&amp;amp;o[k]!==null) {{
                if (typeof o[k].callback===&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;){{o[k].callback(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;);return true}}
                if(f(o[k]))return true}}}} return false}}; f(c[id]) }}}} catch(e){{}}
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;document.querySelector(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#recaptcha-demo-form&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;).submit()&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 5. Verify success
&lt;/span&gt;    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Result:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;document.body.innerText&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;bro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Supported CAPTCHA Task Types
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CAPTCHA Type&lt;/th&gt;
&lt;th&gt;CapSolver Task Type&lt;/th&gt;
&lt;th&gt;Token Injection Field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;reCAPTCHA v2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReCaptchaV2TaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;textarea[name="g-recaptcha-response"]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;reCAPTCHA v3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReCaptchaV3TaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;input[name="g-recaptcha-response"]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloudflare Turnstile&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AntiTurnstileTaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;input[name="cf-turnstile-response"]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS WAF&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AntiAwsWafTaskProxyLess&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Site-specific&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Troubleshooting &amp;amp; Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Common Issues
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Token Expiration&lt;/strong&gt;: CAPTCHA tokens usually expire within 2 minutes. Ensure you inject and submit the form immediately after receiving the token.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;CORS Errors&lt;/strong&gt;: Never call the CapSolver API from within &lt;code&gt;browser_evaluate&lt;/code&gt;. Always make API calls from your main script (Node/Python/Java) to avoid security and cross-origin issues.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Callback Functions&lt;/strong&gt;: Many sites use JavaScript callbacks to handle CAPTCHA submission. Use the injection script provided above to find and trigger these callbacks automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best Practices for High Reliability
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Polling Interval&lt;/strong&gt;: Poll the CapSolver API every &lt;strong&gt;2 seconds&lt;/strong&gt;. This is the optimal balance between speed and efficiency.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Retry Logic&lt;/strong&gt;: Implement exponential backoff for your API calls to handle transient network failures.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Balance Monitoring&lt;/strong&gt;: Check your CapSolver balance programmatically before starting large automation runs to avoid interruptions.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Integrating &lt;strong&gt;Vibium&lt;/strong&gt; with the &lt;strong&gt;CapSolver API&lt;/strong&gt; provides a robust, future-proof solution for bypassing CAPTCHAs in AI-driven browser automation. While Vibium's restriction on extensions might seem like a limitation, the API-based approach offers superior control and flexibility.&lt;/p&gt;

&lt;p&gt;By following this guide, you can ensure your AI agents navigate the web smoothly, overcoming security obstacles with ease. Ready to scale your automation? &lt;a href="https://www.capsolver.com/?utm_source=dev.to&amp;amp;utm_medium=blog&amp;amp;utm_campaign=vibium"&gt;Sign up for CapSolver&lt;/a&gt; today and start bypassing!&lt;/p&gt;

</description>
      <category>captcha</category>
      <category>ai</category>
      <category>agents</category>
      <category>browser</category>
    </item>
    <item>
      <title>Solving CAPTCHA Challenges with Vercel Agent Browser: A CapSolver Integration Guide</title>
      <dc:creator>luisgustvo</dc:creator>
      <pubDate>Mon, 23 Mar 2026 10:16:18 +0000</pubDate>
      <link>https://dev.to/luisgustvo/solving-captcha-challenges-with-vercel-agent-browser-a-capsolver-integration-guide-4l21</link>
      <guid>https://dev.to/luisgustvo/solving-captcha-challenges-with-vercel-agent-browser-a-capsolver-integration-guide-4l21</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8yrckkrgt4w8u2jfff5w.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8yrckkrgt4w8u2jfff5w.webp" alt="Solve CAPTCHA with Vercel Agent Browser " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When an AI agent encounters a CAPTCHA, the automated workflow is disrupted. Navigation halts, form submissions fail, and data extraction becomes impossible, all due to security measures designed to prevent automated access. Vercel Agent Browser, a high-performance, native Rust CLI, is specifically engineered for headless browser automation in AI agent contexts. It offers features like accessibility-first element selection, semantic locators, and an LLM-optimized snapshot-ref workflow. However, like any browser automation tool, it can be impeded by CAPTCHAs.&lt;/p&gt;

&lt;p&gt;CapSolver offers a transformative solution. By integrating the CapSolver Chrome extension into Agent Browser via the &lt;code&gt;--extension&lt;/code&gt; flag, CAPTCHAs are automatically and seamlessly resolved in the background. This eliminates the need for manual intervention or complex API orchestrations. Your command-line operations continue uninterrupted, as if no CAPTCHA ever appeared.&lt;/p&gt;

&lt;p&gt;A significant advantage is Agent Browser's support for extensions in &lt;strong&gt;both headed and headless modes&lt;/strong&gt;, a capability not shared by tools like Playwright, which typically require headed mode for extensions. This ensures that your production pipelines, CI/CD workflows, and serverless deployments can operate without any display requirements. Your agent can then concentrate on its core functions—navigating web pages, extracting data, and automating tasks—while CapSolver efficiently manages CAPTCHA resolution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction to Vercel Agent Browser
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/vercel-labs/agent-browser" rel="noopener noreferrer"&gt;Vercel Agent Browser&lt;/a&gt; is a headless browser automation command-line interface developed in Rust for superior performance. Created by Vercel Labs, it provides a CLI to control Chrome without relying on Playwright or Node.js for the browser daemon. Its design prioritizes accessibility, utilizing semantic locators and snapshot references, making it an ideal tool for AI agents interacting with web content.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Capabilities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native Rust CLI&lt;/strong&gt;: A rapid, single-binary tool with no runtime dependencies for the browser daemon.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snapshot-Ref Workflow&lt;/strong&gt;: Generates an accessibility tree with element references, enabling deterministic, fast, and AI-friendly interactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic Locators&lt;/strong&gt;: Facilitates element identification using ARIA roles, text content, labels, placeholders, or alt text, avoiding fragile CSS selectors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Headless Extension Support&lt;/strong&gt;: Allows loading Chrome extensions in both headed and headless modes, leveraging Chrome's &lt;code&gt;--headless=new&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session Management&lt;/strong&gt;: Provides isolated sessions, persistent profiles, encrypted state storage, and an authentication vault for credential handling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON Output Mode&lt;/strong&gt;: Delivers machine-readable output for agent pipelines when using &lt;code&gt;--json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Provider Integration&lt;/strong&gt;: Includes built-in support for services such as Browserless, Browserbase, Browser Use, Kernel, and iOS Simulator.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Features&lt;/strong&gt;: Incorporates domain allowlists, action policies, content boundaries, and confirmation gates to ensure secure AI agent deployments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agent Browser functions effectively across various web environments, including authenticated content, dynamic Single-Page Applications (SPAs), and CAPTCHA-protected sites, making it highly suitable for AI agent workflows, data collection, and automated testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding CapSolver
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dashboard.capsolver.com/dashboard/overview/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agent-browser-capsolver"&gt;CapSolver&lt;/a&gt; is a prominent AI-driven CAPTCHA solving service designed to automatically overcome a wide array of CAPTCHA challenges. Known for its rapid response times and extensive compatibility, CapSolver integrates smoothly into automated processes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supported CAPTCHA Categories
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;reCAPTCHA v2 (both checkbox and invisible variants)&lt;/li&gt;
&lt;li&gt;reCAPTCHA v3 &amp;amp; v3 Enterprise&lt;/li&gt;
&lt;li&gt;Cloudflare Turnstile&lt;/li&gt;
&lt;li&gt;Cloudflare 5-second Challenge&lt;/li&gt;
&lt;li&gt;AWS WAF CAPTCHA&lt;/li&gt;
&lt;li&gt;And more&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Distinctive Advantage of This Integration
&lt;/h2&gt;

&lt;p&gt;Many CAPTCHA-solving integrations typically demand boilerplate code for task creation, result polling, and token injection into hidden fields. This is the conventional approach with raw Playwright or Puppeteer scripts.&lt;/p&gt;

&lt;p&gt;However, the Agent Browser + CapSolver combination adopts a fundamentally different methodology:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Traditional (Code-Based)&lt;/th&gt;
&lt;th&gt;Agent Browser + CapSolver Extension&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Requires writing a CapSolver service class&lt;/td&gt;
&lt;td&gt;Simply add the &lt;code&gt;--extension&lt;/code&gt; flag to your command&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Involves calling &lt;code&gt;createTask()&lt;/code&gt; / &lt;code&gt;getTaskResult()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;The extension manages all operations automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Necessitates token injection via JavaScript evaluation&lt;/td&gt;
&lt;td&gt;Token injection occurs invisibly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requires handling errors, retries, and timeouts within your code&lt;/td&gt;
&lt;td&gt;The extension internally manages retries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Demands different code for each CAPTCHA type&lt;/td&gt;
&lt;td&gt;Functions automatically for all types&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Headed mode is typically required for extensions&lt;/td&gt;
&lt;td&gt;Operates in both headed AND headless modes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The core principle&lt;/strong&gt;: The CapSolver extension operates within Agent Browser's Chrome instance. When Agent Browser navigates to a page containing a CAPTCHA, the extension detects it, resolves it in the background, and injects the token before your subsequent commands execute. This keeps your automation scripts streamlined, focused, and free from CAPTCHA-related complexities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites for Setup
&lt;/h2&gt;

&lt;p&gt;Before proceeding with the integration, ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vercel Agent Browser&lt;/strong&gt; installed (&lt;code&gt;npm install -g agent-browser&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A CapSolver account&lt;/strong&gt; with an API key (&lt;a href="https://www.capsolver.com/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agent-browser-capsolver"&gt;register here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js version 16 or higher&lt;/strong&gt; (required for npm installation)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Unlike Playwright-based tools, Agent Browser supports extensions in &lt;strong&gt;both headed and headless modes&lt;/strong&gt;. There is no need for Xvfb or virtual display setups on servers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step-by-Step Implementation Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Install Agent Browser
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; agent-browser
agent-browser &lt;span class="nb"&gt;install&lt;/span&gt;  &lt;span class="c"&gt;# Downloads Chrome from Chrome for Testing (first-time execution only)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Alternative installation methods:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# For macOS via Homebrew&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;agent-browser
agent-browser &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Using Cargo (Rust package manager)&lt;/span&gt;
cargo &lt;span class="nb"&gt;install &lt;/span&gt;agent-browser
agent-browser &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Linux systems, include necessary system dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agent-browser &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--with-deps&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Obtain the CapSolver Chrome Extension
&lt;/h3&gt;

&lt;p&gt;Download the CapSolver Chrome extension and extract its contents into a designated directory:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Visit the &lt;a href="https://github.com/capsolver/capsolver-browser-extension/releases/tag/v.1.17.0" rel="noopener noreferrer"&gt;CapSolver Chrome Extension v1.17.0 release page&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Download the &lt;code&gt;CapSolver.Browser.Extension-chrome-v1.17.0.zip&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt; Extract the archive:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/capsolver-extension
unzip CapSolver.Browser.Extension-chrome-v&lt;span class="k"&gt;*&lt;/span&gt;.zip &lt;span class="nt"&gt;-d&lt;/span&gt; ~/capsolver-extension/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Confirm successful extraction:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; ~/capsolver-extension/manifest.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Presence of &lt;code&gt;manifest.json&lt;/code&gt; verifies correct placement of the extension files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Configure Your CapSolver API Key
&lt;/h3&gt;

&lt;p&gt;Locate the extension's configuration file at &lt;code&gt;~/capsolver-extension/assets/config.js&lt;/code&gt; and update the &lt;code&gt;apiKey&lt;/code&gt; value with your personal key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;defaultConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CAP-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// ← Insert your API key here&lt;/span&gt;
  &lt;span class="na"&gt;useCapsolver&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// ... rest of the config&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your API key can be retrieved from your &lt;a href="https://dashboard.capsolver.com/passport/login/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agent-browser-capsolver"&gt;CapSolver dashboard&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Launch Agent Browser with the CapSolver Extension Enabled
&lt;/h3&gt;

&lt;p&gt;Activating the extension requires a single flag: &lt;code&gt;--extension&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agent-browser &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/capsolver-extension open https://example.com/protected-page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this, the CapSolver extension is active within the browser and will automatically resolve any CAPTCHA it encounters.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;headed mode&lt;/strong&gt; (to observe the browser visually):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agent-browser &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/capsolver-extension &lt;span class="nt"&gt;--headed&lt;/span&gt; open https://example.com/protected-page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Verify Extension Loading
&lt;/h3&gt;

&lt;p&gt;In headed mode, navigate to &lt;code&gt;chrome://extensions&lt;/code&gt; to confirm that the CapSolver extension is listed and active:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agent-browser &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/capsolver-extension &lt;span class="nt"&gt;--headed&lt;/span&gt; open chrome://extensions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In headless mode, check the browser console for CapSolver's log messages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agent-browser &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/capsolver-extension open https://example.com
agent-browser console
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Practical Usage
&lt;/h2&gt;

&lt;p&gt;Once configured, using CapSolver with Agent Browser is straightforward; simply include the &lt;code&gt;--extension&lt;/code&gt; flag and a wait command.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Fundamental Principle
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Avoid implementing CAPTCHA-specific logic.&lt;/strong&gt; Instead, introduce a wait command after navigating to CAPTCHA-protected pages, allowing the extension to perform its function.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario 1: Form Submission Protected by reCAPTCHA
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Navigate to the target page with the CapSolver extension loaded&lt;/span&gt;
agent-browser &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/capsolver-extension open https://example.com/contact

&lt;span class="c"&gt;# Capture a snapshot to identify form elements&lt;/span&gt;
agent-browser snapshot &lt;span class="nt"&gt;-i&lt;/span&gt;
&lt;span class="c"&gt;# Expected Output:&lt;/span&gt;
&lt;span class="c"&gt;# - textbox "Name" [ref=e1]&lt;/span&gt;
&lt;span class="c"&gt;# - textbox "Email" [ref=e2]&lt;/span&gt;
&lt;span class="c"&gt;# - textbox "Message" [ref=e3]&lt;/span&gt;
&lt;span class="c"&gt;# - button "Submit" [ref=e4]&lt;/span&gt;

&lt;span class="c"&gt;# Populate the form fields&lt;/span&gt;
agent-browser fill @e1 &lt;span class="s2"&gt;"John Doe"&lt;/span&gt;
agent-browser fill @e2 &lt;span class="s2"&gt;"john@example.com"&lt;/span&gt;
agent-browser fill @e3 &lt;span class="s2"&gt;"Hello, I have a question about your services."&lt;/span&gt;

&lt;span class="c"&gt;# Allow CapSolver to resolve the CAPTCHA&lt;/span&gt;
agent-browser &lt;span class="nb"&gt;wait &lt;/span&gt;30000

&lt;span class="c"&gt;# Submit the form—the CAPTCHA token will have already been injected&lt;/span&gt;
agent-browser click @e4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Scenario 2: Login Page Featuring Cloudflare Turnstile
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Access the login page&lt;/span&gt;
agent-browser &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/capsolver-extension open https://example.com/login

&lt;span class="c"&gt;# Identify interactive elements&lt;/span&gt;
agent-browser snapshot &lt;span class="nt"&gt;-i&lt;/span&gt;

&lt;span class="c"&gt;# Input credentials&lt;/span&gt;
agent-browser find label &lt;span class="s2"&gt;"Email"&lt;/span&gt; fill &lt;span class="s2"&gt;"me@example.com"&lt;/span&gt;
agent-browser find label &lt;span class="s2"&gt;"Password"&lt;/span&gt; fill &lt;span class="s2"&gt;"mypassword123"&lt;/span&gt;

&lt;span class="c"&gt;# Wait for Turnstile resolution&lt;/span&gt;
agent-browser &lt;span class="nb"&gt;wait &lt;/span&gt;20000

&lt;span class="c"&gt;# Click the login button—Turnstile will have been handled&lt;/span&gt;
agent-browser find role button click &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"Log in"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Scenario 3: Data Extraction from Protected Web Pages
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Navigate to the protected page&lt;/span&gt;
agent-browser &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/capsolver-extension open https://example.com/data

&lt;span class="c"&gt;# Wait for any CAPTCHA challenge to be cleared&lt;/span&gt;
agent-browser &lt;span class="nb"&gt;wait &lt;/span&gt;30000

&lt;span class="c"&gt;# Extract page content using a snapshot&lt;/span&gt;
agent-browser snapshot &lt;span class="nt"&gt;--json&lt;/span&gt;

&lt;span class="c"&gt;# Alternatively, retrieve specific element text&lt;/span&gt;
agent-browser get text &lt;span class="s2"&gt;"body"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Scenario 4: Chained Commands (Single Line Execution)
&lt;/h3&gt;

&lt;p&gt;Agent Browser supports command chaining for streamlined automation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Open a page, wait for CAPTCHA, fill a form, and submit—all in one command sequence&lt;/span&gt;
agent-browser &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/capsolver-extension open https://example.com/contact &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  agent-browser &lt;span class="nb"&gt;wait &lt;/span&gt;30000 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  agent-browser snapshot &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  agent-browser fill @e1 &lt;span class="s2"&gt;"John Doe"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  agent-browser fill @e2 &lt;span class="s2"&gt;"john@example.com"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  agent-browser click @e3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Scenario 5: Scripted Workflow with JSON Output
&lt;/h3&gt;

&lt;p&gt;For AI agent pipelines, utilize &lt;code&gt;--json&lt;/code&gt; for machine-readable output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;EXTENSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/capsolver-extension

&lt;span class="c"&gt;# Open page with extension&lt;/span&gt;
agent-browser &lt;span class="nt"&gt;--extension&lt;/span&gt; &lt;span class="nv"&gt;$EXTENSION&lt;/span&gt; open https://example.com/protected-page

&lt;span class="c"&gt;# Wait for CAPTCHA to resolve&lt;/span&gt;
agent-browser &lt;span class="nb"&gt;wait &lt;/span&gt;30000

&lt;span class="c"&gt;# Obtain snapshot as JSON for AI processing&lt;/span&gt;
&lt;span class="nv"&gt;SNAPSHOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;agent-browser snapshot &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Parse references and interact&lt;/span&gt;
agent-browser click @e2
agent-browser get text &lt;span class="s2"&gt;"body"&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Recommended Waiting Durations
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CAPTCHA Type&lt;/th&gt;
&lt;th&gt;Typical Resolution Time&lt;/th&gt;
&lt;th&gt;Suggested Wait Period&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v2 (checkbox)&lt;/td&gt;
&lt;td&gt;5-15 seconds&lt;/td&gt;
&lt;td&gt;30-60 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v2 (invisible)&lt;/td&gt;
&lt;td&gt;5-15 seconds&lt;/td&gt;
&lt;td&gt;30 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v3&lt;/td&gt;
&lt;td&gt;3-10 seconds&lt;/td&gt;
&lt;td&gt;20-30 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Turnstile&lt;/td&gt;
&lt;td&gt;3-10 seconds&lt;/td&gt;
&lt;td&gt;20-30 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Guidance&lt;/strong&gt;: When uncertain, a 30-second wait is generally advisable. It is preferable to wait slightly longer than to attempt submission prematurely. The additional waiting time does not negatively impact the outcome.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Behind the Scenes: How It Functions
&lt;/h2&gt;

&lt;p&gt;Here's an overview of the process when Agent Browser operates with the CapSolver extension loaded:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your Agent Browser Commands
───────────────────────────────────────────────────
agent-browser --extension       ──►  Chrome launches with extension
  ~/capsolver-extension
  open https://...
                                           │
                                           ▼
                               ┌─────────────────────────────┐
                               │  Page with CAPTCHA widget     │
                               │                               │
                               │  CapSolver Extension:         │
                               │  1. Content script detects    │
                               │     CAPTCHA on the page       │
                               │  2. Service worker calls      │
                               │     CapSolver API             │
                               │  3. Token received            │
                               │  4. Token injected into       │
                               │     hidden form field         │
                               └─────────────────────────────┘
                                           │
                                           ▼
agent-browser wait 30000         Extension resolves CAPTCHA...
                                           │
                                           ▼
agent-browser snapshot -i        Agent Browser reads elements
agent-browser click @e2          Form submits WITH valid token
                                           │
                                           ▼
                               "Verification successful!"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Extension Loading Mechanism
&lt;/h3&gt;

&lt;p&gt;When Agent Browser initiates Chrome with the &lt;code&gt;--extension&lt;/code&gt; flag:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Chrome starts with the CapSolver extension pre-loaded (utilizing &lt;code&gt;--headless=new&lt;/code&gt; in headless mode, which supports Manifest V3 extensions).&lt;/li&gt;
&lt;li&gt; The extension becomes active—its service worker begins operation, and content scripts are injected into every page.&lt;/li&gt;
&lt;li&gt; On pages containing CAPTCHAs, the content script identifies the widget, invokes the CapSolver API, and injects the solution token into the page.&lt;/li&gt;
&lt;li&gt; Agent Browser continues its normal operations—snapshots, clicks, and data extraction proceed as usual, with CAPTCHAs already addressed.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Comprehensive Configuration Reference
&lt;/h2&gt;

&lt;p&gt;Below is a complete setup guide detailing all configuration options for the Agent Browser + CapSolver integration:&lt;/p&gt;

&lt;h3&gt;
  
  
  Command-Line Interface (CLI) Flags
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agent-browser &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/capsolver-extension &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--headed&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--session-name&lt;/span&gt; my-session &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; ./browser-data &lt;span class="se"&gt;\&lt;/span&gt;
  open https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Environment Variables
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Define the extension path as an environment variable (eliminates repetitive --extension usage)&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AGENT_BROWSER_EXTENSIONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/capsolver-extension

&lt;span class="c"&gt;# Subsequent commands will automatically load the extension&lt;/span&gt;
agent-browser open https://example.com
agent-browser &lt;span class="nb"&gt;wait &lt;/span&gt;30000
agent-browser snapshot &lt;span class="nt"&gt;-i&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuration File (&lt;code&gt;agent-browser.json&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Create an &lt;code&gt;agent-browser.json&lt;/code&gt; file in your project directory to establish persistent default settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"extension"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"~/capsolver-extension"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sessionName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-project"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"headed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Available Configuration Options
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--extension &amp;lt;path&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Specifies the path to the unpacked CapSolver extension directory containing &lt;code&gt;manifest.json&lt;/code&gt;. This flag can be repeated for multiple extensions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--headed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displays the browser window for visual debugging purposes. Extensions are functional in both modes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--session-name &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Automatically saves and restores cookies and local storage across browser restarts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--profile &amp;lt;path&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Designates a persistent browser profile directory (for cookies, IndexedDB, cache).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AGENT_BROWSER_EXTENSIONS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;An environment variable alternative to the &lt;code&gt;--extension&lt;/code&gt; flag. Accepts comma-separated paths for multiple extensions.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The CapSolver API key is configured directly within the extension's &lt;code&gt;assets/config.js&lt;/code&gt; file (refer to Step 3).&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Extension Not Loading Correctly
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: CAPTCHAs are not being resolved automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Potential Causes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incorrect extension path—verify that &lt;code&gt;manifest.json&lt;/code&gt; exists in the specified directory.&lt;/li&gt;
&lt;li&gt;Extension incompatibility—ensure you are using the Chrome version of the CapSolver extension, not the Firefox version.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resolution&lt;/strong&gt;: Confirm the path and test extension loading:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Verify manifest file existence&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; ~/capsolver-extension/manifest.json

&lt;span class="c"&gt;# Test visually in headed mode&lt;/span&gt;
agent-browser &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/capsolver-extension &lt;span class="nt"&gt;--headed&lt;/span&gt; open chrome://extensions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CAPTCHA Resolution Failure (Form Submission Issues)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Potential Causes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Insufficient wait time&lt;/strong&gt;—Increase the wait duration to 60 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invalid API key&lt;/strong&gt;—Cross-reference your CapSolver dashboard for the correct key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Insufficient balance&lt;/strong&gt;—Recharge your CapSolver account credits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extension not loaded&lt;/strong&gt;—Refer to the "Extension Not Loading Correctly" section above.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Debugging with console logs:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agent-browser &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/capsolver-extension open https://example.com
agent-browser &lt;span class="nb"&gt;wait &lt;/span&gt;30000
agent-browser console  &lt;span class="c"&gt;# Inspect CapSolver messages&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Chrome Executable Not Found
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: &lt;code&gt;agent-browser&lt;/code&gt; is unable to locate a Chrome executable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resolution&lt;/strong&gt;: Execute the install command to download Chrome for Testing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agent-browser &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alternatively, specify a custom Chrome executable path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agent-browser &lt;span class="nt"&gt;--executable-path&lt;/span&gt; /path/to/chrome open https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Utilizing Multiple Extensions
&lt;/h3&gt;

&lt;p&gt;You can load several extensions by repeating the &lt;code&gt;--extension&lt;/code&gt; flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agent-browser &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/capsolver-extension &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--extension&lt;/span&gt; ~/another-extension &lt;span class="se"&gt;\&lt;/span&gt;
  open https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Best Practices for Integration
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Employ the &lt;code&gt;AGENT_BROWSER_EXTENSIONS&lt;/code&gt; environment variable.&lt;/strong&gt; Set this variable once in your shell profile or CI configuration. This ensures that every &lt;code&gt;agent-browser&lt;/code&gt; command automatically loads CapSolver without requiring the flag to be repeated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Always allocate ample wait times.&lt;/strong&gt; A more generous wait period enhances reliability. While CAPTCHAs typically resolve within 5-20 seconds, network latency, complex challenges, or retries can extend this duration. A range of 30-60 seconds is generally optimal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Maintain clean automation scripts.&lt;/strong&gt; Avoid embedding CAPTCHA-specific logic directly into your commands. The extension handles all CAPTCHA processes transparently, allowing your scripts to focus solely on navigation, interaction, and data extraction.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Regularly monitor your CapSolver balance.&lt;/strong&gt; Each CAPTCHA resolution consumes credits. Periodically check your balance at &lt;a href="https://www.capsolver.com/dashboard" rel="noopener noreferrer"&gt;capsolver.com/dashboard&lt;/a&gt; to prevent service interruptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Utilize session persistence for recurring visits.&lt;/strong&gt; Employ &lt;code&gt;--session-name&lt;/code&gt; or &lt;code&gt;--profile&lt;/code&gt; to retain cookies across multiple browser sessions. This can potentially reduce the frequency of CAPTCHA encounters, as the website may recognize returning sessions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Leverage headless mode in production environments.&lt;/strong&gt; Unlike Playwright, Agent Browser fully supports extensions in headless mode. This eliminates the need for Xvfb or virtual displays on servers, allowing direct execution of your commands.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The integration of Vercel Agent Browser with CapSolver provides an invisible CAPTCHA-solving capability for the fastest, most AI-optimized browser automation CLI available. Instead of developing intricate CAPTCHA-handling code, you simply need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Download and configure the CapSolver extension with your API key.&lt;/li&gt;
&lt;li&gt; Add &lt;code&gt;--extension ~/capsolver-extension&lt;/code&gt; to your Agent Browser commands.&lt;/li&gt;
&lt;li&gt; Include a wait command before interacting with forms protected by CAPTCHAs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The CapSolver Chrome extension manages the entire process—detecting CAPTCHAs, resolving them via the CapSolver API, and injecting tokens into the page. Your Agent Browser commands can thus remain entirely oblivious to CAPTCHA challenges.&lt;/p&gt;

&lt;p&gt;Furthermore, in contrast to Playwright-based solutions that often necessitate headed mode and virtual displays, Agent Browser supports extensions in headless mode natively. This makes it the most straightforward approach for achieving CAPTCHA-free automation in production settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to begin?&lt;/strong&gt; &lt;a href="https://www.capsolver.com/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=agent-browser-capsolver"&gt;Sign up for CapSolver&lt;/a&gt; and use the bonus code &lt;strong&gt;AGENTBROWSER&lt;/strong&gt; to receive an additional 6% on your initial top-up!&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvzrqax7kzr00l6es7j0h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvzrqax7kzr00l6es7j0h.png" width="527" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions (FAQ)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is CAPTCHA-specific code necessary?
&lt;/h3&gt;

&lt;p&gt;No. The CapSolver extension operates entirely in the background within Agent Browser's Chrome instance. By simply adding an &lt;code&gt;agent-browser wait 30000&lt;/code&gt; command before submitting forms, the extension automatically handles detection, resolution, and token injection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can this be executed in headless mode?
&lt;/h3&gt;

&lt;p&gt;Yes! This represents a significant advantage over Playwright-based solutions. Agent Browser utilizes Chrome's &lt;code&gt;--headless=new&lt;/code&gt; mode, which supports Manifest V3 extensions, eliminating the need for Xvfb or virtual display setups.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are Playwright or Node.js required?
&lt;/h3&gt;

&lt;p&gt;No. Agent Browser is a self-contained Rust binary. Node.js is only necessary for the &lt;code&gt;npm install&lt;/code&gt; step. The browser daemon runs natively without any JavaScript runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which CAPTCHA types does CapSolver support?
&lt;/h3&gt;

&lt;p&gt;CapSolver supports a wide range of CAPTCHA types, including reCAPTCHA v2 (checkbox and invisible), reCAPTCHA v3, Cloudflare Turnstile, and AWS WAF CAPTCHA, among others. The extension automatically identifies and resolves the appropriate CAPTCHA type.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the cost of CapSolver?
&lt;/h3&gt;

&lt;p&gt;CapSolver offers competitive pricing structures based on CAPTCHA type and volume. For current pricing details, please visit &lt;a href="https://www.capsolver.com" rel="noopener noreferrer"&gt;capsolver.com&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Vercel Agent Browser free to use?
&lt;/h3&gt;

&lt;p&gt;Yes. Agent Browser is an open-source project released under the Apache 2.0 license. The CLI and all its features are available for free. Further information can be found on its &lt;a href="https://github.com/vercel-labs/agent-browser" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the recommended waiting period for CAPTCHA resolution?
&lt;/h3&gt;

&lt;p&gt;For most CAPTCHAs, a waiting period of 30-60 seconds is sufficient. Actual resolution times typically range from 5-20 seconds, but an extended buffer ensures greater reliability. When in doubt, use &lt;code&gt;agent-browser wait 30000&lt;/code&gt; for 30 seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is this compatible with AI agents?
&lt;/h3&gt;

&lt;p&gt;Absolutely. Agent Browser was specifically developed for AI agents (&lt;a href="https://www.capsolver.com/blog/AI/best-ai-agents" rel="noopener noreferrer"&gt;explore various AI agent options here&lt;/a&gt;). It offers &lt;code&gt;--json&lt;/code&gt; for machine-readable output, a snapshot-ref workflow for precise element selection, and command chaining for efficient multi-step automation. The CapSolver extension operates transparently alongside your agent's commands.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>browser</category>
      <category>captcha</category>
    </item>
    <item>
      <title>CAPTCHA AI Powered by Large Models: A Deep Dive for Enterprise Scenarios</title>
      <dc:creator>luisgustvo</dc:creator>
      <pubDate>Mon, 16 Mar 2026 07:45:43 +0000</pubDate>
      <link>https://dev.to/luisgustvo/captcha-ai-powered-by-large-models-a-deep-dive-for-enterprise-scenarios-433d</link>
      <guid>https://dev.to/luisgustvo/captcha-ai-powered-by-large-models-a-deep-dive-for-enterprise-scenarios-433d</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fzlj031ztuzzk4osw87.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fzlj031ztuzzk4osw87.png" alt="CAPTCHA AI Powered by Large Models" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CAPTCHA technology is undergoing a significant transformation, driven by advancements in AI visual recognition. While many still perceive CAPTCHA as a mere &lt;br&gt;
"component," in the dynamic landscape of automated processing, it has evolved into a sophisticated battleground between advanced AI visual technology and verification mechanisms.&lt;/p&gt;

&lt;h2&gt;
  
  
  I. CAPTCHA Evolution: From OCR to Advanced AI Visual Recognition
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The OCR Era (2000-2010)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Technical Foundations&lt;/strong&gt;&lt;br&gt;
Early internet challenges like spam and automated abuse led to the rise of systems like reCAPTCHA. Its fundamental principle was to leverage human visual recognition superiority to create machine-resistant barriers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Implementations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Distorted English character strings (4-6 digits)&lt;/li&gt;
&lt;li&gt;  Introduction of interference lines, noise, and varied background textures&lt;/li&gt;
&lt;li&gt;  Manipulation of color contrast to increase difficulty&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advancements in Automated Recognition&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Technical Method&lt;/th&gt;
&lt;th&gt;Recognition Efficiency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2003-2005&lt;/td&gt;
&lt;td&gt;Traditional OCR (e.g., Tesseract) + Rule-based Correction&lt;/td&gt;
&lt;td&gt;30-50%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2005-2008&lt;/td&gt;
&lt;td&gt;Image Preprocessing (denoising, binarization, segmentation) + Support Vector Machines (SVM)&lt;/td&gt;
&lt;td&gt;60-80%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2008-2010&lt;/td&gt;
&lt;td&gt;Convolutional Neural Networks (Improved LeNet-5 architectures)&lt;/td&gt;
&lt;td&gt;90%+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Pivotal Moment&lt;/strong&gt;&lt;br&gt;
Research published in &lt;strong&gt;Science&lt;/strong&gt; in 2008 highlighted the rapid improvement in machine recognition rates for text-based CAPTCHAs [1]. This directly catalyzed the development of the second generation of CAPTCHA systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Insight&lt;/strong&gt;: Relying on fixed character sets and predictable distortion rules inevitably leads to collectible datasets, making them vulnerable to automated recognition.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Behavioral and Image Challenges (2010-2020)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A Shift in Paradigm&lt;/strong&gt;&lt;br&gt;
Recognizing the trade-off between increased recognition difficulty and user experience, CAPTCHA designers began incorporating "human-exclusive capabilities"—semantic understanding and behavioral patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analysis of Leading Commercial Systems&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;reCAPTCHA (Google)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;v2 (2014)&lt;/strong&gt;: Introduced the "I'm not a robot" checkbox, backed by invisible risk analysis.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Core Technology&lt;/strong&gt;: A sophisticated Risk Analysis Engine, evaluating over 100 signals including cookies, device history, subtle mouse movements, and page interaction timing.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Image Challenges&lt;/strong&gt;: Utilized real-world scenes from Street View (e.g., traffic lights, crosswalks, buses), effectively crowdsourcing data for autonomous driving model training.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GCaptcha (Intuition Machines)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Differentiated Approach&lt;/strong&gt;: Emphasized privacy, claiming no tracking of personal user data.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Technical Features&lt;/strong&gt;: Employed a distributed verification architecture and client-specific challenge images, establishing a "verification as labeling" business model.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Verification Design&lt;/strong&gt;: Featured dynamic difficulty adjustment, adapting challenge types in real-time based on automated processing pressure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GeeTest&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Key Innovation&lt;/strong&gt;: Pioneered slider verification and jigsaw puzzle restoration, transforming recognition tasks into interactive operations.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Behavioral Data Collection&lt;/strong&gt;: Captured detailed trajectory coordinate sequences (typically 50-200 points), velocity curves, acceleration changes, and mobile touch events.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Risk Control&lt;/strong&gt;: Provided not just pass/fail outcomes, but also a "human confidence score" for nuanced business decision-making.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Evolution of Automated Processing Technology&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Automation Type&lt;/th&gt;
&lt;th&gt;Technical Method&lt;/th&gt;
&lt;th&gt;Verifier's Response&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Automated Image Recognition&lt;/td&gt;
&lt;td&gt;Object Detection (YOLO/Faster R-CNN) + Semantic Segmentation&lt;/td&gt;
&lt;td&gt;Dynamic image generation, adversarial samples&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slider Trajectory Simulation&lt;/td&gt;
&lt;td&gt;Physics engine simulation (Bezier curves, noise injection)&lt;/td&gt;
&lt;td&gt;Time-series analysis, biometric recognition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crowdsourced Platform Processing&lt;/td&gt;
&lt;td&gt;Crowdsourcing platforms (cost \$0.5-2/thousand)&lt;/td&gt;
&lt;td&gt;Rate limiting, correlation analysis, reputation systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser Automation&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://www.dev.to/selenium"&gt;Selenium&lt;/a&gt;, &lt;a href="https://www.dev.to/puppeteer"&gt;Puppeteer&lt;/a&gt;, &lt;a href="https://www.dev.to/playwright"&gt;Playwright&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Browser fingerprint detection, automated feature recognition&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Persistent Challenges&lt;/strong&gt;&lt;br&gt;
Second-generation systems operated on the premise that automated programs couldn't simulate human behavior at scale. However, deep learning advancements have challenged this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Trajectory Generation&lt;/strong&gt;: Generative Adversarial Networks (GANs) can now learn and replicate the dynamic characteristics of real user mouse movements.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Image Understanding&lt;/strong&gt;: Breakthroughs in &lt;strong&gt;Vision Transformers (ViT)&lt;/strong&gt; on ImageNet have elevated machine vision capabilities to near-human levels [2].&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Browser Fingerprinting&lt;/strong&gt;: Randomization techniques for automated framework fingerprints are becoming increasingly sophisticated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Core Insight&lt;/strong&gt;: Any fixed challenge, regardless of its cleverness, is essentially an "exam with standard answers." Once these answers are collected and learned, automated programs can eventually bypass them.&lt;/p&gt;

&lt;h2&gt;
  
  
  II. The Landscape of AI Visual Recognition Technology: Developments and Challenges
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Industrialized Automated Recognition Systems
&lt;/h3&gt;

&lt;p&gt;Modern CAPTCHA automated recognition has matured into a comprehensive industrialized system, characterized by highly specialized technology stacks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Layer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Collection Systems&lt;/strong&gt;: Distributed crawler clusters continuously fetch challenges from target sites.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Labeling Factories&lt;/strong&gt;: Employ low-cost data labeling teams or semi-automated tools (e.g., SAM-assisted) for efficient annotation.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Data Augmentation&lt;/strong&gt;: Techniques like rotation, cropping, color transformation, and adversarial noise expand training set diversity and robustness.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Model Layer&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task Type&lt;/th&gt;
&lt;th&gt;Model Architecture&lt;/th&gt;
&lt;th&gt;Open-source Implementation Reference&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Character Recognition&lt;/td&gt;
&lt;td&gt;CRNN + CTC&lt;/td&gt;
&lt;td&gt;PaddleOCR, EasyOCR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Object Detection&lt;/td&gt;
&lt;td&gt;YOLOv8, RT-DETR&lt;/td&gt;
&lt;td&gt;Ultralytics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image Classification&lt;/td&gt;
&lt;td&gt;ViT, ConvNeXt&lt;/td&gt;
&lt;td&gt;Hugging Face Transformers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slider Trajectory&lt;/td&gt;
&lt;td&gt;Seq2Seq, Diffusion Model&lt;/td&gt;
&lt;td&gt;Community open-source solutions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multimodal Understanding&lt;/td&gt;
&lt;td&gt;CLIP, LLaVA&lt;/td&gt;
&lt;td&gt;OpenAI CLIP, Alibaba Qwen-VL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Engineering Layer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Inference Optimization&lt;/strong&gt;: Technologies like TensorRT, ONNX Runtime, and OpenVINO ensure millisecond-level response times.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Service Architecture&lt;/strong&gt;: Kubernetes orchestration and auto-scaling support high-concurrency requests.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Automated Bypass&lt;/strong&gt;: Advanced techniques include browser fingerprint randomization, IP proxy pools, and behavioral rhythm simulation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The OpenClaw Phenomenon&lt;/strong&gt;&lt;br&gt;
Projects like OpenClaw exemplify the "democratization of AI visual recognition tools":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Low Barrier&lt;/strong&gt;: Pre-trained models and configuration files enable targeting specific objectives with ease.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Modularity&lt;/strong&gt;: Decoupling of data collection, model training, inference services, and result submission.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Community-Driven&lt;/strong&gt;: Facilitates sharing of recognition samples, model weights, and iterative technical solutions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Impact on Enterprises&lt;/strong&gt;: The ease with which ordinary developers can now adopt automated recognition tools significantly elevates the technical requirements for CAPTCHA verification mechanisms, a task previously reserved for specialized security teams.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Verification Mechanisms: From Static Challenges to Dynamic Risk Control
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Paradigm Shift: The Rise of Behavioral Modeling&lt;/strong&gt;&lt;br&gt;
The fundamental shift in enterprise-grade CAPTCHA systems is from merely "verifying answer correctness" to "assessing behavioral authenticity." This mirrors the evolution of financial risk control from rigid rule engines to adaptive machine learning scorecards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-dimensional Behavioral Fingerprint System&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Data Collection Dimension&lt;/th&gt;
&lt;th&gt;Technical Indicators&lt;/th&gt;
&lt;th&gt;AI Analysis Method&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mouse Dynamics&lt;/td&gt;
&lt;td&gt;Trajectory point density, velocity curves, acceleration distribution, angle changes&lt;/td&gt;
&lt;td&gt;LSTM/Transformer time-series modeling, comparison with real user baseline distribution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keyboard Interaction&lt;/td&gt;
&lt;td&gt;Key press intervals (Keydown-Keyup), key combination patterns, correction behaviors (Backspace frequency)&lt;/td&gt;
&lt;td&gt;Rhythm analysis, detection of uniform interval characteristics of automated tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Touch Events (Mobile)&lt;/td&gt;
&lt;td&gt;Pressure value, contact area, sliding inertia, multi-touch patterns&lt;/td&gt;
&lt;td&gt;Biometric recognition, distinguishing human fingers from robotic arms/simulators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visual Attention&lt;/td&gt;
&lt;td&gt;Eye tracking (if permitted), page scrolling patterns, element focus timing&lt;/td&gt;
&lt;td&gt;Attention heatmap analysis, detection of non-human browsing patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cognitive Reaction Time&lt;/td&gt;
&lt;td&gt;Delay from challenge presentation to first interaction, decision time distribution&lt;/td&gt;
&lt;td&gt;Statistical testing, automated tools are often too fast or too slow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environmental Context&lt;/td&gt;
&lt;td&gt;Device posture (gyroscope), battery status, network latency fluctuations&lt;/td&gt;
&lt;td&gt;Anomaly detection, identification of virtual machines/simulators/cloud phones&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The Pivotal Role of Large Models&lt;/strong&gt;&lt;br&gt;
Traditional rule engines struggle with high-dimensional, non-linear behavioral sequences. Large models, particularly those based on the Transformer architecture, offer significant breakthroughs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Representation Learning&lt;/strong&gt;: They can encode raw behavioral sequences into low-dimensional embeddings, capturing deep, intricate patterns.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Transfer Learning&lt;/strong&gt;: Pre-training on vast unsupervised behavioral datasets allows for fine-tuning with smaller samples, enabling rapid adaptation to new scenarios.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Multimodal Fusion&lt;/strong&gt;: Large models can unify the processing of image, time-series, and categorical features, leading to end-to-end optimization.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  III. Why Large Model CAPTCHA Visual Recognition Excels in Enterprise Scenarios
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Data Flywheel: Enterprises' Unique Competitive Advantage&lt;/strong&gt;&lt;br&gt;
In an era dominated by data, enterprises possess a distinct advantage in combating automated threats.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comparison of Data Availability: Automated Recognizer vs. Enterprise Verifier&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Data Type&lt;/th&gt;
&lt;th&gt;Available to Automated Recognizer&lt;/th&gt;
&lt;th&gt;Actually Owned by Enterprise Verifier&lt;/th&gt;
&lt;th&gt;Strategic Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Successful Recognition Cases&lt;/td&gt;
&lt;td&gt;✅ Limited samples (requires costly collection)&lt;/td&gt;
&lt;td&gt;✅ Massive failed cases (automated recognition logs)&lt;/td&gt;
&lt;td&gt;Training "automated pattern recognition" models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real User Behavior&lt;/td&gt;
&lt;td&gt;❌ Difficult to obtain at scale&lt;/td&gt;
&lt;td&gt;✅ Full business traffic&lt;/td&gt;
&lt;td&gt;Building "human behavior baselines"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automated Tool Fingerprints&lt;/td&gt;
&lt;td&gt;❌ Passively discovered&lt;/td&gt;
&lt;td&gt;✅ Proactive detection + honeypot collection&lt;/td&gt;
&lt;td&gt;Identifying automated framework characteristics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time-series Correlated Data&lt;/td&gt;
&lt;td&gt;❌ Single-point perspective&lt;/td&gt;
&lt;td&gt;✅ Global view across business lines&lt;/td&gt;
&lt;td&gt;Correlation analysis, identifying organized automated behavior&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The Continuous Learning Loop&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;[Production Traffic] → [Behavioral Data Collection] → [Feature Engineering] → [Model Inference] → [Risk Scoring]&lt;br&gt;
↑ ↓&lt;br&gt;
[Model Update] ← [Performance Evaluation] ← [Labeling Feedback] ← [Business Decision]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65t1mz3295tzgp7jsmkp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65t1mz3295tzgp7jsmkp.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Online Learning&lt;/strong&gt;: Model parameters are fine-tuned in real-time with new data, eliminating the need for full retraining cycles.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Active Learning&lt;/strong&gt;: High-value samples are intelligently selected for manual labeling, optimizing the return on investment for labeling efforts.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Adversarial Training&lt;/strong&gt;: Robustness is enhanced by using samples from automated recognition attempts as negative examples during training.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Deep Integration with Business Risk Control&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Integration Scenario&lt;/th&gt;
&lt;th&gt;Technical Implementation&lt;/th&gt;
&lt;th&gt;Business Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Login Protection&lt;/td&gt;
&lt;td&gt;CAPTCHA score + device fingerprint + IP reputation → unified risk score&lt;/td&gt;
&lt;td&gt;Precisely intercept automated logins, reduce false positives&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Registration Anti-fraud&lt;/td&gt;
&lt;td&gt;Abnormal verification behavior → trigger phone/email secondary verification&lt;/td&gt;
&lt;td&gt;Identify batch registrations, protect user pool quality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Marketing Activities&lt;/td&gt;
&lt;td&gt;Flash sales scenarios, real-time human-machine recognition → dynamic rate limiting&lt;/td&gt;
&lt;td&gt;Prevent automated snatching, protect real user rights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payment Security&lt;/td&gt;
&lt;td&gt;Mandatory verification before high-risk operations + behavioral review&lt;/td&gt;
&lt;td&gt;Block automated fraudulent transactions, reduce asset loss&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For more insights on modern automation, explore guides on why web automation often struggles with CAPTCHA challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  IV. Private Deployment: An Evolutionary Path
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;From Experimentation to Production: A Typical Journey&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase One: Proof of Concept (PoC, 1-2 months)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Scenario&lt;/strong&gt;: Security teams assess existing CAPTCHA vulnerabilities, or business units report poor verification experiences.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Action&lt;/strong&gt;: Simulate automated recognition using tools like OpenClaw to quantify recognition cost and success rates.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Output&lt;/strong&gt;: A feasibility report on automated recognition, preliminary findings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Phase Two: Pilot Deployment (3-6 months)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Technology Stack&lt;/strong&gt;: Typically involves open-source models (e.g., YOLO + ResNet) combined with an in-house labeling team.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Core Challenges&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;  Poor model generalization, leading to rapid failure when new automation types emerge.&lt;/li&gt;
&lt;li&gt;  High inference latency, negatively impacting user experience.&lt;/li&gt;
&lt;li&gt;  Reliance solely on image recognition, lacking behavioral analysis dimensions.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  &lt;strong&gt;Key Decision&lt;/strong&gt;: Evaluate whether to invest in building an MLOps platform or opt for a commercial solution.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Phase Three: Production at Scale (6-12 months)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Architecture Upgrade&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Inference Layer&lt;/strong&gt;: Implementation of Triton Inference Server + TensorRT for GPU utilization optimization.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Data Layer&lt;/strong&gt;: Establishment of a real-time feature store (e.g., Redis/Flink) and an offline data lake (e.g., Iceberg/Delta Lake).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Training Layer&lt;/strong&gt;: Utilization of Kubeflow/MLflow for managing experiments and model versions.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  &lt;strong&gt;Organizational Development&lt;/strong&gt;: Formation of a dedicated AI security team, comprising algorithm engineers, backend engineers, and security analysts.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Phase Four: Platform Operation (1-2 years)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Capability Output&lt;/strong&gt;: CAPTCHA service functions as an internal security middleware, supporting multiple business lines.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Ecosystem Integration&lt;/strong&gt;: Linkage with threat intelligence, Security Operations Centers (SOC), and Security Information and Event Management (SIEM) systems.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Continuous Verification&lt;/strong&gt;: Establishment of red-team/blue-team verification mechanisms, regularly simulating APT-level automated recognition drills.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  V. Enterprise vs. Non-Enterprise Solutions: A Comprehensive Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Comparison Dimension&lt;/th&gt;
&lt;th&gt;Non-Enterprise Solutions (e.g., OpenClaw / Traditional OCR)&lt;/th&gt;
&lt;th&gt;Enterprise CAPTCHA AI Visual Recognition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deployment Complexity&lt;/td&gt;
&lt;td&gt;✅ Simple, often Docker one-click startup&lt;/td&gt;
&lt;td&gt;❌ Complex, requires MLOps platform support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Initial Cost&lt;/td&gt;
&lt;td&gt;✅ Low, single GPU often sufficient&lt;/td&gt;
&lt;td&gt;❌ High, requires cluster + labeling team&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model Updates&lt;/td&gt;
&lt;td&gt;❌ Fixed weights, easily targeted by automated recognition&lt;/td&gt;
&lt;td&gt;✅ Online learning, continuous evolution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Behavioral Analysis&lt;/td&gt;
&lt;td&gt;❌ Pure image recognition, no behavioral dimension&lt;/td&gt;
&lt;td&gt;✅ Multimodal fusion, precise human-machine differentiation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Risk Control Linkage&lt;/td&gt;
&lt;td&gt;❌ Isolated system, no contextual awareness&lt;/td&gt;
&lt;td&gt;✅ Deep integration with WAF, device fingerprints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High Availability&lt;/td&gt;
&lt;td&gt;❌ Single point of deployment, no SLA guarantee&lt;/td&gt;
&lt;td&gt;✅ Multi-active architecture, elastic scaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compliance Support&lt;/td&gt;
&lt;td&gt;❌ Weak audit logs, privacy compliance&lt;/td&gt;
&lt;td&gt;✅ GDPR/CCPA adaptation, complete audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applicable Scenarios&lt;/td&gt;
&lt;td&gt;Small and medium businesses, internal testing, short-term projects&lt;/td&gt;
&lt;td&gt;Large-scale production, finance, e-commerce, government affairs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  VI. The Future Form: AI Risk Control Infrastructure
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Technological Evolution Trends&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Evolution Direction&lt;/th&gt;
&lt;th&gt;Current State&lt;/th&gt;
&lt;th&gt;Next 3-5 Years&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Verification Method&lt;/td&gt;
&lt;td&gt;Passive challenges (user required to perform actions)&lt;/td&gt;
&lt;td&gt;Invisible CAPTCHA, based on background behavioral analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model Architecture&lt;/td&gt;
&lt;td&gt;Specialized small models (CNN/LSTM)&lt;/td&gt;
&lt;td&gt;Multimodal large models (GPT-4V-like architecture fine-tuning)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Challenge Generation&lt;/td&gt;
&lt;td&gt;Fixed question bank + limited variations&lt;/td&gt;
&lt;td&gt;Generative AI real-time synthesis (one question per person, every question different)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decision Logic&lt;/td&gt;
&lt;td&gt;Binary classification (human/machine)&lt;/td&gt;
&lt;td&gt;Continuous risk scoring + dynamic strategy orchestration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verification Mode&lt;/td&gt;
&lt;td&gt;Single-point verification&lt;/td&gt;
&lt;td&gt;Federated learning collaboration, industry-level automated recognition intelligence sharing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The Imagination Space for Generative CAPTCHA&lt;/strong&gt;&lt;br&gt;
Utilizing Diffusion Models or GANs to generate verification content in real-time presents exciting possibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Advantages&lt;/strong&gt;: Eliminates the need for pre-stored question banks, preventing automated recognizers from collecting training data in advance.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Challenges&lt;/strong&gt;: Ensuring consistent generation quality (avoiding samples difficult for humans to recognize) and optimizing inference costs.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Frontier Research&lt;/strong&gt;: Industry speculation suggests that systems like &lt;strong&gt;reCAPTCHA v4&lt;/strong&gt; may incorporate generative technology [3].&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  VII. Recommendations for Technical Decision-Makers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time Dimension&lt;/th&gt;
&lt;th&gt;Action Item&lt;/th&gt;
&lt;th&gt;Key Milestone&lt;/th&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Short-term (1-3 months)&lt;/td&gt;
&lt;td&gt;Automated Recognition Surface Assessment&lt;/td&gt;
&lt;td&gt;Complete OpenClaw simulated automated recognition, quantify current CAPTCHA MTBF&lt;/td&gt;
&lt;td&gt;Establish risk awareness, secure resource investment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring System Construction&lt;/td&gt;
&lt;td&gt;Deploy automated recognition detection rules, identify automated traffic characteristics&lt;/td&gt;
&lt;td&gt;From "passive response" to "visible recognition"&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mid-term (3-12 months)&lt;/td&gt;
&lt;td&gt;Data Infrastructure&lt;/td&gt;
&lt;td&gt;Build behavioral data collection pipelines, accumulate 10 million+ labeled samples&lt;/td&gt;
&lt;td&gt;Possess the data foundation for training production-grade models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model Iteration and Launch&lt;/td&gt;
&lt;td&gt;First deep learning model A/B testing, verify recognition defense effectiveness&lt;/td&gt;
&lt;td&gt;Prove technical feasibility, build team confidence&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-term (1-2 years)&lt;/td&gt;
&lt;td&gt;Platformization&lt;/td&gt;
&lt;td&gt;CAPTCHA service SLA reaches 99.99%, supports 100,000 QPS&lt;/td&gt;
&lt;td&gt;Become a core security infrastructure for the company&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Security Strategy&lt;/td&gt;
&lt;td&gt;Integrate into a unified risk control platform, link with anti-fraud&lt;/td&gt;
&lt;td&gt;Form a multi-dimensional AI verification system&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  VIII. CapSolver's AI Visual Recognition Capabilities
&lt;/h2&gt;

&lt;p&gt;As a technology provider specializing in efficient and stable AI visual recognition services, CapSolver offers significant advantages in image CAPTCHA recognition and custom solver training:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Extensive CAPTCHA Support&lt;/strong&gt;: CapSolver has highly optimized recognition algorithms for a wide range of mainstream and complex image CAPTCHAs, including image classification and object detection types.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Rapid Adaptation&lt;/strong&gt;: Leveraging advanced large visual model technology, CapSolver achieves few-shot learning and rapid fine-tuning, enabling quick adaptation to new CAPTCHA challenges.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Enterprise-Grade API&lt;/strong&gt;: Provides stable, highly available enterprise-grade API interfaces that support high-concurrency requests, ensuring millisecond-level responses for large-scale automated data collection.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Custom Solver Training&lt;/strong&gt;: Offers customized model training services for specific visual recognition needs, helping enterprises build exclusive, high-precision CAPTCHA recognition solutions.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Use code &lt;code&gt;CAP26&lt;/code&gt; when signing up at &lt;a href="https://www.dev.to/capsolver"&gt;CapSolver&lt;/a&gt; to receive bonus credits!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  IX. Further Reading and Industry References
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource Type&lt;/th&gt;
&lt;th&gt;Recommended Content&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Open Source Projects&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.dev.to/openclaw-capsolver"&gt;&lt;strong&gt;OpenClaw &amp;amp; CapSolver&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Understanding automated recognition technology stacks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Industry Reports&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.dev.to/gartner-fraud-detection"&gt;&lt;strong&gt;Gartner Market Guide for Fraud Detection&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reference for commercial solution selection&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  X. Conclusion
&lt;/h2&gt;

&lt;p&gt;With the rapid advancement of AI, CAPTCHA recognition has evolved beyond a simple technical hurdle to become a critical capability for enterprises seeking to acquire public data and ensure business continuity. AI visual large models, with their superior complex scene understanding, powerful generalization capabilities, and efficient scalability, offer unprecedented solutions for enterprise-level automated recognition. CapSolver, with its deep expertise in AI visual recognition and enterprise-grade service capabilities, aims to be a trusted partner, helping enterprises efficiently and compliantly navigate various CAPTCHA challenges and focus on core business value.&lt;/p&gt;

&lt;h2&gt;
  
  
  XI. Frequently Asked Questions (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q1: How do Large Visual Models (LVMs) differ from traditional CNNs in CAPTCHA recognition?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A1: Unlike traditional CNNs that rely on local feature extraction, LVMs utilize architectures like Vision Transformers (ViT) to capture global context and semantic meaning. This allows them to understand complex scenes and generalize to new, unseen CAPTCHA styles with much higher accuracy and minimal additional training.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q2: What is "Few-shot Learning" in the context of AI-based CAPTCHA solvers?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A2: Few-shot learning refers to the ability of a pre-trained AI model to adapt to a new task (like a new type of CAPTCHA) using only a very small number of labeled examples. This is a core advantage of large models, enabling rapid deployment against evolving verification mechanisms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q3: What types of image CAPTCHAs does CapSolver support?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A3: CapSolver has deeply optimized its recognition algorithms for mainstream and complex image CAPTCHAs, supporting types including but not limited to image classification and object detection. Check the image Solution: &lt;a href="https://www.dev.to/imagetotext"&gt;Imagetotext&lt;/a&gt; &amp;amp; &lt;a href="https://www.dev.to/visionengine"&gt;VisionEngine&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q4: How does CapSolver ensure the accuracy and stability of recognition?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A4: CapSolver is based on advanced large visual model technology, continuously optimizing model performance through a continuous learning loop and online learning mechanisms. Additionally, we provide enterprise-grade APIs and a high-concurrency architecture, ensuring millisecond-level responses and 99.9% availability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q5: Does CapSolver's service support private deployment?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A5: CapSolver offers flexible deployment options, including cloud services and private deployment, to meet the security and compliance needs of different enterprises. Private deployment solutions can be customized based on the enterprise's specific architecture and resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;[1] Science. (2008). &lt;em&gt;Research on machine recognition rates for text-based CAPTCHAs&lt;/em&gt;. &lt;a href="https://www.science.org/doi/10.1126/science.1160379" rel="noopener noreferrer"&gt;https://www.science.org/doi/10.1126/science.1160379&lt;/a&gt;&lt;br&gt;
[2] ArXiv. (2020). &lt;em&gt;An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale&lt;/em&gt;. &lt;a href="https://arxiv.org/abs/2010.11929" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2010.11929&lt;/a&gt;&lt;br&gt;
[3] Gartner. (Undated). &lt;em&gt;Market Guide for Online Fraud Detection&lt;/em&gt;. &lt;a href="https://www.gartner.com/reviews/market/online-fraud-detection" rel="noopener noreferrer"&gt;https://www.gartner.com/reviews/market/online-fraud-detection&lt;/a&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>ai</category>
      <category>captcha</category>
      <category>programming</category>
    </item>
    <item>
      <title>A Comprehensive Guide to Bypassing CAPTCHAs in OpenClaw with the CapSolver Extension</title>
      <dc:creator>luisgustvo</dc:creator>
      <pubDate>Fri, 06 Mar 2026 08:58:49 +0000</pubDate>
      <link>https://dev.to/luisgustvo/a-comprehensive-guide-to-bypassing-captchas-in-openclaw-with-the-capsolver-extension-iko</link>
      <guid>https://dev.to/luisgustvo/a-comprehensive-guide-to-bypassing-captchas-in-openclaw-with-the-capsolver-extension-iko</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiym4lgdv216ler0umxvc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiym4lgdv216ler0umxvc.png" alt=" Solve CAPTCHA in OpenClaw" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When utilizing an AI agent for web browsing, the most frequent hurdle is encountering &lt;strong&gt;CAPTCHAs&lt;/strong&gt;. These security measures often block automated agents, prevent form submissions, and halt tasks that otherwise require manual human intervention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt; serves as a versatile personal AI assistant capable of navigating the web, interacting with forms, and performing data extraction—all driven by simple natural language. However, like most browser automation tools, it can be stopped by CAPTCHA challenges.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;&lt;a href="https://dev.to/capsolver"&gt;CapSolver&lt;/a&gt;&lt;/strong&gt; makes a significant difference. By integrating the CapSolver Chrome extension directly into the OpenClaw browser environment, CAPTCHA hurdles are resolved &lt;strong&gt;automatically and seamlessly&lt;/strong&gt; in the background. This integration requires no complex API calls or code modifications on your part, allowing you to interact with your AI assistant as you normally would.&lt;/p&gt;

&lt;p&gt;One of the most effective aspects of this setup is that &lt;strong&gt;you don't need to explicitly instruct the AI to handle CAPTCHAs.&lt;/strong&gt; Simply asking the agent to pause for a short duration before submitting a form ensures that by the time it proceeds, the CAPTCHA has already been bypassed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding OpenClaw
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/openclaw/openclaw" rel="noopener noreferrer"&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt;&lt;/a&gt; is an open-source AI assistant designed to run on your local hardware. It integrates with various communication platforms you likely already use, such as WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Google Chat, and Microsoft Teams.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5p92626e2kjaovqcqok5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5p92626e2kjaovqcqok5.png" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Primary Capabilities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unified Inbox&lt;/strong&gt;: Communicate with your AI via multiple messaging apps like Discord or WhatsApp.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrated Browser&lt;/strong&gt;: The agent can manage tabs, visit websites, interact with UI elements, and capture screenshots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy-Centric&lt;/strong&gt;: Since it runs locally, your data remains under your control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensible Architecture&lt;/strong&gt;: Customize and enhance functionality through a robust plugin system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice Interaction&lt;/strong&gt;: Support for voice commands on macOS, iOS, and Android.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Browser Component
&lt;/h3&gt;

&lt;p&gt;OpenClaw utilizes a &lt;strong&gt;separate Chromium browser instance&lt;/strong&gt; dedicated to the AI agent's tasks, ensuring isolation from your primary browser. The agent is capable of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigating to any specified URL.&lt;/li&gt;
&lt;li&gt;Parsing page data and taking snapshots.&lt;/li&gt;
&lt;li&gt;Filling out forms, clicking buttons, and interacting with dropdown menus.&lt;/li&gt;
&lt;li&gt;Creating PDF documents and screenshots of web pages.&lt;/li&gt;
&lt;li&gt;Handling multiple browser tabs simultaneously.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essentially, it provides your AI assistant with its own dedicated window to the internet.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is CapSolver?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/capsolver"&gt;CapSolver&lt;/a&gt; is a premier service for CAPTCHA resolution, offering AI-driven methods to bypass a wide array of security challenges. It provides fast and reliable solutions that integrate easily into any automated system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supported Challenges
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/capsolver"&gt;&lt;strong&gt;reCAPTCHA v2&lt;/strong&gt;&lt;/a&gt; (both visible and hidden)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/capsolver"&gt;&lt;strong&gt;reCAPTCHA v3 &amp;amp; Enterprise&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/capsolver"&gt;&lt;strong&gt;Cloudflare Turnstile&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/capsolver"&gt;&lt;strong&gt;Cloudflare Challenge (5-second)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/capsolver"&gt;&lt;strong&gt;AWS WAF CAPTCHA&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/capsolver"&gt;&lt;strong&gt;Various other anti-bot and CAPTCHA mechanisms&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  A Unique Integration Approach
&lt;/h2&gt;

&lt;p&gt;Traditional CAPTCHA-solving methods often demand extensive coding—managing API requests, checking for results, and manually injecting tokens into web forms. This is common when using libraries like &lt;a href="https://dev.to/capsolver"&gt;Crawlee&lt;/a&gt;, &lt;a href="https://dev.to/capsolver"&gt;Puppeteer&lt;/a&gt;, or &lt;a href="https://dev.to/capsolver"&gt;Playwright&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The OpenClaw and CapSolver combination is different:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Traditional (Code-Centric)&lt;/th&gt;
&lt;th&gt;OpenClaw (Natural Language)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Setup&lt;/td&gt;
&lt;td&gt;Writing custom service classes&lt;/td&gt;
&lt;td&gt;Adding an extension path to the config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Execution&lt;/td&gt;
&lt;td&gt;Manual API calls for tasks&lt;/td&gt;
&lt;td&gt;Direct natural language interaction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Injection&lt;/td&gt;
&lt;td&gt;Scripting token injection&lt;/td&gt;
&lt;td&gt;Automated handling by the extension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error Handling&lt;/td&gt;
&lt;td&gt;Complex retry logic in code&lt;/td&gt;
&lt;td&gt;Simple "wait" instruction to the AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Versatility&lt;/td&gt;
&lt;td&gt;Unique code for every CAPTCHA&lt;/td&gt;
&lt;td&gt;Unified, automatic support for all types&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The Core Advantage&lt;/strong&gt;: The CapSolver extension operates within the agent's browser. As the agent lands on a page with a CAPTCHA, the extension identifies and solves it silently, injecting the necessary token before any submission attempt is made.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All you need to provide is time.&lt;/strong&gt; Instead of a complex "solve this" command, you simply say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Navigate to the page, &lt;strong&gt;wait for 60 seconds&lt;/strong&gt;, and then click Submit."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The AI remains unaware of the underlying CapSolver process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;To get started with this integration, ensure you have:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt; set up with the gateway active.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A CapSolver account&lt;/strong&gt; with a valid API key (&lt;a href="https://dev.to/capsolver"&gt;register here&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chromium or Chrome for Testing&lt;/strong&gt; (refer to the browser compatibility note below).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Critical: Choosing the Right Browser
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: As of mid-2025, &lt;strong&gt;Google Chrome 137+&lt;/strong&gt; has disabled the &lt;code&gt;--load-extension&lt;/code&gt; flag in its standard branded versions. This means extensions cannot be automatically loaded in these versions during automated sessions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This change also affects Microsoft Edge. You &lt;strong&gt;must&lt;/strong&gt; utilize one of the following:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Browser Choice&lt;/th&gt;
&lt;th&gt;Supports Extension Loading&lt;/th&gt;
&lt;th&gt;Recommended?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Google Chrome 137+&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft Edge&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chrome for Testing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chromium (Standalone)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Playwright Chromium&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Installing Chrome for Testing:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Option 1: Via Playwright (recommended)&lt;/span&gt;
npx playwright &lt;span class="nb"&gt;install &lt;/span&gt;chromium

&lt;span class="c"&gt;# The binary will be at a path like:&lt;/span&gt;
&lt;span class="c"&gt;# ~/.cache/ms-playwright/chromium-XXXX/chrome-linux64/chrome  (Linux)&lt;/span&gt;
&lt;span class="c"&gt;# ~/Library/Caches/ms-playwright/chromium-XXXX/chrome-mac/Chromium.app/Contents/MacOS/Chromium  (macOS)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Option 2: Direct Download&lt;/span&gt;
&lt;span class="c"&gt;# Visit: https://googlechromelabs.github.io/chrome-for-testing/&lt;/span&gt;
&lt;span class="c"&gt;# Select the version for your operating system.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make a note of the installation path for your configuration file.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step-by-Step Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Obtain the CapSolver Extension
&lt;/h3&gt;

&lt;p&gt;Download and extract the extension to &lt;code&gt;~/.openclaw/capsolver-extension/&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit the &lt;a href="https://github.com/capsolver/capsolver-browser-extension/releases" rel="noopener noreferrer"&gt;CapSolver extension GitHub releases&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Download the latest Chrome-compatible zip file.&lt;/li&gt;
&lt;li&gt;Use the following commands to extract it:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.openclaw/capsolver-extension
unzip CapSolver.Browser.Extension-chrome-v&lt;span class="k"&gt;*&lt;/span&gt;.zip &lt;span class="nt"&gt;-d&lt;/span&gt; ~/.openclaw/capsolver-extension/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Confirm the &lt;code&gt;manifest.json&lt;/code&gt; file exists:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; ~/.openclaw/capsolver-extension/manifest.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Configure Your API Key
&lt;/h3&gt;

&lt;p&gt;Update the extension's configuration at &lt;code&gt;~/.openclaw/capsolver-extension/assets/config.js&lt;/code&gt; with your API key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;defaultConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CAP-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// ← your key here&lt;/span&gt;
  &lt;span class="na"&gt;useCapsolver&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// ... rest of config&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your key is available on the &lt;a href="https://dev.to/capsolver"&gt;CapSolver dashboard&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Update OpenClaw Browser Settings
&lt;/h3&gt;

&lt;p&gt;Modify &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt; to enable the browser and point to the extension:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"browser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"executablePath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/path/to/chrome-for-testing/chrome"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"extensions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/capsolver-extension"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"noSandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openclaw"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Replace &lt;code&gt;/path/to/chrome-for-testing/chrome&lt;/code&gt; with your actual binary path.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linux (Playwright)&lt;/strong&gt;: &lt;code&gt;~/.cache/ms-playwright/chromium-1200/chrome-linux64/chrome&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS (Playwright)&lt;/strong&gt;: &lt;code&gt;~/Library/Caches/ms-playwright/chromium-1200/chrome-mac/Chromium.app/Contents/MacOS/Chromium&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Use &lt;code&gt;noSandbox: true&lt;/code&gt; if you are running in a Docker container or a server environment where the Chrome sandbox is restricted.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. Restart the Service
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# If using PM2:&lt;/span&gt;
pm2 restart opencrawl &lt;span class="nt"&gt;--update-env&lt;/span&gt;

&lt;span class="c"&gt;# Or using the openclaw CLI:&lt;/span&gt;
openclaw gateway restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Confirm Successful Loading
&lt;/h3&gt;

&lt;p&gt;Check your logs to ensure the extension is active:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pm2 logs opencrawl &lt;span class="nt"&gt;--lines&lt;/span&gt; 20 &lt;span class="nt"&gt;--nostream&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for confirmation messages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[browser/chrome] Loading 1 extension(s)
[browser/chrome] Spawning Chrome: /path/to/chrome-for-testing (args: 15)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also verify the extension's background process via the DevTools Protocol:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; http://127.0.0.1:8091/json/list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A successful setup will show a &lt;code&gt;service_worker&lt;/code&gt; entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Service Worker chrome-extension://cnopfoopenkdblckmekkipihdnambjhf/background.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"service_worker"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chrome-extension://cnopfoopenkdblckmekkipihdnambjhf/background.js"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbpaahmxkt5zrge16jro.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbpaahmxkt5zrge16jro.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Usage
&lt;/h2&gt;

&lt;p&gt;Using this integration is straightforward once the initial setup is complete.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Key Strategy
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Keep it simple.&lt;/strong&gt; Do not mention CAPTCHAs to the AI. Just give it enough time to work.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The extension operates independently. Your role is simply to provide a &lt;strong&gt;waiting period&lt;/strong&gt; in your prompts so the solver can finish its task before the agent attempts to submit a form.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario 1: Basic Form Submission
&lt;/h3&gt;

&lt;p&gt;Prompt your agent via Discord, Telegram, or any other connected channel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Visit https://example.com, wait for 60 seconds,
then click the Submit button and report the resulting text.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The agent opens the URL.&lt;/li&gt;
&lt;li&gt;The CapSolver extension identifies the CAPTCHA.&lt;/li&gt;
&lt;li&gt;It solves the challenge (typically in 10-20 seconds) and injects the token.&lt;/li&gt;
&lt;li&gt;After the 60-second wait, the agent proceeds to submit the form successfully.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Scenario 2: Accessing a Secure Account
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Go to https://example.com/login, enter "me@example.com"
as the email and "mypassword123" as the password.
Wait for 30 seconds before clicking Sign In.
Let me know which page loads next.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Scenario 3: Handling Cloudflare Turnstile
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Navigate to https://example.com/contact and fill the form:
- Name: "John Doe"
- Email: "john@example.com"
- Message: "Inquiry about services."
Wait 45 seconds, then click Send. What is the confirmation?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Suggested Wait Times
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CAPTCHA Category&lt;/th&gt;
&lt;th&gt;Solve Duration&lt;/th&gt;
&lt;th&gt;Recommended Wait&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v2 (Checkbox)&lt;/td&gt;
&lt;td&gt;5-15s&lt;/td&gt;
&lt;td&gt;30-60s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v2 (Hidden)&lt;/td&gt;
&lt;td&gt;5-15s&lt;/td&gt;
&lt;td&gt;30s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reCAPTCHA v3&lt;/td&gt;
&lt;td&gt;3-10s&lt;/td&gt;
&lt;td&gt;20-30s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Turnstile&lt;/td&gt;
&lt;td&gt;3-10s&lt;/td&gt;
&lt;td&gt;20-30s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip&lt;/strong&gt;: Using a 60-second wait is generally the safest bet. It ensures reliability without any negative impact on the final result.&lt;/p&gt;




&lt;h2&gt;
  
  
  Communication Tips
&lt;/h2&gt;

&lt;p&gt;Use natural phrasing to guide your AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Visit [URL], wait for one minute, then submit the form."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Open [URL], fill in the details, wait 30 seconds, and click [button]."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Go to [URL] and after a brief pause, click Submit."&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoid these phrases&lt;/strong&gt;, as they might confuse the AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;del&gt;"Solve the CAPTCHA for me."&lt;/del&gt; (The AI doesn't see it as a task).&lt;/li&gt;
&lt;li&gt;
&lt;del&gt;"Use the CapSolver plugin."&lt;/del&gt; (The AI doesn't control plugins).&lt;/li&gt;
&lt;li&gt;
&lt;del&gt;"Click the verification box."&lt;/del&gt; (Let the extension handle this to avoid interference).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Technical Overview
&lt;/h2&gt;

&lt;p&gt;Here is the sequence of events when the integration is active:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  User Prompt                     OpenClaw Gateway
  ───────────────────────────────────────────────────
  "visit site,          ──►  AI Agent processes request
   wait 60s, submit"         │
                              ▼
                         Browser Tool: navigate to URL
                              │
                              ▼
                         Chromium renders the page
                         ┌─────────────────────────────┐
                         │  Page with CAPTCHA widget   │
                         │                             │
                         │  CapSolver Extension:       │
                         │  1. Detects CAPTCHA         │
                         │  2. Solves via API          │
                         │  3. Receives Token          │
                         │  4. Injects into form       │
                         └─────────────────────────────┘
                              │
                              ▼
                         AI Agent waits for 60 seconds...
                              │
                              ▼
                         Browser Tool: click Submit
                              │
                              ▼
                         Form submitted with valid token
                              │
                              ▼
                         "Success!"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Loading Mechanism
&lt;/h3&gt;

&lt;p&gt;OpenClaw passes the extension path via the &lt;code&gt;--load-extension&lt;/code&gt; flag during browser startup. This standard method ensures the extension's service worker and content scripts are active on every page the agent visits.&lt;/p&gt;




&lt;h2&gt;
  
  
  Full Configuration Template
&lt;/h2&gt;

&lt;p&gt;Example &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"browser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"executablePath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/path/to/chrome-for-testing/chrome"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"extensions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"~/.openclaw/capsolver-extension"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"noSandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openclaw"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuration Breakdown
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;browser.executablePath&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Location of your Chromium-based binary.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;browser.extensions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List of paths for extensions to load.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;browser.noSandbox&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Required for server or Docker environments.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;browser.defaultProfile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Name of the browser profile.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Troubleshooting Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Extension Fails to Load
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;: Logs show extensions are loading, but they don't appear active.&lt;br&gt;
&lt;strong&gt;Reason&lt;/strong&gt;: You are likely using a branded version of Google Chrome (137+).&lt;br&gt;
&lt;strong&gt;Solution&lt;/strong&gt;: Switch to Chrome for Testing or Chromium and update your &lt;code&gt;executablePath&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Verification Fails
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Check for&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Insufficient wait time&lt;/strong&gt;: Try increasing it to 60 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key issues&lt;/strong&gt;: Ensure your CapSolver API key is correct.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Account balance&lt;/strong&gt;: Verify you have enough credits.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Initial Timeout
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;: The first action fails, but later ones work.&lt;br&gt;
&lt;strong&gt;Reason&lt;/strong&gt;: This is often due to the browser's "cold start" time.&lt;br&gt;
&lt;strong&gt;Solution&lt;/strong&gt;: Simply retry the command; the browser will be ready.&lt;/p&gt;
&lt;h3&gt;
  
  
  Crash After Browser Change
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;: Switching browser types causes errors.&lt;br&gt;
&lt;strong&gt;Reason&lt;/strong&gt;: Incompatible profile data from a previous version.&lt;br&gt;
&lt;strong&gt;Solution&lt;/strong&gt;: Clear the profile directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/.openclaw/browser/openclaw/user-data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prioritize Patience&lt;/strong&gt;: Longer wait times (30-60s) ensure the extension has finished its work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Natural Language&lt;/strong&gt;: Keep prompts conversational to avoid AI refusals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor Credits&lt;/strong&gt;: Regularly check your &lt;a href="https://dev.to/capsolver"&gt;CapSolver balance&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server Settings&lt;/strong&gt;: Always use &lt;code&gt;noSandbox: true&lt;/code&gt; on remote hosts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Headless Display&lt;/strong&gt;: Use Xvfb on servers without a physical monitor:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;xvfb
Xvfb :99 &lt;span class="nt"&gt;-screen&lt;/span&gt; 0 1280x720x24 &amp;amp;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DISPLAY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;:99
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The integration of OpenClaw and CapSolver provides a zero-code, automated way to handle CAPTCHAs. By simply adding the extension and using Chromium, you can interact with your AI naturally while it handles security hurdles in the background.&lt;/p&gt;

&lt;p&gt;This is the future of seamless web automation—&lt;strong&gt;efficient, invisible, and effortless.&lt;/strong&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Ready to try it?&lt;/strong&gt; &lt;a href="https://dev.to/capsolver"&gt;Join CapSolver today&lt;/a&gt; and use the code &lt;strong&gt;OPENCLAW&lt;/strong&gt; for a 6% bonus on your initial deposit!&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F279zdrqyenh25lun6v8v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F279zdrqyenh25lun6v8v.png" width="535" height="243"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is it necessary to mention CapSolver to the AI?
&lt;/h3&gt;

&lt;p&gt;No. The extension works independently. Just tell the AI to wait a bit before submitting forms.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why won't standard Chrome work?
&lt;/h3&gt;

&lt;p&gt;Recent versions of branded Google Chrome have disabled automated extension loading. Chromium or Chrome for Testing are required.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the cost of CapSolver?
&lt;/h3&gt;

&lt;p&gt;Pricing varies by volume and type. Check the &lt;a href="https://dev.to/capsolver"&gt;official site&lt;/a&gt; for details.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is OpenClaw free to use?
&lt;/h3&gt;

&lt;p&gt;Yes, it is open-source. You only pay for your AI model usage and CapSolver credits.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much wait time is ideal?
&lt;/h3&gt;

&lt;p&gt;Usually, 30-60 seconds is perfect for most challenges.&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>captcha</category>
      <category>ai</category>
    </item>
    <item>
      <title>CapSolver's AI-LLM Architecture: A Decision Pipeline for Adaptive CAPTCHA Recognition</title>
      <dc:creator>luisgustvo</dc:creator>
      <pubDate>Fri, 06 Mar 2026 08:55:31 +0000</pubDate>
      <link>https://dev.to/luisgustvo/capsolvers-ai-llm-architecture-a-decision-pipeline-for-adaptive-captcha-recognition-hg9</link>
      <guid>https://dev.to/luisgustvo/capsolvers-ai-llm-architecture-a-decision-pipeline-for-adaptive-captcha-recognition-hg9</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F48ewxq9snjhkkuhwcf3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F48ewxq9snjhkkuhwcf3u.png" alt="CapSolver AI-LLM Architecture in Practice" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CAPTCHAs have evolved significantly, moving beyond simple text challenges to complex interactive puzzles and dynamic risk-based systems. This complexity demands more sophisticated automation workflows than traditional image recognition methods. Conventional OCR and standalone Convolutional Neural Network (CNN) models often struggle with these evolving formats and the integration of visual and semantic tasks.&lt;/p&gt;

&lt;p&gt;In a previous discussion, "&lt;a href="https://www.capsolver.com/blog/All/ai-llm" rel="noopener noreferrer"&gt;AI-LLM: The Future Solution for Risk Control Image Recognition and CAPTCHA Solving&lt;/a&gt;," we highlighted the increasing importance of large language models (LLMs) in modern CAPTCHA systems. This article expands on that by detailing the practical architecture of &lt;strong&gt;CapSolver's AI-LLM decision pipeline&lt;/strong&gt;. We will explore how various CAPTCHA types are intelligently routed to appropriate solving strategies and how the system dynamically adapts to new formats.&lt;/p&gt;

&lt;p&gt;The fundamental challenge lies not merely in pixel recognition but in comprehending the underlying intent of a CAPTCHA and responding in real-time. The &lt;strong&gt;CapSolver AI-LLM Architecture&lt;/strong&gt; integrates computer vision with advanced reasoning capabilities, enabling strategic decision-making beyond simple pattern matching.&lt;/p&gt;

&lt;p&gt;Below is an overview of this architecture:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwsrfutgj7o2b2u8hcw7n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwsrfutgj7o2b2u8hcw7n.png" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article delves into the engineering principles behind our three-layer autonomous system, which seamlessly bridges raw visual input with semantic reasoning.&lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://www.onetrust.com/resources/governing-ai-in-2026-a-global-regulatory-guide-white-paper/" rel="noopener noreferrer"&gt;industry research&lt;/a&gt; [1], over 80% of enterprises are projected to deploy generative AI-enabled applications in production environments by 2026. This trend underscores the rapid adoption of automated, AI-driven workflows and multimodal pipelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Architecture: A Three-Layer Autonomous System
&lt;/h2&gt;

&lt;p&gt;Modern CAPTCHA recognition systems have progressed from monolithic &lt;br&gt;
architectures combining models and rules to sophisticated, layered autonomous systems. This architecture is structured into three primary layers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Core Module&lt;/th&gt;
&lt;th&gt;Functional Positioning&lt;/th&gt;
&lt;th&gt;Tech Stack Examples&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Application Decision Layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLM Brain&lt;/td&gt;
&lt;td&gt;Semantic understanding, task orchestration, anomaly analysis&lt;/td&gt;
&lt;td&gt;GPT-4/Vision, Claude 3, Qwen3, Self-developed LangChain Agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Algorithm Execution Layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CV Engine&lt;/td&gt;
&lt;td&gt;Object detection, trajectory simulation, image recognition&lt;/td&gt;
&lt;td&gt;YOLO, ViT, BLIP, CLIP, DINO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;O&amp;amp;M Assurance Layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AIOps&lt;/td&gt;
&lt;td&gt;Monitoring, rollback, resource scheduling, risk control&lt;/td&gt;
&lt;td&gt;Prometheus, Kubernetes, Custom Reinforcement Learning (RL) strategies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The central concept of this layered design is the distribution of responsibilities: the &lt;strong&gt;LLM handles reasoning&lt;/strong&gt;, the &lt;strong&gt;CV models manage execution&lt;/strong&gt;, and &lt;strong&gt;AIOps ensures reliability&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Need for LLM Intervention
&lt;/h3&gt;

&lt;p&gt;Traditional CAPTCHA recognition methods face three critical limitations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Semantic Gap&lt;/strong&gt;: These systems cannot interpret instructional text, such as "Please click all images containing traffic lights" or "Select the object that is typically used with the displayed item." The variety and complexity of these questions are continually increasing.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Adaptive Lag&lt;/strong&gt;: When a target website modifies its verification logic, manual re-labeling and model retraining are necessary, a process that can take several days.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Rigid Anomaly Handling&lt;/strong&gt;: Older systems lack the capability to autonomously analyze new defense mechanisms, such as adversarial samples, or adapt when CAPTCHA types with low success rates are presented more frequently.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The LLM does not replace CV models but rather serves as the "neural center" of the system, providing it with the capacity to understand and evolve.&lt;/p&gt;
&lt;h2&gt;
  
  
  Working Mechanism of the Decision Pipeline
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;The entire system operates on a closed-loop process encompassing Perception, Decision, Execution, and Evolution. This process can be broken down into four key stages:&lt;/p&gt;
&lt;h3&gt;
  
  
  Stage 1: Intelligent Routing
&lt;/h3&gt;

&lt;p&gt;Upon receiving a new image request, the system first employs an LLM-driven classifier for intelligent routing:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6alflj5bdy5j7u6wja0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6alflj5bdy5j7u6wja0.png" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Details:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Zero-shot Classification&lt;/strong&gt;: Leverages the visual understanding capabilities of LLMs to identify various CAPTCHA types (e.g., slider, click-to-select, rotation, reCAPTCHA) without explicit training.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Confidence Assessment&lt;/strong&gt;: If the LLM's confidence score falls below 0.8, the system automatically triggers a manual review process and incorporates the sample into an incremental training dataset.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Practical Data&lt;/strong&gt;: Since integrating this routing system, the platform has observed a 47% increase in resource allocation efficiency, with the misclassification rate decreasing from 12% to 2.1%.&lt;/p&gt;
&lt;h3&gt;
  
  
  Stage 2: Dual-Track Development
&lt;/h3&gt;

&lt;p&gt;Based on the classification results, the system proceeds along one of two distinct technical tracks:&lt;/p&gt;
&lt;h4&gt;
  
  
  Track A: Low-Code Track (Rapid Response via General Templates)
&lt;/h4&gt;

&lt;p&gt;This track is designed for standardized CAPTCHAs, such as &lt;a href="https://www.capsolver.com/products/recaptchav3?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=ai-llm-practice"&gt;reCAPTCHA&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Universal Template Library&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── LLM Pre-Labeling: Automatically generate bounding boxes and semantic labels
├── Pretrained Models: General detectors trained on millions of samples
└── LLM Post-Processing: Semantic correction (e.g., distinguishing 0/O, 1/l, removing duplicates)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key Innovation — Intelligent Labeling Flywheel:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; LLM generates pseudo-labels through few-shot learning.&lt;/li&gt;
&lt;li&gt; High-quality data, corrected by manual review, is fed back into the training pool.&lt;/li&gt;
&lt;li&gt; This process reduces labeling costs by 60% and increases data diversity threefold.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Track B: Pro-Code Track (Deep Customized Development)
&lt;/h4&gt;

&lt;p&gt;This track targets enterprise-level customized CAPTCHAs, which may involve specific slider algorithms or rotation angle logic:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Traditional Development Pipeline&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── Model Selection/Composition (Detection + Recognition + Decision)
├── Data Processing: Cleaning → Labeling → Adversarial Sample Generation (LLM-assisted: Accuracy testing and new data filtering)
└── Continuous Training: Supports incremental learning and domain adaptation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Role of LLM in Data Generation:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Image Generation&lt;/strong&gt;: Utilizes Diffusion models to create diverse background and target images.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Text Generation&lt;/strong&gt;: LLM generates adversarial text samples (e.g., distorted, blurred fonts, small images of abstractly drawn real-world objects) or instructional text (e.g., "Please click all images containing xx").&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Rule Generation and Variation&lt;/strong&gt;: Combines text and information to simulate image combination rules and risk control verification mechanisms in real-time via Generative Adversarial Networks (GANs).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Verification Mechanism&lt;/strong&gt;: Employs Vision Transformer (ViT)-related models to verify and filter data, thereby improving the hit rate of positive samples.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Stage 3: Self-Evolution Loop (Framework Core)
&lt;/h3&gt;

&lt;p&gt;This stage represents the most revolutionary aspect of the architecture, enabling autonomous evolution through a pipeline of &lt;strong&gt;AIOps → LLM Analysis → Automatic Optimization&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Model Release → Online Service → Anomaly Monitoring → LLM Root Cause Analysis → Generation of Optimization Plan → Automatic Retraining → Canary Release&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Six Major Decision Modules of LLM:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Functional Module&lt;/th&gt;
&lt;th&gt;Specific Role&lt;/th&gt;
&lt;th&gt;Business Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Information Summarization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aggregates error logs, identifies failure patterns (e.g., "recognition rate drops in night scenes")&lt;/td&gt;
&lt;td&gt;Transforms massive logs into actionable insights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intelligent Decision&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Determines thresholds for triggering model updates (e.g., accuracy drops &amp;gt;5% for 1 hour) or risk control update alerts (accuracy drops &amp;gt;30% instantly)&lt;/td&gt;
&lt;td&gt;Avoids overtraining, saves GPU costs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Process Orchestration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatically orchestrates the CI/CD pipeline from data collection → labeling → training → testing → release&lt;/td&gt;
&lt;td&gt;Shortens iteration cycles from days to hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automated Solutions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Generates data augmentation strategies (e.g., combining rule-generated backgrounds with newly generated or collected targets)&lt;/td&gt;
&lt;td&gt;Zero-manual-intervention data preparation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Emergency Alerts&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Identifies new attack patterns (e.g., mass production of adversarial samples) and triggers risk control updates&lt;/td&gt;
&lt;td&gt;Response time &amp;lt; 5 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Distribution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatically assigns difficult samples to labeling teams with LLM-generated labeling guidelines&lt;/td&gt;
&lt;td&gt;Increases labeling efficiency by 40%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Real Case&lt;/strong&gt;: When an e-commerce client updated its slider CAPTCHA's gap detection algorithm, traditional systems required 3-5 days of manual adaptation. The LLM-based closed-loop system completed anomaly detection, root cause analysis, data generation, and model fine-tuning within &lt;strong&gt;30 minutes&lt;/strong&gt;, quickly restoring recognition accuracy from an initial 34% to 96.8%.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 4: Multimodal Execution (Business Expansion)
&lt;/h3&gt;

&lt;p&gt;CAPTCHA recognition is no longer solely an image-based task but a comprehensive decision-making process that integrates vision, semantics, and behavior. This expansion to new CAPTCHA types is now free from previous time and cost limitations.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CAPTCHA Type&lt;/th&gt;
&lt;th&gt;Visual Solution&lt;/th&gt;
&lt;th&gt;LLM Enhancement Point&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Slider CAPTCHA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gap detection (YOLO) + Image comparison + Trajectory simulation&lt;/td&gt;
&lt;td&gt;LLM analyzes gap texture features to generate human-like sliding trajectories (avoiding constant speed linear motion identified as bots)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://www.capsolver.com/blog/All/ai-powered-image-recognition?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=ai-llm-practice"&gt;Click-to-select CAPTCHA&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Object detection + Coordinate positioning&lt;/td&gt;
&lt;td&gt;LLM understands semantic instructions (e.g., "Touch the item usually used with the displayed item"), enabling contextual reasoning in ambiguous scenarios&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rotation CAPTCHA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Angle regression prediction&lt;/td&gt;
&lt;td&gt;LLM assists in judging visual alignment standards and handling partial occlusion scenarios&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ReCaptcha v3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Behavioral biometric analysis&lt;/td&gt;
&lt;td&gt;LLM synthesizes mouse trajectories, click intervals, and page scrolling patterns for human-bot judgment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  AIOps: The Immune System of Autonomous Systems
&lt;/h2&gt;

&lt;p&gt;Without robust O&amp;amp;M assurance, even the most intelligent decision pipeline cannot be effectively deployed in production. The AIOps layer ensures system stability through four core capabilities:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Anomaly Detection
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Model Drift Monitoring&lt;/strong&gt;: Real-time comparison of input data distribution against the training set distribution (using the Kolmogorov-Smirnov test), triggering alerts when drift exceeds predefined thresholds.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Performance Decay Tracking&lt;/strong&gt;: Continuous monitoring of key metrics including success rate, response latency, and GPU utilization.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Smart Rollback
&lt;/h3&gt;

&lt;p&gt;When a new model version exhibits abnormal performance, the system not only automatically rolls back to a stable version but also generates a fault diagnosis report via LLM analysis. This report pinpoints potential causes (e.g., "overexposure due to a high proportion of night images in new samples").&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Elastic Resource Scheduling
&lt;/h3&gt;

&lt;p&gt;Auto-scaling is implemented based on traffic prediction:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Peak Periods&lt;/strong&gt; (e.g., Black Friday): Automatically scales up to 50 GPU instances.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Off-peak Periods&lt;/strong&gt;: Scales down to 5 instances, migrating cold data to object storage.&lt;/li&gt;
&lt;li&gt; This strategy achieves &lt;strong&gt;cost savings of up to 65%&lt;/strong&gt; while maintaining 99.99% availability.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Risk Control and Adversarial Defense
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Adversarial Sample Detection&lt;/strong&gt;: Identifies CAPTCHA images containing adversarial perturbations (e.g., FGSM, PGD attacks).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Behavioral Risk Control&lt;/strong&gt;: Monitors abnormal request patterns (e.g., high-frequency requests from a single IP), automatically triggering human-machine verification or IP blocking.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Implementation Path: From POC to Production
&lt;/h2&gt;

&lt;p&gt;Implementation recommendations for this architecture are structured into four distinct phases:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Duration&lt;/th&gt;
&lt;th&gt;Key Milestones&lt;/th&gt;
&lt;th&gt;Success Metrics&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 1: Infrastructure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1-2 Months&lt;/td&gt;
&lt;td&gt;Build AIOps monitoring baseline, achieve full-link observability&lt;/td&gt;
&lt;td&gt;MTTR (Mean Time To Repair) &amp;lt; 15 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 2: Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2-3 Months&lt;/td&gt;
&lt;td&gt;LLM integrated into error analysis, achieving automated diagnosis reports&lt;/td&gt;
&lt;td&gt;Manual analysis workload reduced by 70%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 3: Automation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3-4 Months&lt;/td&gt;
&lt;td&gt;Build fully automated training pipeline (AutoML + LLM)&lt;/td&gt;
&lt;td&gt;Model iteration cycle &amp;lt; 4 hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 4: Autonomy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6-12 Months&lt;/td&gt;
&lt;td&gt;Achieve LLM-driven autonomous optimization loop&lt;/td&gt;
&lt;td&gt;Manual intervention frequency &amp;lt; 1 time/week&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Challenges and Mitigation Strategies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Challenge 1: Wrong Decisions Caused by LLM Hallucinations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Adopt a &lt;strong&gt;Retrieval-Augmented Generation (RAG)&lt;/strong&gt; architecture, grounding decision bases in a library of real historical cases.&lt;/li&gt;
&lt;li&gt; Establish manual approval nodes: High-risk operations, such as model rollback or data deletion, require human confirmation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Challenge 2: Cost Out of Control
&lt;/h3&gt;

&lt;p&gt;The image analysis cost of GPT-4V can be 50-100 times that of traditional CV models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Layered Processing&lt;/strong&gt;: Utilize lightweight CV models (e.g., BLIP, CLIP, DINO) for simpler scenarios, submitting only complex samples to the LLM.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Token Budget Management&lt;/strong&gt;: Set a maximum token limit per request to prevent cost spikes from abnormal inputs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Challenge 3: Latency-Sensitive Scenarios
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Asynchronous Analysis&lt;/strong&gt;: LLM optimization suggestions are generated via asynchronous processes, ensuring they do not block the real-time recognition path.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Edge Deployment&lt;/strong&gt;: Deploy lightweight LLMs (e.g., Qwen3-8b, Llama-3-8B) on edge nodes, achieving processing times under 500ms.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion: Evolution from Tool to Partner
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://dashboard.capsolver.com/dashboard/overview/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=ai-llm-practice"&gt;CapSolver&lt;/a&gt; AI-LLM architecture signifies a paradigm shift in CAPTCHA recognition, transforming it from static tools into dynamic agents. Its value extends beyond improving recognition accuracy to building a self-evolving technical ecosystem:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Faster Response&lt;/strong&gt;: General templates enable minute-level adaptation.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Deeper Customization&lt;/strong&gt;: Traditional development supports complex business logic.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Continuous Evolution&lt;/strong&gt;: LLM-driven closed loops ensure the system remains current.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;"Future AI systems will not be maintained by humans, but will be digital partners that collaborate with humans and grow autonomously."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With the continuous advancements in multimodal large models (such as GPT-4o, Gemini 1.5 Pro), we anticipate that CAPTCHA recognition will evolve from a tedious technical confrontation into an efficient, secure, and trustworthy automated negotiation process between AI systems.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try it yourself! Use code &lt;code&gt;CAP26&lt;/code&gt; when signing up at &lt;a href="https://dashboard.capsolver.com/dashboard/overview/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=ai-llm-practice"&gt;CapSolver&lt;/a&gt; to receive bonus credits!&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsc8s07utx4yajxrcj87.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsc8s07utx4yajxrcj87.png" width="472" height="140"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q1: Does adding LLM increase recognition latency?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Through a layered architecture design, the real-time recognition path is still handled by optimized CV models (latency &amp;lt; 200ms). The LLM is primarily responsible for offline analysis and strategy optimization. For complex scenarios requiring semantic understanding, lightweight LLMs deployed at the edge (latency &amp;lt; 500ms) or asynchronous processing modes can be utilized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q2: How to handle potential wrong decisions by LLM?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Implement a &lt;strong&gt;Human-in-the-loop&lt;/strong&gt; mechanism: High-risk operations (e.g., full model rollback, data source deletion) necessitate manual approval. Concurrently, establish a sandbox testing environment where all LLM-generated optimization plans must be validated through A/B testing before full deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q3: Is this architecture suitable for small teams?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Yes. A progressive implementation approach is recommended: Initially, leverage cloud-based LLM APIs (e.g., Claude 3 Haiku) for anomaly analysis without building large models; utilize open-source tools (LangChain, MLflow) to construct pipelines. As business needs grow, gradually introduce private deployment and AIOps automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q4: How does the cost compare to traditional pure CV solutions?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: The initial investment increases by approximately 30-40% (primarily due to LLM API calls and engineering transformation). However, the reduction in manual O&amp;amp;M costs through automation typically offsets this incremental investment within 3-6 months. In the long run, improved model iteration efficiency and higher automation rates can reduce the Total Cost of Ownership (TCO) by more than 50%.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>captcha</category>
    </item>
    <item>
      <title>CapSolver's AI-LLM Architecture: A Decision Pipeline for Adaptive CAPTCHA Recognition</title>
      <dc:creator>luisgustvo</dc:creator>
      <pubDate>Wed, 11 Feb 2026 07:02:03 +0000</pubDate>
      <link>https://dev.to/luisgustvo/capsolvers-ai-llm-architecture-a-decision-pipeline-for-adaptive-captcha-recognition-o3k</link>
      <guid>https://dev.to/luisgustvo/capsolvers-ai-llm-architecture-a-decision-pipeline-for-adaptive-captcha-recognition-o3k</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F48ewxq9snjhkkuhwcf3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F48ewxq9snjhkkuhwcf3u.png" alt="CapSolver AI-LLM Architecture in Practice" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CAPTCHAs have evolved significantly, moving beyond simple text challenges to complex interactive puzzles and dynamic risk-based systems. This complexity demands more sophisticated automation workflows than traditional image recognition methods. Conventional OCR and standalone Convolutional Neural Network (CNN) models often struggle with these evolving formats and the integration of visual and semantic tasks.&lt;/p&gt;

&lt;p&gt;In a previous discussion, "&lt;a href="https://www.capsolver.com/blog/All/ai-llm" rel="noopener noreferrer"&gt;AI-LLM: The Future Solution for Risk Control Image Recognition and CAPTCHA Solving&lt;/a&gt;," we highlighted the increasing importance of large language models (LLMs) in modern CAPTCHA systems. This article expands on that by detailing the practical architecture of &lt;strong&gt;CapSolver's AI-LLM decision pipeline&lt;/strong&gt;. We will explore how various CAPTCHA types are intelligently routed to appropriate solving strategies and how the system dynamically adapts to new formats.&lt;/p&gt;

&lt;p&gt;The fundamental challenge lies not merely in pixel recognition but in comprehending the underlying intent of a CAPTCHA and responding in real-time. The &lt;strong&gt;CapSolver AI-LLM Architecture&lt;/strong&gt; integrates computer vision with advanced reasoning capabilities, enabling strategic decision-making beyond simple pattern matching.&lt;/p&gt;

&lt;p&gt;Below is an overview of this architecture:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwsrfutgj7o2b2u8hcw7n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwsrfutgj7o2b2u8hcw7n.png" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article delves into the engineering principles behind our three-layer autonomous system, which seamlessly bridges raw visual input with semantic reasoning.&lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://www.onetrust.com/resources/governing-ai-in-2026-a-global-regulatory-guide-white-paper/" rel="noopener noreferrer"&gt;industry research&lt;/a&gt; [1], over 80% of enterprises are projected to deploy generative AI-enabled applications in production environments by 2026. This trend underscores the rapid adoption of automated, AI-driven workflows and multimodal pipelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Architecture: A Three-Layer Autonomous System
&lt;/h2&gt;

&lt;p&gt;Modern CAPTCHA recognition systems have progressed from monolithic &lt;br&gt;
architectures combining models and rules to sophisticated, layered autonomous systems. This architecture is structured into three primary layers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Core Module&lt;/th&gt;
&lt;th&gt;Functional Positioning&lt;/th&gt;
&lt;th&gt;Tech Stack Examples&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Application Decision Layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLM Brain&lt;/td&gt;
&lt;td&gt;Semantic understanding, task orchestration, anomaly analysis&lt;/td&gt;
&lt;td&gt;GPT-4/Vision, Claude 3, Qwen3, Self-developed LangChain Agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Algorithm Execution Layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CV Engine&lt;/td&gt;
&lt;td&gt;Object detection, trajectory simulation, image recognition&lt;/td&gt;
&lt;td&gt;YOLO, ViT, BLIP, CLIP, DINO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;O&amp;amp;M Assurance Layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AIOps&lt;/td&gt;
&lt;td&gt;Monitoring, rollback, resource scheduling, risk control&lt;/td&gt;
&lt;td&gt;Prometheus, Kubernetes, Custom Reinforcement Learning (RL) strategies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The central concept of this layered design is the distribution of responsibilities: the &lt;strong&gt;LLM handles reasoning&lt;/strong&gt;, the &lt;strong&gt;CV models manage execution&lt;/strong&gt;, and &lt;strong&gt;AIOps ensures reliability&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Need for LLM Intervention
&lt;/h3&gt;

&lt;p&gt;Traditional CAPTCHA recognition methods face three critical limitations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Semantic Gap&lt;/strong&gt;: These systems cannot interpret instructional text, such as "Please click all images containing traffic lights" or "Select the object that is typically used with the displayed item." The variety and complexity of these questions are continually increasing.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Adaptive Lag&lt;/strong&gt;: When a target website modifies its verification logic, manual re-labeling and model retraining are necessary, a process that can take several days.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Rigid Anomaly Handling&lt;/strong&gt;: Older systems lack the capability to autonomously analyze new defense mechanisms, such as adversarial samples, or adapt when CAPTCHA types with low success rates are presented more frequently.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The LLM does not replace CV models but rather serves as the "neural center" of the system, providing it with the capacity to understand and evolve.&lt;/p&gt;
&lt;h2&gt;
  
  
  Working Mechanism of the Decision Pipeline
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;The entire system operates on a closed-loop process encompassing Perception, Decision, Execution, and Evolution. This process can be broken down into four key stages:&lt;/p&gt;
&lt;h3&gt;
  
  
  Stage 1: Intelligent Routing
&lt;/h3&gt;

&lt;p&gt;Upon receiving a new image request, the system first employs an LLM-driven classifier for intelligent routing:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6alflj5bdy5j7u6wja0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6alflj5bdy5j7u6wja0.png" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Details:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Zero-shot Classification&lt;/strong&gt;: Leverages the visual understanding capabilities of LLMs to identify various CAPTCHA types (e.g., slider, click-to-select, rotation, reCAPTCHA) without explicit training.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Confidence Assessment&lt;/strong&gt;: If the LLM's confidence score falls below 0.8, the system automatically triggers a manual review process and incorporates the sample into an incremental training dataset.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Practical Data&lt;/strong&gt;: Since integrating this routing system, the platform has observed a 47% increase in resource allocation efficiency, with the misclassification rate decreasing from 12% to 2.1%.&lt;/p&gt;
&lt;h3&gt;
  
  
  Stage 2: Dual-Track Development
&lt;/h3&gt;

&lt;p&gt;Based on the classification results, the system proceeds along one of two distinct technical tracks:&lt;/p&gt;
&lt;h4&gt;
  
  
  Track A: Low-Code Track (Rapid Response via General Templates)
&lt;/h4&gt;

&lt;p&gt;This track is designed for standardized CAPTCHAs, such as &lt;a href="https://www.capsolver.com/products/recaptchav3?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=ai-llm-practice"&gt;reCAPTCHA&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Universal Template Library&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── LLM Pre-Labeling: Automatically generate bounding boxes and semantic labels
├── Pretrained Models: General detectors trained on millions of samples
└── LLM Post-Processing: Semantic correction (e.g., distinguishing 0/O, 1/l, removing duplicates)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key Innovation — Intelligent Labeling Flywheel:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; LLM generates pseudo-labels through few-shot learning.&lt;/li&gt;
&lt;li&gt; High-quality data, corrected by manual review, is fed back into the training pool.&lt;/li&gt;
&lt;li&gt; This process reduces labeling costs by 60% and increases data diversity threefold.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Track B: Pro-Code Track (Deep Customized Development)
&lt;/h4&gt;

&lt;p&gt;This track targets enterprise-level customized CAPTCHAs, which may involve specific slider algorithms or rotation angle logic:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Traditional Development Pipeline&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── Model Selection/Composition (Detection + Recognition + Decision)
├── Data Processing: Cleaning → Labeling → Adversarial Sample Generation (LLM-assisted: Accuracy testing and new data filtering)
└── Continuous Training: Supports incremental learning and domain adaptation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Role of LLM in Data Generation:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Image Generation&lt;/strong&gt;: Utilizes Diffusion models to create diverse background and target images.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Text Generation&lt;/strong&gt;: LLM generates adversarial text samples (e.g., distorted, blurred fonts, small images of abstractly drawn real-world objects) or instructional text (e.g., "Please click all images containing xx").&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Rule Generation and Variation&lt;/strong&gt;: Combines text and information to simulate image combination rules and risk control verification mechanisms in real-time via Generative Adversarial Networks (GANs).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Verification Mechanism&lt;/strong&gt;: Employs Vision Transformer (ViT)-related models to verify and filter data, thereby improving the hit rate of positive samples.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Stage 3: Self-Evolution Loop (Framework Core)
&lt;/h3&gt;

&lt;p&gt;This stage represents the most revolutionary aspect of the architecture, enabling autonomous evolution through a pipeline of &lt;strong&gt;AIOps → LLM Analysis → Automatic Optimization&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Model Release → Online Service → Anomaly Monitoring → LLM Root Cause Analysis → Generation of Optimization Plan → Automatic Retraining → Canary Release&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Six Major Decision Modules of LLM:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Functional Module&lt;/th&gt;
&lt;th&gt;Specific Role&lt;/th&gt;
&lt;th&gt;Business Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Information Summarization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aggregates error logs, identifies failure patterns (e.g., "recognition rate drops in night scenes")&lt;/td&gt;
&lt;td&gt;Transforms massive logs into actionable insights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intelligent Decision&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Determines thresholds for triggering model updates (e.g., accuracy drops &amp;gt;5% for 1 hour) or risk control update alerts (accuracy drops &amp;gt;30% instantly)&lt;/td&gt;
&lt;td&gt;Avoids overtraining, saves GPU costs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Process Orchestration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatically orchestrates the CI/CD pipeline from data collection → labeling → training → testing → release&lt;/td&gt;
&lt;td&gt;Shortens iteration cycles from days to hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automated Solutions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Generates data augmentation strategies (e.g., combining rule-generated backgrounds with newly generated or collected targets)&lt;/td&gt;
&lt;td&gt;Zero-manual-intervention data preparation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Emergency Alerts&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Identifies new attack patterns (e.g., mass production of adversarial samples) and triggers risk control updates&lt;/td&gt;
&lt;td&gt;Response time &amp;lt; 5 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Distribution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatically assigns difficult samples to labeling teams with LLM-generated labeling guidelines&lt;/td&gt;
&lt;td&gt;Increases labeling efficiency by 40%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Real Case&lt;/strong&gt;: When an e-commerce client updated its slider CAPTCHA's gap detection algorithm, traditional systems required 3-5 days of manual adaptation. The LLM-based closed-loop system completed anomaly detection, root cause analysis, data generation, and model fine-tuning within &lt;strong&gt;30 minutes&lt;/strong&gt;, quickly restoring recognition accuracy from an initial 34% to 96.8%.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 4: Multimodal Execution (Business Expansion)
&lt;/h3&gt;

&lt;p&gt;CAPTCHA recognition is no longer solely an image-based task but a comprehensive decision-making process that integrates vision, semantics, and behavior. This expansion to new CAPTCHA types is now free from previous time and cost limitations.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CAPTCHA Type&lt;/th&gt;
&lt;th&gt;Visual Solution&lt;/th&gt;
&lt;th&gt;LLM Enhancement Point&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Slider CAPTCHA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gap detection (YOLO) + Image comparison + Trajectory simulation&lt;/td&gt;
&lt;td&gt;LLM analyzes gap texture features to generate human-like sliding trajectories (avoiding constant speed linear motion identified as bots)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://www.capsolver.com/blog/All/ai-powered-image-recognition?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=ai-llm-practice"&gt;Click-to-select CAPTCHA&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Object detection + Coordinate positioning&lt;/td&gt;
&lt;td&gt;LLM understands semantic instructions (e.g., "Touch the item usually used with the displayed item"), enabling contextual reasoning in ambiguous scenarios&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rotation CAPTCHA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Angle regression prediction&lt;/td&gt;
&lt;td&gt;LLM assists in judging visual alignment standards and handling partial occlusion scenarios&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ReCaptcha v3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Behavioral biometric analysis&lt;/td&gt;
&lt;td&gt;LLM synthesizes mouse trajectories, click intervals, and page scrolling patterns for human-bot judgment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  AIOps: The Immune System of Autonomous Systems
&lt;/h2&gt;

&lt;p&gt;Without robust O&amp;amp;M assurance, even the most intelligent decision pipeline cannot be effectively deployed in production. The AIOps layer ensures system stability through four core capabilities:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Anomaly Detection
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Model Drift Monitoring&lt;/strong&gt;: Real-time comparison of input data distribution against the training set distribution (using the Kolmogorov-Smirnov test), triggering alerts when drift exceeds predefined thresholds.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Performance Decay Tracking&lt;/strong&gt;: Continuous monitoring of key metrics including success rate, response latency, and GPU utilization.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Smart Rollback
&lt;/h3&gt;

&lt;p&gt;When a new model version exhibits abnormal performance, the system not only automatically rolls back to a stable version but also generates a fault diagnosis report via LLM analysis. This report pinpoints potential causes (e.g., "overexposure due to a high proportion of night images in new samples").&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Elastic Resource Scheduling
&lt;/h3&gt;

&lt;p&gt;Auto-scaling is implemented based on traffic prediction:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Peak Periods&lt;/strong&gt; (e.g., Black Friday): Automatically scales up to 50 GPU instances.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Off-peak Periods&lt;/strong&gt;: Scales down to 5 instances, migrating cold data to object storage.&lt;/li&gt;
&lt;li&gt; This strategy achieves &lt;strong&gt;cost savings of up to 65%&lt;/strong&gt; while maintaining 99.99% availability.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Risk Control and Adversarial Defense
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Adversarial Sample Detection&lt;/strong&gt;: Identifies CAPTCHA images containing adversarial perturbations (e.g., FGSM, PGD attacks).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Behavioral Risk Control&lt;/strong&gt;: Monitors abnormal request patterns (e.g., high-frequency requests from a single IP), automatically triggering human-machine verification or IP blocking.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Implementation Path: From POC to Production
&lt;/h2&gt;

&lt;p&gt;Implementation recommendations for this architecture are structured into four distinct phases:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Duration&lt;/th&gt;
&lt;th&gt;Key Milestones&lt;/th&gt;
&lt;th&gt;Success Metrics&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 1: Infrastructure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1-2 Months&lt;/td&gt;
&lt;td&gt;Build AIOps monitoring baseline, achieve full-link observability&lt;/td&gt;
&lt;td&gt;MTTR (Mean Time To Repair) &amp;lt; 15 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 2: Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2-3 Months&lt;/td&gt;
&lt;td&gt;LLM integrated into error analysis, achieving automated diagnosis reports&lt;/td&gt;
&lt;td&gt;Manual analysis workload reduced by 70%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 3: Automation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3-4 Months&lt;/td&gt;
&lt;td&gt;Build fully automated training pipeline (AutoML + LLM)&lt;/td&gt;
&lt;td&gt;Model iteration cycle &amp;lt; 4 hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 4: Autonomy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6-12 Months&lt;/td&gt;
&lt;td&gt;Achieve LLM-driven autonomous optimization loop&lt;/td&gt;
&lt;td&gt;Manual intervention frequency &amp;lt; 1 time/week&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Challenges and Mitigation Strategies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Challenge 1: Wrong Decisions Caused by LLM Hallucinations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Adopt a &lt;strong&gt;Retrieval-Augmented Generation (RAG)&lt;/strong&gt; architecture, grounding decision bases in a library of real historical cases.&lt;/li&gt;
&lt;li&gt; Establish manual approval nodes: High-risk operations, such as model rollback or data deletion, require human confirmation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Challenge 2: Cost Out of Control
&lt;/h3&gt;

&lt;p&gt;The image analysis cost of GPT-4V can be 50-100 times that of traditional CV models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Layered Processing&lt;/strong&gt;: Utilize lightweight CV models (e.g., BLIP, CLIP, DINO) for simpler scenarios, submitting only complex samples to the LLM.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Token Budget Management&lt;/strong&gt;: Set a maximum token limit per request to prevent cost spikes from abnormal inputs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Challenge 3: Latency-Sensitive Scenarios
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Asynchronous Analysis&lt;/strong&gt;: LLM optimization suggestions are generated via asynchronous processes, ensuring they do not block the real-time recognition path.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Edge Deployment&lt;/strong&gt;: Deploy lightweight LLMs (e.g., Qwen3-8b, Llama-3-8B) on edge nodes, achieving processing times under 500ms.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion: Evolution from Tool to Partner
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://dashboard.capsolver.com/dashboard/overview/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=ai-llm-practice"&gt;CapSolver&lt;/a&gt; AI-LLM architecture signifies a paradigm shift in CAPTCHA recognition, transforming it from static tools into dynamic agents. Its value extends beyond improving recognition accuracy to building a self-evolving technical ecosystem:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Faster Response&lt;/strong&gt;: General templates enable minute-level adaptation.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Deeper Customization&lt;/strong&gt;: Traditional development supports complex business logic.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Continuous Evolution&lt;/strong&gt;: LLM-driven closed loops ensure the system remains current.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;"Future AI systems will not be maintained by humans, but will be digital partners that collaborate with humans and grow autonomously."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With the continuous advancements in multimodal large models (such as GPT-4o, Gemini 1.5 Pro), we anticipate that CAPTCHA recognition will evolve from a tedious technical confrontation into an efficient, secure, and trustworthy automated negotiation process between AI systems.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try it yourself! Use code &lt;code&gt;CAP26&lt;/code&gt; when signing up at &lt;a href="https://dashboard.capsolver.com/dashboard/overview/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=ai-llm-practice"&gt;CapSolver&lt;/a&gt; to receive bonus credits!&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsc8s07utx4yajxrcj87.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsc8s07utx4yajxrcj87.png" width="472" height="140"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q1: Does adding LLM increase recognition latency?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Through a layered architecture design, the real-time recognition path is still handled by optimized CV models (latency &amp;lt; 200ms). The LLM is primarily responsible for offline analysis and strategy optimization. For complex scenarios requiring semantic understanding, lightweight LLMs deployed at the edge (latency &amp;lt; 500ms) or asynchronous processing modes can be utilized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q2: How to handle potential wrong decisions by LLM?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Implement a &lt;strong&gt;Human-in-the-loop&lt;/strong&gt; mechanism: High-risk operations (e.g., full model rollback, data source deletion) necessitate manual approval. Concurrently, establish a sandbox testing environment where all LLM-generated optimization plans must be validated through A/B testing before full deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q3: Is this architecture suitable for small teams?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Yes. A progressive implementation approach is recommended: Initially, leverage cloud-based LLM APIs (e.g., Claude 3 Haiku) for anomaly analysis without building large models; utilize open-source tools (LangChain, MLflow) to construct pipelines. As business needs grow, gradually introduce private deployment and AIOps automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q4: How does the cost compare to traditional pure CV solutions?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: The initial investment increases by approximately 30-40% (primarily due to LLM API calls and engineering transformation). However, the reduction in manual O&amp;amp;M costs through automation typically offsets this incremental investment within 3-6 months. In the long run, improved model iteration efficiency and higher automation rates can reduce the Total Cost of Ownership (TCO) by more than 50%.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>captcha</category>
    </item>
    <item>
      <title>Best 10 No-Code Scrapers to Use in 2026</title>
      <dc:creator>luisgustvo</dc:creator>
      <pubDate>Tue, 27 Jan 2026 06:51:43 +0000</pubDate>
      <link>https://dev.to/luisgustvo/best-10-no-code-scrapers-to-use-in-2026-4cb2</link>
      <guid>https://dev.to/luisgustvo/best-10-no-code-scrapers-to-use-in-2026-4cb2</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj69cz53qyf164j3amtnm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj69cz53qyf164j3amtnm.png" alt="Top 10 No-Code Scrapers to Use in 2026" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigating the market for a dependable no-code scraper can be a complex and lengthy process. With numerous providers branding themselves as "the best," it's easy to get lost in product reviews and feature lists. To simplify your search, we have curated a concise and straightforward guide to the most effective no-code scrapers available in 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a No-Code Scraper?
&lt;/h2&gt;

&lt;p&gt;Before diving into our recommendations, let's define what a "no-code scraper" is. These are &lt;a href="https://www.capsolver.com/blog/web-scraping/what-is-web-scraping?utm_source=devto" rel="noopener noreferrer"&gt;web scraping&lt;/a&gt; tools that enable you to pull data from websites without writing a single line of code. Instead of programming, these platforms provide visual interfaces, point-and-click selectors, or AI-driven prompts to construct web scrapers. They are invaluable for tasks like competitive analysis, price tracking, market research, and lead generation.&lt;/p&gt;

&lt;p&gt;The providers of these tools offer platforms with varying degrees of automation, support, and infrastructure. Key features often include scheduling, cloud-based operation, API access, and integrated proxy rotation.&lt;/p&gt;

&lt;h2&gt;
  
  
  How We Determined the Best No-Code Scrapers
&lt;/h2&gt;

&lt;p&gt;Choosing the right tool requires careful consideration of several factors. We used the following criteria to compile this list of top no-code scrapers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ease of Use:&lt;/strong&gt; A genuine no-code solution should be accessible to users with minimal technical skills. We looked for intuitive interfaces, AI-powered generation, and visual data selection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability and Maintenance:&lt;/strong&gt; Websites are dynamic. The best tools offer self-healing capabilities or automatic updates to ensure uninterrupted data flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure and Scalability:&lt;/strong&gt; Cloud-based architecture, built-in proxies, and automated unblocking are crucial for running scrapers smoothly and at scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Features:&lt;/strong&gt; Advanced functionalities like scheduling, API access, multiple export formats, and platform integrations provide significant added value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer Support:&lt;/strong&gt; Responsive 24/7 support is vital for resolving issues promptly. Comprehensive documentation and dedicated account managers are also a plus.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; Pricing models, plans, and trial policies vary widely. It's important to consider your budget, project scope, and any potential hidden costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ethics and Compliance:&lt;/strong&gt; A reputable provider must adhere to &lt;a href="https://www.capsolver.com/blog/All/web-scraping-legal?utm_source=devto" rel="noopener noreferrer"&gt;web scraping regulations&lt;/a&gt; and data privacy laws. Customer reviews and ethical practices are key indicators of trustworthiness.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With these criteria in mind, let's explore the best no-code scrapers for 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best No-Code Scrapers in 2026
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Bright Data - Scraper Studio
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://brightdata.com/lp/web-data/web-scraper-api" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;Bright Data's Scraper Studio&lt;/strong&gt;&lt;/a&gt; is the clear leader in the no-code scraping field, offering the most robust and comprehensive solution for 2026. Its standout feature is the AI Scraper Studio, a tool that converts natural language prompts into production-ready scrapers in 10-15 minutes, complete with integrated proxies, unblocking, and cloud infrastructure.&lt;/p&gt;

&lt;p&gt;The most significant innovation is its &lt;strong&gt;Self-Healing AI&lt;/strong&gt;. While traditional scrapers fail when websites are updated, Scraper Studio's self-healing function uses AI to automatically repair broken code. This drastically reduces maintenance efforts and ensures continuous data collection without manual fixes. You can also update schemas or add fields using simple prompts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Main Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scraper Types:&lt;/strong&gt; AI-powered custom scrapers for any site, plus over 100 pre-built scrapers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Capabilities:&lt;/strong&gt; Natural language scraper creation, self-healing code, automatic schema updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure:&lt;/strong&gt; Cloud-based execution with built-in proxies (150M+ IPs), &lt;a href="https://www.capsolver.com/blog/The-other-captcha/how-to-solve-captchas-automatically-using-capSolver?utm_source=devto" rel="noopener noreferrer"&gt;automated CAPTCHA solving&lt;/a&gt;, fingerprinting, and unblocking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Benefits:&lt;/strong&gt; Built-in IDE for customization, scheduled runs, API access, multiple export formats (JSON, CSV, Parquet), and direct loading to major cloud storage platforms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support:&lt;/strong&gt; 24/7 live support, extensive documentation, and dedicated account managers for enterprise clients.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Trial:&lt;/strong&gt; A 7-day free trial is available, along with a $500 credit match on the first deposit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Starting Price&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pay-as-you-go:&lt;/strong&gt; $1.50/1K page loads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;380K page loads:&lt;/strong&gt; $1.30/1K page loads ($499/month).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;900K page loads:&lt;/strong&gt; $1.10/1K page loads ($999/month).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2M page loads:&lt;/strong&gt; $1.00/1K page loads ($1,999/month).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise:&lt;/strong&gt; Custom pricing with premium SLA.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Groundbreaking AI that generates scrapers from natural language.&lt;/li&gt;
&lt;li&gt;Industry-first self-healing technology that automates scraper maintenance.&lt;/li&gt;
&lt;li&gt;An all-in-one solution including proxies, unblocking, and cloud infrastructure.&lt;/li&gt;
&lt;li&gt;Scales effortlessly without the need to manage servers.&lt;/li&gt;
&lt;li&gt;Rapid scraper generation (10-15 minutes) with an IDE for advanced customization.&lt;/li&gt;
&lt;li&gt;Access to an award-winning proxy network of over 150M IPs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Premium pricing reflects its enterprise-grade capabilities.&lt;/li&gt;
&lt;li&gt;The extensive feature set might present a learning curve for new users, though the AI assistant mitigates this.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Octoparse
&lt;/h3&gt;

&lt;p&gt;A long-standing player in the market, &lt;a href="https://www.octoparse.com/" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;Octoparse&lt;/strong&gt;&lt;/a&gt; provides a visual point-and-click interface for building scrapers. Offering both cloud and desktop versions, it's a solid choice for users who prefer a hands-on, visual workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Main Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scraper Types:&lt;/strong&gt; Visual point-and-click builder, template-based scrapers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution:&lt;/strong&gt; Cloud-based and desktop application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Benefits:&lt;/strong&gt; Task scheduler, API access, pre-built templates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support:&lt;/strong&gt; Email support, knowledge base, and a community forum.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Trial:&lt;/strong&gt; A free plan with limitations is available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Starting Price&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free Plan:&lt;/strong&gt; Limited features and data extraction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standard:&lt;/strong&gt; From $75/month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional:&lt;/strong&gt; From $209/month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise:&lt;/strong&gt; Custom pricing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An intuitive visual interface suitable for non-technical users.&lt;/li&gt;
&lt;li&gt;Availability of both desktop and cloud versions.&lt;/li&gt;
&lt;li&gt;A library of pre-built templates for popular websites.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lacks AI-powered generation or self-healing features.&lt;/li&gt;
&lt;li&gt;Manual scraper construction can be time-consuming.&lt;/li&gt;
&lt;li&gt;Proxy management and unblocking may require extra configuration or costs.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.capsolver.com/blog/The%20other%20captcha/how-to-solve-captcha-while-web-scraping-2025?utm_source=devto" rel="noopener noreferrer"&gt;CAPTCHA challenges&lt;/a&gt; might necessitate separate solving tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Apify
&lt;/h3&gt;

&lt;p&gt;Apify is a versatile web scraping and automation platform offering both no-code and low-code solutions. It features a marketplace of pre-built "actors" (scrapers) and tools for creating custom ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Main Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scraper Types:&lt;/strong&gt; Marketplace of actors, custom scraper builder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure:&lt;/strong&gt; Cloud-based with proxy support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Benefits:&lt;/strong&gt; Extensive integrations, workflow automation, API access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support:&lt;/strong&gt; Community forum, documentation, and tiered paid support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Trial:&lt;/strong&gt; Free tier with a $5 monthly credit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Starting Price&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free:&lt;/strong&gt; $5 monthly credit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Starter:&lt;/strong&gt; From $49/month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale:&lt;/strong&gt; From $499/month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business:&lt;/strong&gt; Custom pricing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A large marketplace of pre-built scrapers.&lt;/li&gt;
&lt;li&gt;Excellent for creating automation workflows.&lt;/li&gt;
&lt;li&gt;A strong and active developer community.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;True "no-code" options are somewhat limited; many features lean towards low-code.&lt;/li&gt;
&lt;li&gt;Pre-built actors may not perfectly match specific requirements.&lt;/li&gt;
&lt;li&gt;Pricing is based on compute units, which can be complex to estimate.&lt;/li&gt;
&lt;li&gt;No self-healing capabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. ParseHub
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.parsehub.com/" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;ParseHub&lt;/strong&gt;&lt;/a&gt; is a desktop-based no-code scraper that employs a visual selector interface. It is a popular choice among freelancers and small businesses looking for an affordable solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Main Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scraper Types:&lt;/strong&gt; Visual selector-based builder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution:&lt;/strong&gt; Desktop application with cloud-run options.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Benefits:&lt;/strong&gt; JavaScript rendering, scheduled runs, API access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support:&lt;/strong&gt; Email support and documentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Trial:&lt;/strong&gt; Free plan for up to 5 projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Starting Price&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free Plan:&lt;/strong&gt; 5 public projects, 200 pages per run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standard:&lt;/strong&gt; From $149/month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional:&lt;/strong&gt; From $499/month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parsed On-Demand:&lt;/strong&gt; $0.75 per 1K page loads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A generous free plan for small-scale projects.&lt;/li&gt;
&lt;li&gt;Capable of handling JavaScript-heavy websites.&lt;/li&gt;
&lt;li&gt;Well-suited for simple to moderately complex scraping tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Being a desktop-only application limits accessibility.&lt;/li&gt;
&lt;li&gt;Lacks self-healing or AI-driven features.&lt;/li&gt;
&lt;li&gt;Requires manual maintenance when websites change.&lt;/li&gt;
&lt;li&gt;Scaling capabilities are limited compared to cloud-native platforms.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. ScrapeStorm
&lt;/h3&gt;

&lt;p&gt;ScrapeStorm is an AI-assisted visual scraper that uses intelligent algorithms to automatically identify data on web pages. It is available as both a desktop application and a cloud service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Main Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scraper Types:&lt;/strong&gt; AI-powered data identification, visual flowchart mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution:&lt;/strong&gt; Desktop and cloud-based.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Benefits:&lt;/strong&gt; Automatic pagination, scheduled tasks, multiple export formats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support:&lt;/strong&gt; Email support and tutorials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Trial:&lt;/strong&gt; A free version with limitations is offered.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Starting Price&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free:&lt;/strong&gt; Limited features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional:&lt;/strong&gt; From $49.99/month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise:&lt;/strong&gt; From $159/month.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-powered data detection simplifies setup.&lt;/li&gt;
&lt;li&gt;A user-friendly and intuitive interface.&lt;/li&gt;
&lt;li&gt;Affordable pricing for individuals and small teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI is focused on data detection, not scraper generation or self-healing.&lt;/li&gt;
&lt;li&gt;Limited options for proxy integration.&lt;/li&gt;
&lt;li&gt;Less suitable for highly complex or large-scale projects.&lt;/li&gt;
&lt;li&gt;Manual intervention is necessary when site structures change.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. WebHarvy
&lt;/h3&gt;

&lt;p&gt;WebHarvy is a point-and-click desktop scraper for Windows users who need a simple, self-contained tool without cloud dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Main Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scraper Types:&lt;/strong&gt; Visual point-and-click desktop application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution:&lt;/strong&gt; Desktop-only (Windows).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Benefits:&lt;/strong&gt; Automatic pattern detection, multiple export formats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support:&lt;/strong&gt; Email support and video tutorials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Trial:&lt;/strong&gt; A free trial is available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Starting Price&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single User License:&lt;/strong&gt; $139 (one-time payment).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business License:&lt;/strong&gt; From $349 (one-time payment).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A one-time payment model with no recurring subscription fees.&lt;/li&gt;
&lt;li&gt;A simple interface designed for basic scraping tasks.&lt;/li&gt;
&lt;li&gt;Highly affordable for individual users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Restricted to the Windows desktop environment.&lt;/li&gt;
&lt;li&gt;No cloud infrastructure or built-in proxies.&lt;/li&gt;
&lt;li&gt;Limited scalability for larger projects.&lt;/li&gt;
&lt;li&gt;Requires manual maintenance when websites are updated.&lt;/li&gt;
&lt;li&gt;Lacks AI or self-healing functionalities.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. Import.io
&lt;/h3&gt;

&lt;p&gt;Import.io is an enterprise-grade data extraction platform that provides both no-code tools and fully managed services, targeting businesses that require reliable data at scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Main Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scraper Types:&lt;/strong&gt; Point-and-click extractor, API access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure:&lt;/strong&gt; Cloud-based with managed proxies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Benefits:&lt;/strong&gt; Data transformation tools, integrations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support:&lt;/strong&gt; Dedicated support and account management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Trial:&lt;/strong&gt; Demo available upon request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Starting Price&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom enterprise pricing (typically starts at $299+/month).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enterprise-level reliability and performance.&lt;/li&gt;
&lt;li&gt;Managed service options for a hands-off approach.&lt;/li&gt;
&lt;li&gt;Well-suited for non-technical business teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High price point, making it less accessible for smaller businesses.&lt;/li&gt;
&lt;li&gt;Less flexible compared to modern AI-powered tools.&lt;/li&gt;
&lt;li&gt;Does not have self-healing capabilities.&lt;/li&gt;
&lt;li&gt;Pricing is not transparent.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. Mozenda
&lt;/h3&gt;

&lt;p&gt;Mozenda is another enterprise-focused data extraction platform that pairs a visual scraper builder with managed services for businesses seeking a hands-off solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Main Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scraper Types:&lt;/strong&gt; Visual agent builder, managed services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure:&lt;/strong&gt; Cloud-based execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Benefits:&lt;/strong&gt; Data preparation tools, API access, scheduling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support:&lt;/strong&gt; 24/7 support and account management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Trial:&lt;/strong&gt; Demo available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Starting Price&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom enterprise pricing (typically starts at $250+/month).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enterprise-oriented with white-glove service options.&lt;/li&gt;
&lt;li&gt;A visual builder that empowers non-technical users.&lt;/li&gt;
&lt;li&gt;A strong support infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An expensive option, particularly for small businesses.&lt;/li&gt;
&lt;li&gt;Scraper building can be slower compared to AI-driven tools.&lt;/li&gt;
&lt;li&gt;Lacks self-healing capabilities.&lt;/li&gt;
&lt;li&gt;Often requires significant manual configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9. Diffbot
&lt;/h3&gt;

&lt;p&gt;Diffbot employs AI and computer vision to automatically structure web data. Instead of building scrapers, users leverage Diffbot's Knowledge Graph API to extract and structure data automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Main Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scraper Types:&lt;/strong&gt; AI-powered automatic extraction, Knowledge Graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure:&lt;/strong&gt; Cloud-based API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Benefits:&lt;/strong&gt; Entity extraction, natural language processing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support:&lt;/strong&gt; Documentation and email support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Trial:&lt;/strong&gt; Trial available upon request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Starting Price&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom enterprise pricing (typically $299+/month).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advanced AI for automated data structuring.&lt;/li&gt;
&lt;li&gt;Excellent for extracting entities and their relationships.&lt;/li&gt;
&lt;li&gt;Capable of handling diverse and unstructured content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Very expensive for many common use cases.&lt;/li&gt;
&lt;li&gt;Offers less granular control over the extraction logic.&lt;/li&gt;
&lt;li&gt;May be overkill for simple scraping needs.&lt;/li&gt;
&lt;li&gt;Not a true "no-code" tool, as it requires API integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10. Helium Scraper
&lt;/h3&gt;

&lt;p&gt;Helium Scraper is a lightweight desktop application providing visual scraping for Windows users. It is tailored for those who prefer a simple, local solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Main Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scraper Types:&lt;/strong&gt; Visual selector desktop application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution:&lt;/strong&gt; Desktop-only (Windows).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Benefits:&lt;/strong&gt; JavaScript support, custom actions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support:&lt;/strong&gt; Documentation and email support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Trial:&lt;/strong&gt; 10-day free trial.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Starting Price&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standard:&lt;/strong&gt; $99 (one-time payment).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional:&lt;/strong&gt; $249 (one-time payment).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A one-time purchase with no recurring fees.&lt;/li&gt;
&lt;li&gt;A simple and clean visual interface.&lt;/li&gt;
&lt;li&gt;An affordable choice for small-scale projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Desktop-only with no cloud option.&lt;/li&gt;
&lt;li&gt;Limited to the Windows operating system.&lt;/li&gt;
&lt;li&gt;Lacks built-in proxies or unblocking features.&lt;/li&gt;
&lt;li&gt;Requires manual maintenance.&lt;/li&gt;
&lt;li&gt;Not designed for large-scale operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Choosing the Right No-Code Scraper
&lt;/h2&gt;

&lt;p&gt;To select the best no-code scraper, it's crucial to match the tool's strengths to your use case. Here’s a summary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI-Powered Scrapers (like Bright Data):&lt;/strong&gt; Best for users who want to generate scrapers from plain text prompts and benefit from self-healing technology that minimizes maintenance. Ideal for scaling across many websites.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual Point-and-Click Scrapers:&lt;/strong&gt; A good fit for users who prefer a visual, hands-on approach. They require more manual setup but offer direct control over the scraping logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template-Based Scrapers:&lt;/strong&gt; The quickest way to start if a template for your target site exists, but they are inflexible and can break easily.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desktop Applications:&lt;/strong&gt; Cost-effective for small, local scraping tasks with one-time payment models. They lack cloud infrastructure and scalability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise Managed Services:&lt;/strong&gt; The optimal choice for companies wanting a completely hands-off solution, but this comes at a premium price.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When implementing any web scraping project, anticipate obstacles. Modern websites use anti-bot measures like &lt;a href="https://www.capsolver.com/blog/Cloudflare/bypass-cloudflare-challenge-2025?utm_source=devto" rel="noopener noreferrer"&gt;Cloudflare challenges&lt;/a&gt;, &lt;a href="https://www.capsolver.com/blog/reCAPTCHA/how-to-solve-recaptcha-v2?utm_source=devto" rel="noopener noreferrer"&gt;reCAPTCHA&lt;/a&gt;, and &lt;a href="https://www.capsolver.com/blog/aws%20waf/best-aws-waf-captcha-solver?utm_source=devto" rel="noopener noreferrer"&gt;AWS WAF protection&lt;/a&gt;. For reliable data collection, pair your scraper with quality &lt;a href="https://www.capsolver.com/blog/All/top-10-proxy-providers-2025?utm_source=devto" rel="noopener noreferrer"&gt;proxy services&lt;/a&gt; and a robust &lt;a href="https://www.capsolver.com/blog/All/best-captcha-solver?utm_source=devto" rel="noopener noreferrer"&gt;CAPTCHA solving solution&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The right no-code scraper depends on your specific priorities, whether it's ease of use, AI features, maintenance load, scalability, or budget. For 2026, &lt;strong&gt;Bright Data's Scraper Studio&lt;/strong&gt; stands out with its innovative AI-powered generation and unique self-healing technology.&lt;/p&gt;

&lt;p&gt;Whether you are building your first scraper or upgrading your data infrastructure, we hope this guide helps you select a provider that aligns with your goals and can grow with your needs.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Integrating CapSolver with Maxun for Seamless Web Data Extraction</title>
      <dc:creator>luisgustvo</dc:creator>
      <pubDate>Thu, 22 Jan 2026 03:31:07 +0000</pubDate>
      <link>https://dev.to/luisgustvo/integrating-capsolver-with-maxun-for-seamless-web-data-extraction-1bgh</link>
      <guid>https://dev.to/luisgustvo/integrating-capsolver-with-maxun-for-seamless-web-data-extraction-1bgh</guid>
      <description>&lt;p&gt;In the world of web scraping, &lt;strong&gt;Maxun&lt;/strong&gt; has emerged as a practical open-source, no-code platform for automating data collection. Its robot-based approach allows developers and teams to build scraping pipelines efficiently. However, as many developers know, CAPTCHAs often present a significant hurdle in automated workflows.&lt;/p&gt;

&lt;p&gt;To maintain reliable data extraction, integrating a CAPTCHA solving service like &lt;a href="https://www.capsolver.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=maxun" rel="noopener noreferrer"&gt;CapSolver&lt;/a&gt; can help. This guide explores how to combine Maxun's flexibility with CapSolver's automated solving capabilities to handle protected websites.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Maxun?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/getmaxun/maxun" rel="noopener noreferrer"&gt;Maxun&lt;/a&gt; is an open-source platform designed to simplify web data extraction. It allows users to "train" robots to perform scraping tasks through a visual interface or via its TypeScript/Node.js SDK.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Capabilities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visual Robot Builder&lt;/strong&gt;: Create extraction workflows without writing code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer SDK&lt;/strong&gt;: A robust SDK for programmatic control over robots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible Deployment&lt;/strong&gt;: Supports both self-hosted (Docker) and cloud-based environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Selectors&lt;/strong&gt;: Automatically identifies elements to improve scraper stability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in Scheduling&lt;/strong&gt;: Run extraction tasks using cron-based schedules.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SDK Class&lt;/th&gt;
&lt;th&gt;Functionality&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Extract&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Structured data extraction using CSS selectors or LLMs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scrape&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Converts pages into Markdown, HTML, or static screenshots.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Crawl&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Discovers and processes multiple pages via sitemaps or link following.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Search&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Extracts content directly from search engine results.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Why Use CapSolver with Maxun?
&lt;/h2&gt;

&lt;p&gt;When scraping sites protected by anti-bot mechanisms, CAPTCHAs can interrupt your Maxun robots. &lt;a href="https://www.capsolver.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=maxun" rel="noopener noreferrer"&gt;CapSolver&lt;/a&gt; provides an API-based solution to bypass these challenges.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supported Verification Types
&lt;/h3&gt;

&lt;p&gt;CapSolver handles various common challenges, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.capsolver.com/products/recaptchav2?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=maxun" rel="noopener noreferrer"&gt;&lt;strong&gt;reCAPTCHA v2 / v3&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.capsolver.com/products/cloudflare?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=maxun" rel="noopener noreferrer"&gt;&lt;strong&gt;Cloudflare Turnstile&lt;/strong&gt;&lt;/a&gt; &amp;amp; &lt;a href="https://docs.capsolver.com/en/guide/captcha/cloudflare_challenge/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=maxun" rel="noopener noreferrer"&gt;&lt;strong&gt;5-second Challenge&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.capsolver.com/products/awswaf?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=maxun" rel="noopener noreferrer"&gt;&lt;strong&gt;AWS WAF CAPTCHA&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By integrating these two tools, you can ensure that your data extraction remains automated and requires less manual intervention when encountering blocked pages.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node.js (v18+)&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://dashboard.capsolver.com/passport/login?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=maxun" rel="noopener noreferrer"&gt;CapSolver API Key&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A Maxun instance (Cloud or Self-hosted)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;Install the Maxun SDK and Axios for API requests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;maxun-sdk axios
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Environment Configuration
&lt;/h3&gt;

&lt;p&gt;Set up your &lt;code&gt;.env&lt;/code&gt; file with the necessary credentials:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CAPSOLVER_API_KEY=your_capsolver_key
MAXUN_API_KEY=your_maxun_key
MAXUN_BASE_URL=https://app.maxun.dev/api/sdk # Use your local URL if self-hosted
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Implementation: CapSolver Service
&lt;/h2&gt;

&lt;p&gt;Below is a TypeScript service to handle CAPTCHA solving logic. This service uses a polling mechanism to retrieve results from CapSolver's asynchronous API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AxiosInstance&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;TaskResult&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;gRecaptchaResponse&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;token&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CapSolverService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AxiosInstance&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.capsolver.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;pollResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;attempts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;TaskResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;attempts&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/getTaskResult&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;clientKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;

      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ready&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;failed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Task failed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Timeout&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;solveReCaptchaV2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;siteKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/createTask&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;clientKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ReCaptchaV2TaskProxyLess&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;websiteURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;websiteKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;siteKey&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;solution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pollResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gRecaptchaResponse&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CapSolverService&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Integration Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Pre-Authentication with Maxun
&lt;/h3&gt;

&lt;p&gt;For many sites, you need to solve the CAPTCHA and establish a session before the scraper can access the data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Scrape&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;maxun-sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CapSolverService&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./CapSolverService&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;runScraper&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;capSolver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CapSolverService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CAPSOLVER_API_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scraper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Scrape&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MAXUN_API_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;targetUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://example.com/data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;siteKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SITE_KEY_HERE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Solve CAPTCHA&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;capSolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;solveReCaptchaV2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;targetUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;siteKey&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Example: Submit token to the site to get a session&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;authRes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;targetUrl&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/verify`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;g-recaptcha-response&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cookies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;authRes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;set-cookie&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="c1"&gt;// Run Maxun robot with the session&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;robot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;scraper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-robot&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetUrl&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Note: Pass cookies to the robot if supported by your Maxun version&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;robot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Handling Parallel Tasks
&lt;/h3&gt;

&lt;p&gt;When running multiple robots, you can manage CAPTCHA solving concurrently to improve throughput.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;processBatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Logic for individual CAPTCHA solving and scraping&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Error Handling&lt;/strong&gt;: Always implement retries for CAPTCHA solving, as network issues or timeouts can occur.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Balance Monitoring&lt;/strong&gt;: Check your CapSolver balance programmatically to avoid workflow interruptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token Management&lt;/strong&gt;: CAPTCHA tokens usually have a short lifespan (around 90-120 seconds). Ensure you use them immediately after solving.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Combining Maxun with &lt;a href="https://www.capsolver.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=maxun" rel="noopener noreferrer"&gt;CapSolver&lt;/a&gt; provides a scalable way to handle web data extraction even when faced with modern anti-bot protections. By separating the CAPTCHA solving logic from the extraction process, you can maintain clean and maintainable code.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: New users can use the code &lt;strong&gt;MAXUN&lt;/strong&gt; at CapSolver for a 6% bonus on their first deposit.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is Maxun free?&lt;/strong&gt;&lt;br&gt;
Yes, Maxun is open-source and can be self-hosted for free. They also offer a managed cloud service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What CAPTCHAs does CapSolver support?&lt;/strong&gt;&lt;br&gt;
It supports reCAPTCHA, Cloudflare Turnstile, AWS WAF, and several others.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I find a site key?&lt;/strong&gt;&lt;br&gt;
You can usually find it in the HTML source code by searching for &lt;code&gt;data-sitekey&lt;/code&gt; or checking network requests to the CAPTCHA provider.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>programming</category>
      <category>powerfuldevs</category>
    </item>
  </channel>
</rss>
