<?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: 2captcha</title>
    <description>The latest articles on DEV Community by 2captcha (@2captcha).</description>
    <link>https://dev.to/2captcha</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%2F471266%2Ff9b4f21c-eaaa-4c88-b2da-cbc28dfc653d.png</url>
      <title>DEV Community: 2captcha</title>
      <link>https://dev.to/2captcha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/2captcha"/>
    <language>en</language>
    <item>
      <title>How to Solve and Overcome reCAPTCHA Automatically with Puppeteer and Auto Captcha Integration</title>
      <dc:creator>2captcha</dc:creator>
      <pubDate>Mon, 18 Nov 2024 13:28:59 +0000</pubDate>
      <link>https://dev.to/2captcha/how-to-solve-and-overcome-recaptcha-automatically-with-puppeteer-and-auto-captcha-integration-6i</link>
      <guid>https://dev.to/2captcha/how-to-solve-and-overcome-recaptcha-automatically-with-puppeteer-and-auto-captcha-integration-6i</guid>
      <description>&lt;h2&gt;
  
  
  Automating reCAPTCHA Bypass Using Puppeteer
&lt;/h2&gt;

&lt;p&gt;This comprehensive guide walks you through the process of bypassing reCAPTCHA challenges using Puppeteer and an auto captcha-solving technique.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can read original article here - &lt;a href="https://2captcha.com/blog/goolge-recaptcha-solver-puppeteer-and-auto-fill" rel="noopener noreferrer"&gt;How to automatically solve and bypass reCAPTCHA using Puppeteer and Auto Captcha Filler&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Discover how to programmatically solve Google reCAPTCHA using Puppeteer alongside an automated captcha resolution system in this step-by-step tutorial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automating reCAPTCHA Challenges Using Puppeteer and Captcha Solvers
&lt;/h2&gt;

&lt;p&gt;Here, we demonstrate the process of bypassing image-based reCAPTCHA tasks (3x3 or 4x4 grids) by leveraging Puppeteer in combination with 2Captcha, a third-party captcha-solving service.&lt;/p&gt;

&lt;p&gt;The script automates interaction with reCAPTCHA by retrieving the challenge, sending it for API-based resolution, and simulating user actions like clicking the correct answers provided by the solver.&lt;/p&gt;

&lt;p&gt;This fully automated approach simplifies CAPTCHA bypassing in web automation scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up the Script
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Clone the Repository&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;git clone git@github.com/2captcha/puppeteer-recaptcha-solver-using-clicks.git  
cd puppeteer-recaptcha-solver-using-clicks  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Install Dependencies&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;npm install 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Run the Script&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;npm run start 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configuration Instructions
&lt;/h2&gt;

&lt;p&gt;To enable the script, configure your 2Captcha &lt;code&gt;API key&lt;/code&gt; by setting the APIKEY environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export APIKEY=your_api_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How the Script Operates
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CAPTCHA Extraction&lt;/strong&gt;: The challenge image and parameters are programmatically retrieved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Submission&lt;/strong&gt;: The image data is sent to the solver API, which resolves the CAPTCHA by identifying grid cells containing target objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interaction Simulation&lt;/strong&gt;: Using the provided solution, Puppeteer clicks the required cells in the reCAPTCHA widget and submits the challenge.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example of Extraction Output:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{  
  "rows": 3,  
  "columns": 3,  
  "type": "GridTask",  
  "comment": "Select all images with crosswalks. Click verify when none are left.",  
  "body": "XXXXXXXX"  
}  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Example of Solver Output:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{  
  "status": 1,  
  "data": "click:3/6/8",  
  "id": "XXXXXXXX"  
}  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;click:3/6/8&lt;/code&gt; directs you to click the 3rd, 6th, and 8th grid squares. Grid numbering begins at the top-left corner, progressing row by row.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Token-Free Approach&lt;/strong&gt;: Avoids managing tokens manually, instead relying on grid interactions to validate responses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simplified Process&lt;/strong&gt;: Leverages reCAPTCHA’s built-in verification to simplify logic and reduce complexity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Reduces reliance on token management.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mimics user behavior, enhancing compatibility with reCAPTCHA systems.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Challenges:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Requires browser automation, which adds code complexity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CAPTCHA-solving cost and speed may vary with task difficulty.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Error Management
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unsolvable CAPTCHAs&lt;/strong&gt;: If a CAPTCHA is deemed unsolvable, retry or escalate the task.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rate Limits&lt;/strong&gt;: Excessive requests may temporarily block your IP; mitigate this by switching IPs or waiting before retrying.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For Python users, check out our repository for similar automation examples using Selenium and Python: [reCAPTCHA Solver with 2Captcha and Selenium].&lt;/p&gt;

</description>
      <category>puppeter</category>
      <category>captcha</category>
      <category>webdev</category>
      <category>recaptcha</category>
    </item>
    <item>
      <title>Automating reCAPTCHA Bypass with Selenium and Captcha Solvers</title>
      <dc:creator>2captcha</dc:creator>
      <pubDate>Mon, 18 Nov 2024 12:25:51 +0000</pubDate>
      <link>https://dev.to/2captcha/automating-recaptcha-bypass-with-selenium-and-captcha-solvers-3c68</link>
      <guid>https://dev.to/2captcha/automating-recaptcha-bypass-with-selenium-and-captcha-solvers-3c68</guid>
      <description>&lt;h2&gt;
  
  
  Efficiently Solving reCAPTCHA Challenges Using Selenium
&lt;/h2&gt;

&lt;p&gt;This guide provides a detailed walkthrough for bypassing Google reCAPTCHA challenges using Selenium and automated captcha-solving solutions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can read original article here - &lt;a href="https://2captcha.com/blog/goolge-recaptcha-solver-selenium-and-auto-fill" rel="noopener noreferrer"&gt;How to automatically solve and bypass reCAPTCHA using Selenium and Auto Captcha Filler&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Learn the steps to seamlessly automate solving image-based reCAPTCHA tasks through Selenium and third-party captcha-solving APIs in this tutorial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automating CAPTCHA Handling with Selenium and Grid-Based Methods
&lt;/h2&gt;

&lt;p&gt;This article outlines the process for bypassing image-based reCAPTCHA challenges (e.g., 3x3 or 4x4 grids) by combining Selenium with the 2Captcha service.&lt;/p&gt;

&lt;p&gt;Here’s how the script operates:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Challenge Detection&lt;/strong&gt;: Identifies the reCAPTCHA widget on the target webpage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Collection&lt;/strong&gt;: Retrieves necessary CAPTCHA parameters and images.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;External Solving&lt;/strong&gt;: Sends the extracted data to the captcha solver API for processing and receives the solution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interaction Simulation&lt;/strong&gt;: Simulates user behavior by clicking or submitting the solution to reCAPTCHA, bypassing detection systems.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This method fully automates the bypassing process, streamlining CAPTCHA handling for web automation tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up the Environment
&lt;/h2&gt;

&lt;p&gt;Clone the Repository&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone git@github.com/2captcha/selenium-recaptcha-solver-using-grid.git  
cd selenium-recaptcha-solver-using-grid  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Dependencies&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install -r requirements.txt 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the Script&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configuration Guide
&lt;/h2&gt;

&lt;p&gt;To activate the script, set your 2Captcha API key as an environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export APIKEY=your_api_key  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How the Solution Works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Data Extraction: The script retrieves the CAPTCHA challenge and relevant parameters programmatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;API Communication: Sends the image data to a third-party solver using the grid method to identify target areas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User Interaction Simulation: Selenium clicks the appropriate areas based on the solver’s response and verifies the solution.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Example of CAPTCHA Extraction Output:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{  
  "rows": 3,  
  "columns": 3,  
  "type": "GridTask",  
  "comment": "Select all images with crosswalks. Click verify once there are none left.",  
  "body": "XXXXXXXX"  
}  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Example of Solver Response:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{  
  "status": 1,  
  "data": "click:3/6/8",  
  "id": "XXXXXXXX"  
}  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;click:3/6/8&lt;/code&gt; specifies the grid cells to click, starting from the top-left and proceeding row by row.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Selenium WebDriver Integration&lt;/strong&gt;: Handles browser-based CAPTCHA interactions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;2Captcha API Usage&lt;/strong&gt;: Solves complex image challenges efficiently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Support for Grid Variants&lt;/strong&gt;: Works with both 3x3 and 4x4 reCAPTCHA grids.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Error Handling Mechanisms&lt;/strong&gt;: Manages CAPTCHA failures and retries.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Bypasses direct token management by leveraging visual interactions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simplifies CAPTCHA handling with built-in reCAPTCHA validation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Challenges:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Relies on Selenium for browser automation, which requires additional resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The cost and solving time depend on CAPTCHA complexity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Error Handling
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unsolvable CAPTCHAs&lt;/strong&gt;: Some challenges may be too complex for solvers. Add retry or escalation mechanisms to handle these scenarios.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rate Limiting&lt;/strong&gt;: ReCAPTCHA may block repeated requests from the same IP. Mitigate this by switching IPs or pausing before retrying.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For those working with JavaScript, a similar repository demonstrates how to automate CAPTCHA handling with Puppeteer: [reCAPTCHA Solver Using 2Captcha and Puppeteer].&lt;/p&gt;

</description>
      <category>selenium</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Bypassing CAPTCHA with Python: What’s the Challenge? Certain Nuances Exist</title>
      <dc:creator>2captcha</dc:creator>
      <pubDate>Tue, 29 Oct 2024 09:52:26 +0000</pubDate>
      <link>https://dev.to/2captcha/bypassing-captcha-with-python-whats-the-challenge-certain-nuances-exist-3l1g</link>
      <guid>https://dev.to/2captcha/bypassing-captcha-with-python-whats-the-challenge-certain-nuances-exist-3l1g</guid>
      <description>&lt;p&gt;I am not a developer by profession, but I work closely within those circles — let’s call it the Python-adjacent crowd. I know some developers, and even more so, colleagues who specialize in the field.&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%2F2hhpitvatbx34y03aqw1.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%2F2hhpitvatbx34y03aqw1.jpg" alt="Image description" width="700" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As it happens, I needed to set up a CAPTCHA-solving mechanism using Python for an important project — an Amazon parser. I tried countless approaches, burned through tons of GPT prompts, but the infamous Amazon CAPTCHA was unyielding. Eventually, through a bit of crowd-sourcing (well, I asked for help, and a colleague provided the solution), a Python script for CAPTCHA bypass was created. Sharing it publicly is driven purely by benevolent motives with a bit of personal interest. I need advice on optimizing this script’s performance, as even after extensive testing, it remains unstable. We’ve tried multiple approaches, broken several libraries, and still haven’t achieved a reliable script.&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%2Ffyo18wo1bwbc10aj9sqt.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%2Ffyo18wo1bwbc10aj9sqt.jpg" alt="Image description" width="700" height="700"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s go over the steps:&lt;/p&gt;

&lt;h2&gt;
  
  
  General Overview of the Python CAPTCHA Bypass Script
&lt;/h2&gt;

&lt;p&gt;The CAPTCHA bypass script in Python works as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Imports the necessary libraries.&lt;/li&gt;
&lt;li&gt;Configures proxy settings.&lt;/li&gt;
&lt;li&gt;Opens Amazon’s registration page.&lt;/li&gt;
&lt;li&gt;Solves the first CAPTCHA (skips if none appears).&lt;/li&gt;
&lt;li&gt;Completes the registration form.&lt;/li&gt;
&lt;li&gt;Solves the second CAPTCHA using a coordinate-based method.&lt;/li&gt;
&lt;li&gt;Verifies the CAPTCHA solution.&lt;/li&gt;
&lt;li&gt;Closes the browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, let’s take a closer look at each step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Required Python Libraries for CAPTCHA Solving
&lt;/h2&gt;

&lt;p&gt;The script relies on several libraries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;os, base64, BytesIO&lt;/strong&gt; - standard Python libraries used for file system operations, encoding images in base64, and working with byte streams (these libraries support CAPTCHA-solving in image format).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;seleniumbase.Driver, selenium.webdriver.common.by.By, selenium.webdriver.common.action_chains.ActionChains&lt;/strong&gt; - These libraries enable Selenium-driven browser control, allowing element searches on web pages and complex actions (like clicking specific coordinates). Essentially, this set is focused on coordinate-based CAPTCHA solving, though all CAPTCHA interactions here depend on Selenium, making it a key library set.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TwoCaptcha&lt;/strong&gt;: This library connects to the &lt;a href="//2captcha.com"&gt;2Captcha&lt;/a&gt; service for automated CAPTCHA recognition (naturally, Python CAPTCHA solving is implemented through an external service, in our case, 2Captcha).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Proxy Configuration for Script Functionality
&lt;/h2&gt;

&lt;p&gt;Initially, the script was designed to retrieve proxies from a file. But as I’m somewhat lazy (What? Create a proxy file, figure out the right format, and prepare the proxies? You’ve got to be kidding!), I added the option to use proxies directly from the code.&lt;/p&gt;

&lt;p&gt;The script checks first if a proxy file exists, and if it doesn’t, it loads the proxy from the code. If neither contains proxy data, the script simply gives up and shuts down (just like some people — “I’m a simple person, if no tasks are assigned, I just scroll through videos”).&lt;/p&gt;

&lt;p&gt;In modern web scraping, bypassing CAPTCHA without proxies is almost unheard of (especially for high-volume scraping), regardless of whether you’re using Python or another language.&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%2Fkmbxafx4m47r4x64fqzg.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%2Fkmbxafx4m47r4x64fqzg.jpg" alt="Image description" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Opening the Amazon Registration Page
&lt;/h2&gt;

&lt;p&gt;Next, the script opens Amazon’s registration page (handled by the function &lt;code&gt;driver.uc_open_with_reconnect&lt;/code&gt;). After all, the goal here is to complete the registration on the site, not just solve CAPTCHA (though it currently isn’t doing much beyond that, to be honest).&lt;/p&gt;

&lt;h2&gt;
  
  
  Solving the First CAPTCHA in Python
&lt;/h2&gt;

&lt;p&gt;Finally, we arrive at the core function (or rather, part of it) — CAPTCHA bypass or skip if no CAPTCHA appears. We’re talking about Amazon’s simple text CAPTCHA, which sometimes shows up, sometimes doesn’t (Amazon seems to have its off days).&lt;/p&gt;

&lt;p&gt;Here’s how it works: the script uses Selenium to locate the CAPTCHA image on the page, takes a screenshot, converts it to base64, and sends the encoded data to 2Captcha. Once the response is received, the text is entered into a designated field, and the “Continue” button is clicked.&lt;/p&gt;

&lt;p&gt;If no CAPTCHA is present, this step is skipped, and the script proceeds to the next section.&lt;/p&gt;

&lt;h2&gt;
  
  
  Filling Out the Registration Form
&lt;/h2&gt;

&lt;p&gt;As you remember, the script opened the registration page before attempting to solve the CAPTCHA. Now, it returns to that page to fill out the registration form.&lt;/p&gt;

&lt;p&gt;The registration form data is loaded directly from the code. This approach was chosen to simplify the CAPTCHA recognition module, though ideally, this could be improved by adding a solution that pulls form data from a file, filling out multiple forms automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python CAPTCHA Bypass via Coordinate-Based Method
&lt;/h2&gt;

&lt;p&gt;Throughout the testing phase, we encountered no issues with the first CAPTCHA (Amazon seemed to be in a good mood and didn’t issue the text CAPTCHA). However, the second CAPTCHA raised questions, both for the script and the community.&lt;/p&gt;

&lt;p&gt;Here’s the breakdown:&lt;/p&gt;

&lt;p&gt;The second CAPTCHA is more complex and requires clicking on specific coordinates to solve it. The script’s workflow is as follows: it takes a screenshot, sends it to the service to get coordinates, and then uses &lt;code&gt;ActionChains&lt;/code&gt; to move the cursor to those coordinates, switches to the frame, and clicks the confirm button.&lt;/p&gt;

&lt;p&gt;But here comes the snag. Occasionally, either during recognition or verification, the process stalls. The CAPTCHA might not resolve, or the allotted time for solving expires before the correct result is returned. While most cases proceed smoothly, this rare exception is puzzling and persistent.&lt;/p&gt;

&lt;p&gt;Below is the script itself. It may be useful to someone, or perhaps someone in the comments can suggest improvements to address this issue?&lt;/p&gt;

&lt;p&gt;Or maybe it can’t be fixed, because, after all — “This is Amazon”...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import os
import base64
from io import BytesIO
from seleniumbase import Driver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from twocaptcha import TwoCaptcha  # pip3 install 2captcha-python

# Manual proxy input
manual_proxy = "http://login:password@ip:port"  # Replace with your proxy

# Function to read proxy from file
def get_proxy_from_file(file_path):
    if os.path.exists(file_path):
        with open(file_path, 'r') as file:
            proxy = file.read().strip()
            return proxy
    return None

# Attempt to connect via proxy from file or use manual input
proxy_file_path = "proxy.txt"  # Proxy file name
proxy = get_proxy_from_file(proxy_file_path) or manual_proxy

my_key = "2Captcha API Key"
solver = TwoCaptcha(my_key, defaultTimeout=70)
agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"

# Initialize driver with proxy
driver = Driver(uc=True, headless=False, proxy=proxy, agent=agent)  # headless=True for invisible mode

try:
    url = "https://www.amazon.com/ap/register?openid.pape.max_auth_age=0&amp;amp;openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&amp;amp;pageId=usflex&amp;amp;ignoreAuthState=1&amp;amp;openid.assoc_handle=usflex&amp;amp;openid.mode=checkid_setup&amp;amp;openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&amp;amp;prepopulatedLoginId=&amp;amp;failedSignInCount=0&amp;amp;openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&amp;amp;disableLoginPrepopulate=1&amp;amp;switch_account=signin&amp;amp;openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0"
    driver.uc_open_with_reconnect(url, 5)

    # Solving first CAPTCHA
    try:
        my_img = driver.find_element("body &amp;gt; div &amp;gt; div.a-row.a-spacing-double-large &amp;gt; div.a-section &amp;gt; div &amp;gt; div &amp;gt; form &amp;gt; div.a-row.a-spacing-large &amp;gt; div &amp;gt; div &amp;gt; div.a-row.a-text-center &amp;gt; img")
        print("SOLVE FIRST CAPTCHA...")
        screenshot = my_img.screenshot_as_png
        screenshot_bytes = BytesIO(screenshot)
        base64_screenshot = base64.b64encode(screenshot_bytes.getvalue()).decode('utf-8')
        result = solver.normal(base64_screenshot)
        print('result: ' + str(result))  # Send request to 2Captcha
        res = result['code']
        driver.find_element(By.ID, "captchacharacters").send_keys(f"{res}")
        driver.find_element(By.CLASS_NAME, "a-button-inner").click()
    except:
        pass

    # Waiting and form filling
    driver.sleep(1)
    print("Fill out the form")
    driver.find_element(By.ID, "ap_customer_name").send_keys("Alex0053")  # Fill form
    driver.find_element(By.ID, "ap_email").send_keys("some_post43120@gmail.com")
    driver.find_element(By.ID, "ap_password").send_keys("password40000A#")
    driver.find_element(By.ID, "ap_password_check").send_keys("password40000A#")
    driver.find_element(By.ID, "continue").click()
    driver.sleep(10)

    # Second CAPTCHA - coordinate-based
    while True:
        try:
            cap_img = driver.find_element(By.ID, "cvf-aamation-challenge-iframe")  # Frame element
            print("SOLVE SECOND-COORD CAPTCHA...")
            screenshot = cap_img.screenshot_as_png
            screenshot_bytes = BytesIO(screenshot)
            base64_screenshot = base64.b64encode(screenshot_bytes.getvalue()).decode('utf-8')
            element_position = cap_img.location
            result = solver.coordinates(base64_screenshot, lang='en', min_clicks=1, max_clicks=1)
            x = str(result['code']).split(":")[1].split(",")[0].replace("x=", "")
            y = str(result['code']).split(":")[1].split(",")[1].replace("y=", "")
            print('result: ' + str(result))
            x_coord = element_position["x"] + int(x)
            y_coord = element_position["y"] + int(y)
            actions = ActionChains(driver)
            actions.move_by_offset(x_coord, y_coord).click().perform()
            driver.sleep(2)
            actions.reset_actions()
            driver.switch_to_frame(cap_img)
            driver.find_element(By.ID, "amzn-btn-verify-internal").click()
            driver.switch_to.default_content()
            driver.sleep(7)
        except Exception as e:
            print(e)
        try:
            driver.find_element('form[id="verification-code-form"]')
            print("CAPTCHA PASSED!!!")
            break
        except:
            pass

    driver.sleep(3)
    # Last block, if needed

except Exception as e:
    print(e)
finally:
    driver.close()
    driver.quit()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Python CAPTCHA Bypass – Missing Part of the Code
&lt;/h2&gt;

&lt;p&gt;Amazon also has a third type of CAPTCHA, FunCaptcha, which I couldn’t crack in this context. So, I just removed it from this code, just in case. I haven’t encountered FunCaptcha throughout testing (but from the tales of wiser folk, I know it exists somewhere in Amazon’s depths). There’s a legend about a specially trained man, we’ll call him the Overseer, who manually changes CAPTCHA conditions or the page design.&lt;/p&gt;

&lt;p&gt;No one has ever seen this Overseer, but in the evenings, when IT folks gather around a fire, they use this tale to scare the juniors.&lt;/p&gt;

&lt;p&gt;So, the script doesn’t solve FunCaptcha, but I’m open to suggestions on how to enable it to do so.&lt;/p&gt;

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

&lt;p&gt;The script works, CAPTCHA is bypassed, but occasional stalls remain – it would be helpful if you could point out any improvements (preferably without harsh critique).&lt;/p&gt;

&lt;p&gt;The script doesn’t handle FunCaptcha, though at first glance, we don’t really need it, but if it is required — I’m also open to community input.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to bypass reCAPTCHA V2/V3 using code and another way</title>
      <dc:creator>2captcha</dc:creator>
      <pubDate>Mon, 16 Sep 2024 09:03:50 +0000</pubDate>
      <link>https://dev.to/2captcha/how-to-bypass-recaptcha-v2v3-using-code-and-another-way-4hkg</link>
      <guid>https://dev.to/2captcha/how-to-bypass-recaptcha-v2v3-using-code-and-another-way-4hkg</guid>
      <description>&lt;p&gt;&lt;a href="https://www.linkedin.com/pulse/how-bypass-recaptcha-2captcha-yxtec/?trackingId=TSkIwh47eusJ76tlxb0NAA%3D%3D" rel="noopener noreferrer"&gt;How to bypass reCAPTCHA&lt;/a&gt; v2/v3: Automatically solve and pass Google reCAPTCHA using Python and Selenium, Puppeteer, Javascript, PHP&lt;/p&gt;

&lt;h2&gt;
  
  
  Bypassing reCAPTCHA
&lt;/h2&gt;

&lt;p&gt;No matter how many times people wrote that the captcha has outlived itself long time ago and no longer works as effectively as its developers would have liked initially, however, the owners of Internet resources continue to protect their projects with captchas. But what is the most popular captcha of our time?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;CAPTCHA is annoying, but &lt;a href="https://2captcha.com/" rel="noopener noreferrer"&gt;2captcha service&lt;/a&gt; helps to bypass it. We will consider part of the &lt;a href="https://2captcha.com/p/recaptcha_v2" rel="noopener noreferrer"&gt;reCAPTCHA solver service&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is recaptcha. Recaptcha V2, V3, etc., that was created by Google back in 2007. It has been many years since the first recaptcha appeared, but it continues to keep the garland, periodically losing ground to competitors and then winning it back. But recaptcha has never taken the 2nd place in popularity, despite all its imperfections in front of neural networks.&lt;/p&gt;

&lt;p&gt;There was a huge number of attempts to create a "recaptcha killer", some were less successful, some only looked like a threat to recaptcha, but in fact turned out to be nothing. Yet the fact remains that the desire of competitors to do something better and more reliable than recaptcha demonstrates its popularity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of reCAPTCHA
&lt;/h2&gt;

&lt;p&gt;ReCAPTCHA can be classified into three versions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;reCAPTCHA V1&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;reCAPTCHA V2&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;reCAPTCHA V3&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of them is an improved version of the previous reCAPTCHA . Let's figure it out in more detail:&lt;/p&gt;

&lt;h2&gt;
  
  
  How to solve reCAPTCHA V1? Easy!
&lt;/h2&gt;

&lt;p&gt;The very first version of the CAPTCHA reCAPTCHA V1 consisted of excerpts of text from scanned books, it was also called a text CAPTCHA. It was a fairly simple CAPTCHA that was very intrusive and annoying to users.&lt;/p&gt;

&lt;p&gt;The user was asked to enter text in a special window, now something like this can still be found on old resources, but no one uses reCAPTCHA V1 on normal sites anymore.&lt;/p&gt;

&lt;p&gt;ReCAPTCHA V1 was the first version introduced in 2007. It used distorted text from scanned books that users had to type in to prove they weren't bots. This system used user input to digitize books, newspapers, and old radio shows.&lt;/p&gt;

&lt;p&gt;It was during the period when Google introduced the first version of reCAPTCHA, that auto reCAPTCHA solvers began to appear, that were easily bypassing the text CAPTCHA. At first they were trained on an array and then put into operation, over time such solvers made fewer and fewer mistakes and saved the owner a lot of time and money.&lt;/p&gt;

&lt;p&gt;All kinds of &lt;a href="https://chromewebstore.google.com/detail/captcha-solver-%D0%BE%D0%B1%D1%85%D0%BE%D0%B4-%D0%B8-%D0%B0%D0%B2/ifibfemgeogfhoebkmokieepdoobkbpo" rel="noopener noreferrer"&gt;auto reCAPTCHA solver chrome extensions&lt;/a&gt; that work with the CAPTCHA recognition service, cope well with the text CAPTCHA. Modern alternatives, like &lt;a href="https://github.com/2captcha" rel="noopener noreferrer"&gt;reCAPTCHA solver github&lt;/a&gt;, offer refined solutions to these challenges, continuing the evolution of CAPTCHA solvers.&lt;/p&gt;

&lt;h2&gt;
  
  
  reCAPTCHA v2 – how to bypass images? Where is text?
&lt;/h2&gt;

&lt;p&gt;After realizing that text CAPTCHAs no longer work, a new V2 CAPTCHA was created. It was designed to soothe the irritation of users from the annoyance caused by the first version, increase security when protecting projects and, in general, improve the user experience.&lt;/p&gt;

&lt;p&gt;The second version of the reCAPTCHA is an empty field. When you click on it, a check mark appears and the CAPTCHA is passed. Or it might be a pop-up window with traffic lights that you need to find. Traffic lights, of course, are a metaphor, instead of traffic lights, you had to look for various objects. I'm sure you all understand what I'm talking about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkbox ("I am not a robot"):&lt;/strong&gt; The simplest type of verification, where the user just needs to click on the checkbox. The system analyzes the user's behavior to determine whether it is a human or a bot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Image tasks:&lt;/strong&gt; If the system is in doubt, it prompts users to select certain objects in the images (for example, "Select all images with traffic lights").&lt;/p&gt;

&lt;p&gt;And there was a lack of methods for bypassing reCAPTCHA V2, such as reCAPTCHA v2 solver, reCAPTCHA v2 invisible solver, and even reCAPTCHA v2 callback solver. Many auto-resolvers stopped working normally, the market began to rebuild, and continues to develop even now, as more and more new parameters that are taken into account when solving reCAPTCHA appear, including solutions like bypass reCAPTCHA v2 and bypass reCAPTCHA v2 invisible.&lt;/p&gt;

&lt;p&gt;Despite the novelty, the second version also greatly irritated ordinary people, and that negativity did not go away. The system was imperfect, which prompted Google to go ahead and create new products, as developers struggled with challenges like google reCAPTCHA v2 bypass and sought automated solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google reCAPTCHA v3 – how to bypass something invisible?
&lt;/h2&gt;

&lt;p&gt;The decision not to annoy the users was pursued by Google at all stages of creating reCAPTCHA, but how to achieve that? By hiding the reCAPTCHA. So the third version became invisible. It works in the background, continuously monitoring user actions on the site and assigning them a risk score (from 0.1 to 1.0) based on their behavior. This evolution led to the need for solutions capable of interacting with this more complex system, such as various reCAPTCHA v3 solvers and techniques for bypassing reCAPTCHA V3.&lt;/p&gt;

&lt;p&gt;Websites can set thresholds for risk assessments, determining the level of interaction or verification depending on the perceived risk. If the owner wants to maximize the user experience, they set a lower score and vice versa. As more sophisticated methods were developed, some began to explore options like bypassing reCAPTCHA V3 using different programming languages or tools. Thus, Google has given owners a choice between user experience and protection, and it is not so difficult to find a balance in this case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python and reCAPTCHA, what are the top reCAPTCHA solvers in Python?
&lt;/h2&gt;

&lt;p&gt;The most popular programming language is definitely Python, the code for this programming language is searched in 5 out of 10 cases when people google "How to bypass reCAPTCHA" on the Internet (not taking into account queries that contain the word Python, such as "how to bypass reCAPTCHA in Python", "Python reCAPTCHA solver", or "Python reCAPTCHA bypass", and so on).&lt;/p&gt;

&lt;p&gt;The easiest way to implement all this will be with using modules that just need to be connected in an executable file. After studying the Internet, I have identified the following popular modules with which you can recognize reCAPTCHA (by the way, with all these modules you can recognize other types of CAPTCHA):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://pypi.org/project/2captcha-python/" rel="noopener noreferrer"&gt;2captcha-python&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://pypi.org/project/2captcha-solver/" rel="noopener noreferrer"&gt;2captcha-solver&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://pypi.org/project/captchatools/" rel="noopener noreferrer"&gt;captchatools&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://pypi.org/project/twocaptcha-extension-python/" rel="noopener noreferrer"&gt;twocaptcha-extension-python &lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/Matthew17-21/Captcha-Tools" rel="noopener noreferrer"&gt;Captcha-Tools&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Python module for 2Captcha to avoid reCAPTCHA (CAPTCHA solver API)&lt;/p&gt;

&lt;p&gt;The official module from the captcha recognition service 2Captcha (2captcha-python) is designed for easy integration with their API. The module has advanced functionality and supports proxy configuration. The module is maintained and regularly updated, and can be used for parsing web resources and automation. This module is often used in conjunction with Python reCAPTCHA solver approaches, making it a powerful tool for those looking to bypass reCAPTCHA v2 Python.&lt;/p&gt;

&lt;p&gt;The service is ideal for users that focus on reliability in CAPTCHA recognition, as well as those who need official support from the 2Captcha service. Python bypass reCAPTCHA techniques are effectively implemented using this module, especially for tasks requiring stability and support.&lt;/p&gt;

&lt;p&gt;The module supports asynchronous operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google reCAPTCHA solver module for Python
&lt;/h2&gt;

&lt;p&gt;A module 2captcha-solver for solving reCAPTCHA and some other popular CAPTCHAs (reCAPTCHA (v2, v3), FunCaptcha, and hCaptcha). Its main difference from the previous module is that it is more narrowly focused (supports fewer CAPTCHAs) and can respond less flexibly to updates from the reCAPTCHA, compared with the previous official module. However, it remains a valuable option for those seeking a Python reCAPTCHA v2 solver or even a Python reCAPTCHA v3 solver.&lt;/p&gt;

&lt;p&gt;2captcha-solver supports proxy configuration and is especially useful for tasks requiring high performance, thanks to its support for asynchronous operations, which allows you to simultaneously solve multiple reCAPTCHAs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Module written by Python - reCAPTCHA solver
&lt;/h2&gt;

&lt;p&gt;A multifunctional module captchatools, the main focus of which is on supporting several CAPTCHA recognition services. The functionality of the module is approximately similar to the previous two, it supports proxy configuration and asynchronous operations. For those who need to implement Python reCAPTCHA bypass or Python google reCAPTCHA solver strategies, captchatools offers flexible options.&lt;/p&gt;

&lt;p&gt;Based on the fact that the module allows you to integrate CAPTCHA recognition through several services, it has a unique function – brute force search for services. That is, you can use one service as the main one, and others as backup, and when, for example, you run out of funds on the main service, or if the main service could not cope with the task, the CAPTCHA will go to the backup one and will be solved. This way your script will be more automated and will not depend on the stability of one particular service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Module for bypass reCAPTCHA by Python (for Selenium)
&lt;/h2&gt;

&lt;p&gt;It is a narrowly focused module twocaptcha-extension-python that is used for easy integration with Selenium and Playwright, and supports all types of reCAPTCHA. This module is particularly useful for those who need to implement Python bypass reCAPTCHA via selenium or other similar tasks.&lt;/p&gt;

&lt;p&gt;The module can be used without the need to install additional extensions and only the API key is required for the start. Its integration capabilities make it an excellent choice for developers working on Python solve reCAPTCHA projects.&lt;/p&gt;

&lt;p&gt;Its main difference from the previous modules is that twocaptcha-extension-python will be difficult to use for automation issues where Selenium or Playwright are not used, since it is used exclusively for the listed services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Module to bypass reCAPTCHA V2/V3 by Python
&lt;/h2&gt;

&lt;p&gt;A module Captcha-Tools that resembles captchatools in functionality, and it can be called an analog of the specified service. That is, you can use one of them by choice.&lt;/p&gt;

&lt;p&gt;All the characteristics are the same: support for multiple services, brute force search for services in the process of CAPTCHA recognition, asynchronous operations, proxy configuration. It's all here, too. Only the developer is different.&lt;/p&gt;

&lt;p&gt;Well, and an assumption from me, most likely both of these services will react a little slower than the official modules to changes that occur in CAPTCHA recognition services and which are made by CAPTCHA developers.&lt;/p&gt;

&lt;p&gt;I would also like to note that all of these services (not just Twocaptcha-extension-python) can be used together with Selenium and Playwright, the only difference will be in connection and synchronization.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to bypass reCAPTCHA using Selenium
&lt;/h2&gt;

&lt;p&gt;Selenium is a powerful tool for browser automation, often used to bypass reCAPTCHA in web application testing and automation processes. This framework allows you to simulate user actions such as clicks, text input, and page navigation, making it ideal for handling various types of reCAPTCHA, including reCAPTCHA V3&lt;/p&gt;

&lt;p&gt;There are specialized modules designed to work with Selenium that simplify the process of bypassing reCAPTCHA. These modules automate the task of bypassing reCAPTCHA, enabling efficient handling of tasks like identification and circumvention of reCAPTCHA, processing complex scenarios, and interacting with dynamic content on web pages. Using Selenium in combination with these modules significantly enhances the efficiency of automated testing and optimizes processes related to bypassing reCAPTCHA.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to bypass reCAPTCHA using Python (example of a code)
&lt;/h2&gt;

&lt;p&gt;If you do not trust any third-party modules, I have prepared the most universal code that can be inserted into your Python script with minor modifications and solve the reCAPTCHA automatically. Here is the code itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import requests
    import time

    API_KEY = 'Your_API_2Captcha_key'

    def solve_recaptcha_v2(site_key, url):
        payload = {
            'key': API_KEY,
            'method': 'userrecaptcha',
            'googlekey': site_key,
            'pageurl': url,
            'json': 1
        }

        response = requests.post('https://2captcha.com/in.php', data=payload)
        result = response.json()

        if result['status'] != 1:
            raise Exception(f"Error when sending captcha: {result['request']}")

        captcha_id = result['request']

        while True:
            time.sleep(5)
            response = requests.get(f"https://2captcha.com/res.php?key={API_KEY}&amp;amp;action=get&amp;amp;id={captcha_id}&amp;amp;json=1")
            result = response.json()

            if result['status'] == 1:
                print("Captcha solved successfully.")
                return result['request']
            elif result['request'] == 'CAPCHA_NOT_READY':
                print("The captcha has not been solved yet, waiting...")
                continue
            else:
                raise Exception(f"Error while solving captcha: {result['request']}")

    def solve_recaptcha_v3(site_key, url, action='verify', min_score=0.3):
        payload = {
            'key': API_KEY,
            'method': 'userrecaptcha',
            'googlekey': site_key,
            'pageurl': url,
            'version': 'v3',
            'action': action,
            'min_score': min_score,
            'json': 1
        }

        response = requests.post('https://2captcha.com/in.php', data=payload)
        result = response.json()

        if result['status'] != 1:
            raise Exception(f"Error when sending captcha: {result['request']}")

        captcha_id = result['request']

        while True:
            time.sleep(5)
            response = requests.get(f"https://2captcha.com/res.php?key={API_KEY}&amp;amp;action=get&amp;amp;id={captcha_id}&amp;amp;json=1")
            result = response.json()

            if result['status'] == 1:
                print("Captcha solved successfully.")
                return result['request']
            elif result['request'] == 'CAPCHA_NOT_READY':
                print("The captcha has not been solved yet, waiting...")
                continue
            else:
                raise Exception(f"Error while solving captcha: {result['request']}")

    # Usage example for reCAPTCHA v2
    site_key_v2 = 'your_site_key_v2'
    url_v2 = 'https://example.com'
    recaptcha_token_v2 = solve_recaptcha_v2(site_key_v2, url_v2)
    print(f"Received token for reCAPTCHA v2: {recaptcha_token_v2}")

    # Usage example for reCAPTCHA v3
    site_key_v3 = 'your_site_key_v3'
    url_v3 = 'https://example.com'
    recaptcha_token_v3 = solve_recaptcha_v3(site_key_v3, url_v3)
    print(f"Received token for reCAPTCHA v3: {recaptcha_token_v3}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, before using the provided script, carefully read the recommendations of the service for recognizing a particular type of recaptcha in order to have an idea how this code works.&lt;/p&gt;

&lt;p&gt;Also, do not forget to insert your API key in the code and, of course, install the necessary modules.&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript and reCAPTCHA, how to bypass reCAPTCHA in Javascript using modules
&lt;/h2&gt;

&lt;p&gt;The second most popular language for which users are looking to find ways to bypass reCAPTCHA is node js, about 3 out of 10 requests to bypass reCAPTCHA come to this programming language.&lt;/p&gt;

&lt;p&gt;As in the case of Python, it is easiest to recognize reCAPTCHA through special modules, especially since CAPTCHA recognition services are interested in simplifying work for their customers and many create and maintain such modules, here is a list of the most popular ones that can help you bypass reCAPTCHA in JavaScript.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.npmjs.com/package/2captcha" rel="noopener noreferrer"&gt;2captcha&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/2captcha/2captcha-javascript" rel="noopener noreferrer"&gt;2captcha-javascript&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.npmjs.com/package/captcha-solver" rel="noopener noreferrer"&gt;captcha-solver&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.npmjs.com/package/multi-captcha-solver-adapter?activeTab=readme" rel="noopener noreferrer"&gt;multi-captcha-solver-adapter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Module to bypass reCAPTCHA using Javascript
&lt;/h2&gt;

&lt;p&gt;The official module for node js from the CAPTCHA recognition service 2Captcha (2captcha), supports most of the known types of CAPTCHA, including reCAPTCHA. An important difference between this module and the others is TypeScript support, which makes it convenient for development of various applications.&lt;/p&gt;

&lt;p&gt;All basic settings, including asynchronous operations, proxy settings, etc. are present in the module, which makes it a universal module for solving most types of CAPTCHA. Well, and the fact that the module was created by the 2Captcha service allows us to draw a conclusion about its reliability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Javascript module for 2Captcha to pass reCAPTCHA
&lt;/h2&gt;

&lt;p&gt;It is also the official module for recognizing the main types of CAPTCHA from the 2Captcha service (2captcha-javascript), and it supports all the same settings as the previous module (with the exception of TypeScript support), but it seemed to me that it was created more with an emphasis on ease of integration and a quick start.&lt;/p&gt;

&lt;p&gt;It is simpler than the previous one and, like its predecessor, it solves the main task – bypassing reCAPTCHA. So, if you just need your script (program) written in node js to bypass reCAPTCHA, use this module, and if you need deeper integration, take a closer look at the previous module.&lt;/p&gt;

&lt;h2&gt;
  
  
  Module to bypass Google reCAPTCHA response
&lt;/h2&gt;

&lt;p&gt;The module is tailored for integration with Puppeteer and allows you to solve reCAPTCHA and other popular types of CAPTCHA.&lt;/p&gt;

&lt;p&gt;In addition to the fact that this module is tailored for Puppeteer, it provides the opportunity to choose a provider that solves the CAPTCHA, which also allows you to configure a brute force search for services (as described in the section about modules for Python).&lt;/p&gt;

&lt;p&gt;It should be noted that the two previous modules can be integrated into Puppeteer, but captcha-solver provides an out-of-the-box solution, that is, you set it up and forget about it, whereas in the case of 2captcha and 2captcha-javascript, manual processing of the results or configuring this processing may be required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Javascript module to skip reCAPTCHA
&lt;/h2&gt;

&lt;p&gt;A module from third-party developers that supports the reCAPTCHA solution (Multi-captcha-solver-adapter), as well as some other popular types of CAPTCHA. Several CAPTCHA recognition services are integrated in the module, which allows you to configure a brute force search for services (make one the main one, and make the rest backup ones).&lt;/p&gt;

&lt;p&gt;The service is an alternative to 2captcha and 2captcha-javascript, but there may be delays in updating, since the module is not supported by official services, but otherwise its functionality is similar to its competitors.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to bypass reCAPTCHA in Node JS
&lt;/h2&gt;

&lt;p&gt;As in the case of Python, for those who do not like ready-made solutions, below is a script for solving a CAPTCHA using the node js programming language. I remind you to not forget to install the necessary modules for the code to work, including:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;axios
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can install it using this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install axios
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the code itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const axios = require('axios');
    const sleep = require('util').promisify(setTimeout);

    const API_KEY = 'YOUR_API_KEY_2CAPTCHA'; // Replace with your real API key

    // Function for reCAPTCHA v2 solution
    async function solveReCaptchaV2(siteKey, pageUrl) {
        try {
            // Sending a request for the captcha solution
            const sendCaptchaResponse = await axios.post(`http://2captcha.com/in.php`, null, {
                params: {
                    key: API_KEY,
                    method: 'userrecaptcha',
                    googlekey: siteKey,
                    pageurl: pageUrl,
                    json: 1
                }
            });

            if (sendCaptchaResponse.data.status !== 1) {
                throw new Error(`Error when sending captcha: ${sendCaptchaResponse.data.request}`);
            }

            const requestId = sendCaptchaResponse.data.request;
            console.log(`Captcha sent, request ID: ${RequestId}`);

            // Waiting for the captcha solution
           while (true) {
                await sleep(5000); // Waiting 5 seconds before the next request

                const getResultResponse = await axios.get(`http://2captcha.com/res.php`, {
                    params: {
                        key: API_KEY,
                        action: 'get',
                        id: requestId,
                        json: 1
                    }
                });

                if (getResultResponse.data.status === 1) {
                    console.log('Captcha solved successfully.');
                    return getResultResponse.data.request;
                } else if (getResultResponse.data.request === 'CAPCHA_NOT_READY') {
                    console.log('The captcha has not been solved yet, waiting...');
                } else {
                    throw new Error(`Error while solving captcha: ${getResultResponse.data.request}`);
                }
            }
        } catch (error) {
            console.error(`An error occurred: ${error.message}`);
        }
    }

    // Function for reCAPTCHA v3 solution
    async function solveReCaptchaV3(siteKey, pageUrl, action = 'verify', minScore = 0.3) {
        try {
            // Sending a request for the captcha solution
            const sendCaptchaResponse = await axios.post(`http://2captcha.com/in.php`, null, {
                params: {
                    key: API_KEY,
                    method: 'userrecaptcha',
                    googlekey: siteKey,
                    pageurl: pageUrl,
                    version: 'v3',
                    action: action,
                    min_score: minScore,
                    json: 1
                }
            });

            if (sendCaptchaResponse.data.status !== 1) {
                throw new Error(`Error when sending captcha: ${sendCaptchaResponse.data.request}`);
            }

            const requestId = sendCaptchaResponse.data.request;
            console.log(`Captcha sent, request ID: ${RequestId}`);

            // Waiting for the captcha solution
            while (true) {
                await sleep(5000); // Waiting 5 seconds before the next request

                const getResultResponse = await axios.get(`http://2captcha.com/res.php`, {
                    params: {
                        key: API_KEY,
                        action: 'get',
                        id: requestId,
                        json: 1
                    }
                });

                if (getResultResponse.data.status === 1) {
                    console.log('Captcha solved successfully.');
                    return getResultResponse.data.request;
                } else if (getResultResponse.data.request === 'CAPCHA_NOT_READY') {
                    console.log('The captcha has not been solved yet, waiting...');
                } else {
                    throw new Error(`Error while solving captcha: ${getResultResponse.data.request}`);
                }
            }
        } catch (error) {
            console.error(`An error occurred: ${error.message}`);
        }
    }

    // Usage example for reCAPTCHA v2
    (async () =&amp;gt; {
        const siteKeyV2 = 'YOUR_SITE_KEY_V2'; // Replace with the real site key
        const pageUrlV2 = 'https://example.com '; // Replace with the real URL of the page

        const tokenV2 = await solveReCaptchaV2(siteKeyV2, pageUrlV2);
        console.log(`Received token for reCAPTCHA v2: ${tokenV2}`);
    })();

    // Usage example for reCAPTCHA v3
    (async () =&amp;gt; {
        const siteKeyV3 = 'YOUR_SITE_KEY_V3'; // Replace with the real site key
        const pageUrlV3 = 'https://example.com '; // Replace with the real URL of the page
        const action = 'homepage'; // Replace with the corresponding action
        const MinScore = 0.5; // Set the minimum allowed score

        const tokenV3 = await solveReCaptchaV3(siteKeyV3, pageUrlV3, action, minScore);
        console.log(`Received token for reCAPTCHA v3: ${tokenV3}`);
    })();`

Also, do not forget to insert your API key into the code, instead of

`"'YOUR_API_KEY_2CAPTCHA'"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  PHP and reCAPTCHA, how to bypass reCAPTCHA in php using modules
&lt;/h2&gt;

&lt;p&gt;And the third most popular language for which users are looking to find ways to bypass reCAPTCHA is PHP. I suggest to start with modules, as in the first two cases, and to end with the code. So, the most popular modules for solving reCAPTCHA in PHP are the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/2captcha/2captcha-php/tree/master" rel="noopener noreferrer"&gt;2captcha-php&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/Athlon1600/php-captcha-solver" rel="noopener noreferrer"&gt;php-captcha-solver&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Module wriiten by PHP using reCAPTCHA bypass API
&lt;/h2&gt;

&lt;p&gt;This module (2captcha-php) makes it easy to integrate the 2Captcha API into your PHP CAPTCHA solution code. It supports CAPTCHA types such as reCAPTCHA, FunCaptcha, GeeTest, and others. The module is designed for quick setup and use, including support for text CAPTCHA and reCAPTCHA v3. It also supports various methods for working with images and audio files. For those looking to bypass reCAPTCHA in PHP, this module offers a reliable and straightforward solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Module to reCAPTCHA bypass in Chrome
&lt;/h2&gt;

&lt;p&gt;A module that provides a user-friendly interface for integration with various CAPTCHA services, including 2Captcha (php-captcha-solver). It supports various types of CAPTCHA, such as reCAPTCHA and FunCaptcha. This module is focused on ease of use and quick setup. If you're aiming to bypass reCAPTCHA using PHP, this tool is also a solid option.&lt;/p&gt;

&lt;p&gt;In fact, if we compare these two modules, the first one is developed by the 2Captcha service, and the second one is made by the developer community, and both solve the same tasks and have approximately the same set of functionality. However, the second module may be less prompt in terms of updates, unlike the official module.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to recognize reCAPTCHA in PHP
&lt;/h2&gt;

&lt;p&gt;Well, for those who are not used to using ready-made modules, here is the code for integration directly. The code uses standard PHP functions such as file_get_contents and json_decode, here is the code itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

    function solveRecaptchaV2($apiKey, $siteKey, $url) {
        $requestUrl = "http://2captcha.com/in.php?key={$apiKey}&amp;amp;method=userrecaptcha&amp;amp;googlekey={$siteKey}&amp;amp;pageurl={$url}&amp;amp;json=1";

        $response = file_get_contents($requestUrl);
        $result = json_decode($response, true);

        if ($result['status'] != 1) {
            throw new Exception("Error when sending captcha: " . $result['request']);
        }

        $captchaId = $result['request'];

        while (true) {
            sleep(5);
            $resultUrl = "http://2captcha.com/res.php?key={$apiKey}&amp;amp;action=get&amp;amp;id={$captchaId}&amp;amp;json=1";
            $response = file_get_contents($resultUrl);
            $result = json_decode($response, true);

            if ($result['status'] == 1) {
                return $result['request'];
            } elseif ($result['request'] == 'CAPCHA_NOT_READY') {
                continue;
            } else {
                throw new Exception("Error while solving captcha: " . $result['request']);
            }
        }
    }

    function solveRecaptchaV3($apiKey, $siteKey, $url, $action = 'verify', $minScore = 0.3) {
        $requestUrl = "http://2captcha.com/in.php?key={$apiKey}&amp;amp;method=userrecaptcha&amp;amp;googlekey={$siteKey}&amp;amp;pageurl={$url}&amp;amp;version=v3&amp;amp;action={$action}&amp;amp;min_score={$minScore}&amp;amp;json=1";

        $response = file_get_contents($requestUrl);
        $result = json_decode($response, true);

        if ($result['status'] != 1) {
            throw new Exception("Error when sending captcha: " . $result['request']);
        }

        $captchaId = $result['request'];

        while (true) {
            sleep(5);
            $resultUrl = "http://2captcha.com/res.php?key={$apiKey}&amp;amp;action=get&amp;amp;id={$captchaId}&amp;amp;json=1";
            $response = file_get_contents($resultUrl);
            $result = json_decode($response, true);

            if ($result['status'] == 1) {
                return $result['request'];
            } elseif ($result['request'] == 'CAPCHA_NOT_READY') {
                continue;
            } else {
                throw new Exception("Error while solving captcha: " . $result['request']);
            }
        }
    }

    // Usage example for reCAPTCHA v2
    $apiKey = 'YOUR_API_KEY_2CAPTCHA';
    $siteKeyV2 = 'YOUR_SITE_KEY_V2';
    $urlV2 = 'https://example.com';

    try {
        $tokenV2 = solveRecaptchaV2($apiKey, $siteKeyV2, $urlV2);
        echo "Received token for reCAPTCHA v2: {$tokenV2}\n";
    } catch (Exception $e) {
        echo "Error: " . $e-&amp;gt;getMessage() . "\n";
    }

    // Usage example for reCAPTCHA v3
    $siteKeyV3 = 'YOUR_SITE_KEY_V3';
    $urlV3 = 'https://example.com';
    $action = 'homepage'; // Specify the appropriate action
    $MinScore = 0.5; // Specify the minimum allowed score

    try {
        $tokenV3 = solveRecaptchaV3($apiKey, $siteKeyV3, $urlV3, $action, $minScore);
        echo "Received token for reCAPTCHA v3: {$tokenV3}\n";
    } catch (Exception $e) {
        echo "Error: " . $e-&amp;gt;getMessage() . "\n";
    }

    ?&amp;gt;

    I also remind you of the need to replace some parameters in the code, in particular:
    $apiKey = 'YOUR_API_KEY_2CAPTCHA';
    $siteKeyV2 = 'YOUR_SITE_KEY_V2';
    $urlV2 = 'https://example.com';

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thus, using the examples given, you can solve most of the issues related to reCAPTCHA recognition. You can ask questions in the comments if there are any left!&lt;/p&gt;

</description>
      <category>recaptcha</category>
      <category>bypass</category>
      <category>captcha</category>
      <category>solver</category>
    </item>
    <item>
      <title>Top modules for reCAPTCHA recognition in Python, Node js, and PHP</title>
      <dc:creator>2captcha</dc:creator>
      <pubDate>Mon, 02 Sep 2024 09:27:46 +0000</pubDate>
      <link>https://dev.to/2captcha/top-modules-for-recaptcha-recognition-in-python-node-js-and-php-k7g</link>
      <guid>https://dev.to/2captcha/top-modules-for-recaptcha-recognition-in-python-node-js-and-php-k7g</guid>
      <description>&lt;p&gt;In our age of automation, most solutions can be freely found available, and I'm not talking about solving math problems right now, but slightly more complex tasks, such as data parsing, and, as in our case, reCAPTCHA recognition. But how do I find a good module? After all, with access to technology, everyone got it, both conscientious developers and outright scammers.&lt;/p&gt;

&lt;p&gt;I analyzed the market for captcha recognition modules and I got the top of modules in three popular programming languages. Let's get to the business!&lt;/p&gt;

&lt;h2&gt;
  
  
  Modules for solving reCAPTCHA in Python
&lt;/h2&gt;

&lt;p&gt;The most popular programming language is definitely Python, the code for this programming language is searched in 5 out of 10 cases when people google "How to bypass reCAPTCHA" on the Internet (not taking into account queries that contain the word python, such as "how to bypass reCAPTCHA in python", and so on).&lt;/p&gt;

&lt;p&gt;The easiest way to implement all this will be with using modules that just need to be connected in an executable file. After studying the Internet, I have identified the following popular modules with which you can recognize reCAPTCHA (by the way, with all these modules you can recognize other types of captcha):&lt;/p&gt;

&lt;p&gt;• &lt;a href="https://pypi.org/project/2captcha-python/" rel="noopener noreferrer"&gt;2captcha-python&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• &lt;a href="https://pypi.org/project/2captcha-solver/" rel="noopener noreferrer"&gt;2captcha-solver&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• &lt;a href="https://pypi.org/project/captchatools/" rel="noopener noreferrer"&gt;captchatools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• &lt;a href="https://pypi.org/project/twocaptcha-extension-python/" rel="noopener noreferrer"&gt;twocaptcha-extension-python&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;• &lt;a href="https://github.com/Matthew17-21/Captcha-Tools" rel="noopener noreferrer"&gt;Captcha-Tools&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  2captcha-python
&lt;/h2&gt;

&lt;p&gt;The official module from the captcha recognition service 2captcha is designed for easy integration with their API. The module has advanced functionality and supports proxy configuration. The module is maintained and regularly updated, and can be used for parsing web resources and automation.&lt;/p&gt;

&lt;p&gt;The service is ideal for users that focus on reliability in captcha recognition, as well as those who need official support from the 2captcha service.&lt;/p&gt;

&lt;p&gt;The module supports asynchronous operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  2captcha-solver
&lt;/h2&gt;

&lt;p&gt;A module for solving reCAPTCHA and some other popular captchas (reCAPTCHA (v2, v3), FunCaptcha, and hCaptcha). Its main difference from the previous module is that it is more narrowly focused (supports fewer captchas) and can respond less flexibly to updates from the reCAPTCHA, compared with the previous official module.&lt;/p&gt;

&lt;p&gt;2Captcha-solver supports proxy configuration and is especially useful for tasks requiring high performance, thanks to its support for asynchronous operations, which allows you to simultaneously solve multiple reCAPTCHAs.&lt;/p&gt;

&lt;h2&gt;
  
  
  captchatools
&lt;/h2&gt;

&lt;p&gt;A multifunctional module, the main focus of which is on supporting several captcha recognition services. The functionality of the module is approximately similar to the previous two, it supports proxy configuration and asynchronous operations.&lt;/p&gt;

&lt;p&gt;Based on the fact that the module allows you to integrate captcha recognition through several services, it has a unique function – brute force search for services. That is, you can use one service as the main one, and others as backup, and when, for example, you run out of funds on the main service, or if the main service could not cope with the task, the captcha will go to the backup one and will be solved. This way your script will be more automated and will not depend on the stability of one particular service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Twocaptcha-extension-python
&lt;/h2&gt;

&lt;p&gt;It is a narrowly focused module that is used for easy integration with Selenium and Playwright, and supports all types of reCAPTCHA.&lt;/p&gt;

&lt;p&gt;The module can be used without the need to install additional extensions and only the API key is required for the start.&lt;/p&gt;

&lt;p&gt;Its main difference from the previous modules is that twocaptcha-extension-python will be difficult to use for automation issues where Selenium or Playwright are not used, since it is used exclusively for the listed services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Captcha-Tools
&lt;/h2&gt;

&lt;p&gt;A module that resembles captchatools in functionality, and it can be called an analog of the specified service. That is, you can use one of them by choice.&lt;/p&gt;

&lt;p&gt;All the characteristics are the same: support for multiple services, brute force search for services in the process of captcha recognition, asynchronous operations, proxy configuration. It's all here, too. Only the developer is different.&lt;/p&gt;

&lt;p&gt;Well, and an assumption from me, most likely both of these services will react a little slower to changes that occur in captcha recognition services and which are made by captcha developers than the official modules.&lt;/p&gt;

&lt;p&gt;I would also like to note that all of these services (not just Twocaptcha-extension-python) can be used together with Selenium and Playwright, the only difference will be in connection and synchronization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modules for solving reCAPTCHA in node js
&lt;/h2&gt;

&lt;p&gt;The second most popular language for which users are looking to find ways to bypass reCAPTCHA is node js, about 3 out of 10 requests to bypass reCAPTCHA come to this programming language.&lt;/p&gt;

&lt;p&gt;As in the case of Python, it is easiest to recognize reCAPTCHA through special modules, especially since captcha recognition services are interested in simplifying work for their customers and many create and maintain such modules, here is a list of the most popular of them.&lt;/p&gt;

&lt;p&gt;• &lt;a href="https://www.npmjs.com/package/2captcha" rel="noopener noreferrer"&gt;2captcha&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• &lt;a href="https://github.com/2captcha/2captcha-javascript" rel="noopener noreferrer"&gt;2captcha-javascript &lt;/a&gt; &lt;/p&gt;

&lt;p&gt;• &lt;a href="https://www.npmjs.com/package/captcha-solver" rel="noopener noreferrer"&gt;captcha-solver&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;• &lt;a href="https://www.npmjs.com/package/multi-captcha-solver-adapter?activeTab=readme" rel="noopener noreferrer"&gt;multi-captcha-solver-adapter&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  2captcha
&lt;/h2&gt;

&lt;p&gt;The official module for node js from the captcha recognition service 2captcha, supports most of the known types of captcha, including reCAPTCHA. An important difference between this module and the others is TypeScript support, which makes it convenient for development of various applications.&lt;/p&gt;

&lt;p&gt;All basic settings, including asynchronous operations, proxy settings, etc. are present in the module, which makes it a universal module for solving most types of captcha. Well, and the fact that the module was created by the 2captcha service allows us to draw a conclusion about its reliability.&lt;/p&gt;

&lt;h2&gt;
  
  
  2captcha-javascript
&lt;/h2&gt;

&lt;p&gt;It is also the official module for recognizing the main types of captcha from the 2captcha service, and it supports all the same settings as the previous module (with the exception of TypeScript support), but it seemed to me that it was created more with an emphasis on ease of integration and a quick start.&lt;/p&gt;

&lt;p&gt;It is easier than the previous one and, like its predecessor, it solves the main task – bypasses reCAPTCHA. So, if you just need your script (program) written in node js to solve reCAPTCHA, use this module, and if you need deeper integration, take a closer look at the previous module.&lt;/p&gt;

&lt;h2&gt;
  
  
  captcha-solver
&lt;/h2&gt;

&lt;p&gt;The module is tailored for integration with Puppeteer and allows you to solve reCAPTCHA and other popular types of captcha.&lt;/p&gt;

&lt;p&gt;In addition to the fact that this module is tailored for Puppeteer, it provides the opportunity to choose a provider that solves the captcha, which also allows you to configure a brute force search for services (as described in the section about modules for Python).&lt;/p&gt;

&lt;p&gt;It should be noted that the two previous modules can be integrated into Puppeteer, but captcha-solver provides an out-of-the-box solution, that is, you set it up and forget about it, whereas in the case of 2captcha and 2captcha-javascript, manual processing of the results or configuring this processing may be required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-captcha-solver-adapter
&lt;/h2&gt;

&lt;p&gt;A module from third-party developers that supports the reCAPTCHA solution, as well as some other popular types of captcha. Several captcha recognition services are integrated in the module, which allows you to configure a brute force search for services (make one the main one, and make the rest backup ones)&lt;/p&gt;

&lt;p&gt;The service is an alternative to 2captcha and 2captcha-javascript, but there may be delays in updating, since the module is not supported by official services, but otherwise its functionality is similar to its competitors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modules for solving reCAPTCHA in PHP
&lt;/h2&gt;

&lt;p&gt;And the third most popular language for which users are looking to find ways to bypass reCAPTCHA is php. I suggest to start with modules, as in the first two cases, and to end with the code. So, the most popular modules for solving reCAPTCHA in PHP are the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/2captcha/2captcha-php/tree/master" rel="noopener noreferrer"&gt;2captcha-php&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Athlon1600/php-captcha-solver" rel="noopener noreferrer"&gt;php-captcha-solver &lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2captcha-php
&lt;/h2&gt;

&lt;p&gt;This module makes it easy to integrate the 2Captcha API into your PHP CAPTCHA solution code. It supports CAPTCHA types such as reCAPTCHA, FunCaptcha, GeeTest, and others. The module is designed for quick setup and use, including support for text CAPTCHA and reCAPTCHA v3. It also supports various methods for working with images and audio files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Php-captcha-solver
&lt;/h2&gt;

&lt;p&gt;A module that provides a user-friendly interface for integration with various CAPTCHA services, including 2Captcha. Supports various types of CAPTCHA, such as reCAPTCHA and FunCaptcha. This module is focused on ease of use and quick setup.&lt;/p&gt;

&lt;p&gt;In fact, if we compare these two modules, the first one is developed by the 2captcha service, and the second one is made by the developer community, and both solve the same tasks and have approximately the same set of functionality. However, the second module may be less prompt in terms of updates, unlike the official module.&lt;/p&gt;

&lt;p&gt;Thus, using the given examples of modules in popular programming languages, you can solve most of the issues related to reCAPTCHA recognition. You can ask questions in the comments if there are any left!&lt;/p&gt;

</description>
      <category>python</category>
      <category>node</category>
      <category>php</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Data labeling – training on cats</title>
      <dc:creator>2captcha</dc:creator>
      <pubDate>Mon, 29 Jul 2024 07:00:59 +0000</pubDate>
      <link>https://dev.to/2captcha/data-labeling-training-on-cats-4c4c</link>
      <guid>https://dev.to/2captcha/data-labeling-training-on-cats-4c4c</guid>
      <description>&lt;p&gt;At some point while diving deeper into automation processes you are faced with the need for data labeling, although just a couple of weeks ago, the phrases data labeling and you were standing at a party called "Earnings on the Internet" in different rooms. Or it would be better to say that you were standing by the pool, and the data labeling was on the third floor, smoking on the balcony with experts in the field of machine learning. How did we meet? Probably, someone pushed it off the balcony into the pool, and I helped it out, soaking my clothes along the way.&lt;/p&gt;

&lt;p&gt;And so, you are sitting in the kitchen, smoking one cigarette for two and trying to figure out what each of you do, and how you could be useful to each other.&lt;/p&gt;

&lt;p&gt;In general, it's not so important why I needed it, but the fact that I succeeded is much more interesting. And now that you are already bored enough (or not), let's get to the point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The task&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The title has the phrase – training on cats – and it is not a metaphor. This is a direct indication of what needs to be done. It is necessary to determine what is depicted in the photo (which animal), and what the customer will do with this information is the third thing. &lt;/p&gt;

&lt;p&gt;The task, technically, is as clear as possible. And most importantly, it is as simple as possible. Now we just need to implement it. And we will do this through the &lt;a href="https://betaf.2captcha.com/datasets" rel="noopener noreferrer"&gt;data labeling service&lt;/a&gt;. Really, I can't write all sorts of labeling programs manually, right? And I also do not know how to.&lt;/p&gt;

&lt;p&gt;In general, we are following the path of simplification. &lt;/p&gt;

&lt;p&gt;So, we have the task, we have the solution, let's get to the details:&lt;/p&gt;

&lt;p&gt;At the input, we submit a set of photos and pictures depicting various animals. The task is to get a textual description of the animal depicted in the image as the response. The data volume is big, so uploading this volume manually is not an option. We will send all this via API, for which we write a simple script.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The script&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, we need to import the necessary libraries. In our script, we will use requests to make HTTP requests, base64 to encode images, os to work with the file system, and json to process JSON data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import requests
import base64
import os
import json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;A function for creating the task&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now we'll write a function that will create a task for the server of the data labeling service. It will be the create_task function. It will accept the API URL, project ID, path to the image, and the API key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Opening the image and encoding it in base64.&lt;/li&gt;
&lt;li&gt; Forming the task specification (task_spec) containing the encoded image.&lt;/li&gt;
&lt;li&gt; Creating a payload for the request.&lt;/li&gt;
&lt;li&gt; Setting the request headers, including the API key.&lt;/li&gt;
&lt;li&gt; Sending a POST request to the 2Captcha server.&lt;/li&gt;
&lt;li&gt; Processing the server response and returning the result.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def create_task(api_url, project_id, image_path, api_key):
    try:
        with open(image_path, "rb") as image_file:
            encoded_image = base64.b64encode(image_file.read()).decode('utf-8')
            image_data = f"data:image/jpeg;base64,{encoded_image}"

        task_spec = [
            {
                "image_with_animal": image_data
            }
        ]

        payload = {
            "project_id": project_id,
            "task_spec": task_spec  # Array with one object inside 
        } 

        headers = { 
            "Content-Type": "application/json",
            "Authorization": f"{api_key}" 
        } 

        print("Data to be sent:", json.dumps(payload, indent=4))  # Logging data before sending 

        response = requests.post(api_url + "/tasks", json=payload, headers=headers)

        if response.status_code == 201: 
            print(f"The task was successfully created for the file {image_path}")
            return True 
        else: 
            print(f"Error when creating a task for the file {image_path}: {response.status_code}, {response.text}")
            return False 
    except Exception as e: 
        print(f"An error occurred when creating a task for the file {image_path}: {str(e)}")
        return False
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;A function to check the validity of the project ID&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During the testing of the script, I had to create a foolproof protection. The validate_project_id function checks whether the specified project ID is correct. It sends a GET request to the service server and returns the verification result.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def validate_project_id(api_url, project_id, api_key):
    headers = {
        "Authorization": f"{api_key}"
    }
    response = requests.get(f"{api_url}/projects/{project_id}", headers=headers)
    return response.status_code == 200
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Image processing function&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since the images will not be uploaded to the project immediately, but will be fed there in some portions, a function to process and check the images for repetition was required. The process_images function processes all images in the specified directory. It checks the validity of the project ID, reads the images, checks if they have already been sent, and creates tasks for new images.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Checking the validity of the project ID.&lt;/li&gt;
&lt;li&gt; Loading the history of sent images.&lt;/li&gt;
&lt;li&gt; Iterating through all files in the specified directory.&lt;/li&gt;
&lt;li&gt; Checking whether the file is an image and whether it's been sent earlier.&lt;/li&gt;
&lt;li&gt; Creating a task for each new image.&lt;/li&gt;
&lt;li&gt; Updating the history of sent images.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def process_images(api_url, project_id, images_dir, api_key):
    try:
        if not validate_project_id(api_url, project_id, api_key):
            print(f"Incorrect `project_id`: {project_id}")
            return 

        sent_images = set() 
        # File for storing sent images 
        history_file = "sent_images.json" 

        # Loading the history of sent images if the file exists 
        if os.path.exists(history_file):
            with open(history_file, "r") as file:
                sent_images = set(json.load(file))

        # Going through all files in the directory 
        for filename in os.listdir(images_dir):
            image_path = os.path.join(images_dir, filename) 
            # Checking if the file is an image and if it's been sent earlier 
            if os.path.isfile(image_path) and filename.lower().endswith(('.png', '.jpg', '.jpeg')) and filename not in sent_images:
                print(f"File processing: {image_path}")
                if create_task(api_url, project_id, image_path, api_key):
                    sent_images.add(filename) 

        # Updating the history of sent images 
        with open(history_file, "w") as file: 
            json.dump(list(sent_images), file) 
            print("Process completed successfully.") 
except Exception as e: 
            print(f"An error occurred while processing images: {str(e)}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The main block of the program&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the main block of the program, we set the parameters: API URL, project ID, directory with images, and the API key. Then we call the process_images function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Example of using the function
if __name__ == "__main__":
    api_url = "http://dataapi.2captcha.com " # Updated API URL for creating tasks 
    project_id = 64 # Replace with your project ID
    images_dir = "C:/images " # Specify the directory with images 
    api_key = "Your API key" # Replace with your API key 

    # Check for images in the directory 
    if not os.path.isdir(images_dir):
        print(f"The directory {images_dir} does not exist")
    else:
        image_files = [f for f in os.listdir(images_dir) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]
        if not image_files:
            print(f"There are no images to process in the directory {images_dir}")
        else: 
            print(f"Found {len(image_files)} images for processing")
            process_images(api_url, project_id, images_dir, api_key)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;`&lt;/p&gt;

&lt;p&gt;This way I got a Python script that automates the process of creating tasks on the data labeling platform. The script reads the images from the directory, encodes them in base64, sends them to the server, and saves the history of the sent images. You can see the whole script below.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;br&gt;
import requests&lt;br&gt;
import base64&lt;br&gt;
import os&lt;br&gt;
import json&lt;/p&gt;

&lt;p&gt;def create_task(api_url, project_id, image_path, api_key):&lt;br&gt;
    try:&lt;br&gt;
        with open(image_path, "rb") as image_file:&lt;br&gt;
            encoded_image = base64.b64encode(image_file.read()).decode('utf-8')&lt;br&gt;
            image_data = f"data:image/jpeg;base64,{encoded_image}"&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    task_spec = [
        {
            "image_with_animal": image_data
        }
    ]

    payload = {
        "project_id": project_id,
        "task_spec": task_spec  # Array with one object inside 
    } 

    headers = { 
        "Content-Type": "application/json",
        "Authorization": f"{api_key}" 
    } 

    print("Data to be sent:", json.dumps(payload, indent=4))  # Logging data before sending 

    response = requests.post(api_url + "/tasks", json=payload, headers=headers)

    if response.status_code == 201: 
        print(f"The task was successfully created for the file {image_path}")
        return True 
    else: 
        print(f"An error occurred when creating a task for the file {image_path}: {response.status_code}, {response.text}")
        return False 
except Exception as e: 
    print(f"An error occurred when creating a task for the file {image_path}: {str(e)}")
    return False
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;def validate_project_id(api_url, project_id, api_key):&lt;br&gt;
    headers = {&lt;br&gt;
        "Authorization": f"{api_key}"&lt;br&gt;
    }&lt;br&gt;
    response = requests.get(f"{api_url}/projects/{project_id}", headers=headers)&lt;br&gt;
    return response.status_code == 200&lt;/p&gt;

&lt;p&gt;def process_images(api_url, project_id, images_dir, api_key):&lt;br&gt;
    try:&lt;br&gt;
        if not validate_project_id(api_url, project_id, api_key):&lt;br&gt;
            print(f"Incorrect &lt;code&gt;project_id&lt;/code&gt;: {project_id}")&lt;br&gt;
            return &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sent_images = set() 
# File for storing sent images 
history_file = "sent_images.json" 

# Loading the history of sent images if the file exists 
if os.path.exists(history_file):
        with open(history_file, "r") as file:
            sent_images = set(json.load(file))

# Going through all files in the directory 
for filename in os.listdir(images_dir):
        image_path = os.path.join(images_dir, filename) 
        # Checking if the file is an image and if it's been sent earlier 
        if os.path.isfile(image_path) and filename.lower().endswith(('.png', '.jpg', '.jpeg')) and filename not in sent_images:
            print(f"File processing: {image_path}")
            if create_task(api_url, project_id, image_path, api_key):
                sent_images.add(filename) 

# Updating the history of sent images 
with open(history_file, "w") as file: 
    json.dump(list(sent_images), file) 
print("Process completed successfully.") 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;except Exception as e: &lt;br&gt;
    print(f"An error occurred while processing images: {str(e)}")&lt;/p&gt;

&lt;h1&gt;
  
  
  Example of using the function
&lt;/h1&gt;

&lt;p&gt;if &lt;strong&gt;name&lt;/strong&gt; == "&lt;strong&gt;main&lt;/strong&gt;":&lt;br&gt;
    api_url = "&lt;a href="http://dataapi.2captcha.com" rel="noopener noreferrer"&gt;http://dataapi.2captcha.com&lt;/a&gt; " # Updated API URL for creating tasks &lt;br&gt;
    project_id = 64 # Replace with your project ID&lt;br&gt;
    images_dir = "C:/images " # Specify the directory with images &lt;br&gt;
    api_key = "Your API key" # Replace with your API key &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Checking for images in the directory 
if not os.path.isdir(images_dir):
    print(f"The directory {images_dir} does not exist")
else:
    image_files = [f for f in os.listdir(images_dir) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]
    if not image_files:
        print(f"There are no images to process in the directory {images_dir}")
    else: 
        print(f"Found {len(image_files)} images for processing")
        process_images(api_url, project_id, images_dir, api_key)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/n4qyOXrnE6A" rel="noopener noreferrer"&gt;https://youtu.be/n4qyOXrnE6A&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuring the script&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, in order for the script to work, you need to prepare everything:&lt;br&gt;
We create a folder where we create a file with an extension.py and call it what you like. I'm not very imaginative, so it will be script.py&lt;br&gt;
Also, we create a subfolder in the folder where our images will be stored. The path to this folder is written in the script – line 84.&lt;br&gt;
Now we need the API key, API URL, and the project number – lines 85, 82, and 83 in the script, respectively.&lt;/p&gt;

&lt;p&gt;We collect all this in the data labeling service.&lt;br&gt;
The API key and the project number are in your dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ssqgdeolt5ecgfu3knt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ssqgdeolt5ecgfu3knt.png" alt="Image description" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And we take the API URL from the API documentation of the service, but I have already written it for you in the script. However, if you need something more complex than labeling animals, you can study it for your own interest.&lt;/p&gt;

&lt;p&gt;Also you need to create the project itself in the service so that there is a place to which you send images. In theory, it is possible to send everything through the API, but even I freaked out and did it all manually. If you want, you can figure out how to send everything through the API on your own.&lt;/p&gt;

&lt;p&gt;So, we click on the "Add project" button&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F48joqypy92ggqfn39ehq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F48joqypy92ggqfn39ehq.png" alt="Image description" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We fill in the fields "Title", "Description", and "Public description". The difference between a description and a public description is that the first one is a short description, and the public one is a description of the task. Don't ask me why, it's beyond my competence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffy9ymiqem61dvvr0ed9s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffy9ymiqem61dvvr0ed9s.png" alt="Image description" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We select the language (1) and create two specifications (2 and 3). (2) – these are the fields for sending images. There are only two options – an image or a text, in our case, we need to send images, so we choose an image. &lt;/p&gt;

&lt;p&gt;(3) – These are the fields for the worker, so, in fact, these are the fields where it will write an answer for us (the label of the animal). Since I need it to write me an answer to what kind of animal is depicted in the picture, I use Input. In addition to input, there is also a select, radio, and checkbox. In general, there are plenty to choose from.&lt;/p&gt;

&lt;p&gt;In the screenshot below, you can see the "Required" checkbox picked – this is a kind of protection for yourself (double control) – to avoid sending an empty task. That is, if it is checked, the task will not be created until the condition is met (in our case, the presence of an image).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzy0qoy7gqn42ot0bnf95.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzy0qoy7gqn42ot0bnf95.png" alt="Image description" width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is still the possibility of getting the result of the responses directly to the server, but I did not need it. It will probably be needed soon, but not this time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjzs5k6fqn9dqe7s65vit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjzs5k6fqn9dqe7s65vit.png" alt="Image description" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Actually, that's it, we save the project, copy its number and paste it into the script (line 83), and you can run it! We run it with the command python script.py in the developer console.&lt;/p&gt;

&lt;p&gt;Then the task flies away to the worker and after it is solved, the answers appear in the personal account in this format&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajnsijaeyfrswc1r6bxk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajnsijaeyfrswc1r6bxk.png" alt="Image description" width="800" height="626"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, this is it, the task is solved. &lt;/p&gt;

</description>
      <category>machinelearning</category>
    </item>
    <item>
      <title>CacheBrowser: Bypassing the Chinese Firewall Without Proxies</title>
      <dc:creator>2captcha</dc:creator>
      <pubDate>Wed, 17 Jul 2024 12:05:17 +0000</pubDate>
      <link>https://dev.to/2captcha/cachebrowser-bypassing-the-chinese-firewall-without-proxies-1086</link>
      <guid>https://dev.to/2captcha/cachebrowser-bypassing-the-chinese-firewall-without-proxies-1086</guid>
      <description>&lt;p&gt;Content Delivery Networks (CDNs) play a crucial role in the distribution of internet traffic, yet little is known about how internet censors, especially in countries like China, manage to control CDN content. Researchers from the University of Massachusetts have tackled this issue, developing CacheBrowser, an innovative tool to bypass such censorship without relying on proxies. This article delves into their findings and the implications for internet freedom.&lt;/p&gt;

&lt;p&gt;We (specialists from &lt;a href="https://2captcha.com/proxy" rel="noopener noreferrer"&gt;proxy service&lt;/a&gt;) have prepared an overview material with the main conclusions and results of this experiment (translate of this material).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xz6l2rq8mfm9e82f212.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xz6l2rq8mfm9e82f212.jpeg" alt="Image description" width="800" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem of Internet Censorship and CDNs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Internet censorship is a significant threat to free speech and access to information. Traditional methods of internet communication, rooted in the end-to-end model from the 1970s, make it easy for censors to block access based on IP addresses. However, the rise of CDNs has introduced new challenges and opportunities.&lt;/p&gt;

&lt;p&gt;CDNs, such as Akamai, handle a substantial portion of global internet traffic by caching content on geographically distributed servers. This not only improves user experience but also helps content creators scale their operations efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Techniques for Censoring CDN Content&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The University of Massachusetts study outlines several censorship techniques applied to CDNs, focusing on the methods used by Chinese authorities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;IP Filtering&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Method:&lt;/strong&gt; Blacklisting IP addresses of servers hosting prohibited content.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Challenges:&lt;/strong&gt; Due to the distributed nature of CDNs, blocking one IP is ineffective. CDNs use numerous edge servers, making it difficult for censors to block all relevant IPs without affecting allowed content.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;DNS Interference&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  **Method:** Preventing users from resolving domain names of prohibited sites using DNS poisoning or manipulation.
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Challenges:&lt;/strong&gt; Users can bypass this method with non-standard DNS resolution techniques. Combining DNS blocking with IP filtering is also ineffective against CDNs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Deep Packet Inspection (DPI)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Method:&lt;/strong&gt; Analyzing data packets for specific URLs or keywords and blocking them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Challenges:&lt;/strong&gt; DPI is resource-intensive and can be thwarted by encryption methods like HTTPS.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Self-Censorship by CDN Providers&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  **Method:** States can pressure CDN providers to comply with local censorship laws.
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Challenges:&lt;/strong&gt; Providers often comply to maintain market presence, leading to self-censorship.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;China’s Approach to CDN Censorship&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;China’s Great Firewall is one of the most advanced censorship systems globally. Researchers conducted experiments using a Linux node within China, confirming it experienced similar censorship to typical Chinese users. They analyzed blocking methods for various CDN providers, including Akamai, CloudFlare, and Amazon CloudFront.&lt;/p&gt;

&lt;p&gt;Key Findings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Akamai’s Self-Censorship:&lt;/strong&gt; In China, Akamai blocks access to prohibited content while allowing access outside the country.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;DNS Filtering:&lt;/strong&gt; The primary method used for other CDN providers involved resolving DNS requests for blocked sites to incorrect IP addresses.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Encryption and HTTPS:&lt;/strong&gt; While DPI can block unencrypted traffic, HTTPS forces censors to block entire domains, inadvertently affecting allowed content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;CacheBrowser: Bypassing Censorship Without Proxies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Given the challenges in blocking CDN content, researchers developed CacheBrowser, a tool that bypasses censorship by leveraging CDN properties. Unlike traditional methods that rely on proxies, CacheBrowser directly accesses edge servers where content is cached.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbtg943wj42xw2wpxmvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbtg943wj42xw2wpxmvx.png" alt="Image description" width="724" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How CacheBrowser Works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Client Software:&lt;/strong&gt; Installed on the user’s computer, CacheBrowser uses a standard browser for content access.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;LocalDNS System:&lt;/strong&gt; Intercepts DNS requests locally, reducing dependency on traditional DNS resolution.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Scraper and Resolver Modules:&lt;/strong&gt; Identify blocked domains and resolve them through non-standard methods, updating the LocalDNS database.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Bootstrapper Module:&lt;/strong&gt; Uses geographically distributed DNS servers to ensure resolution, bypassing local censorship.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In practice, CacheBrowser allows users to access blocked content by contacting edge servers directly, using IP addresses obtained through alternative means. This method proved effective even in accessing heavily censored sites like Facebook from within China.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fntwu7ezt6t0t05fuk3ac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fntwu7ezt6t0t05fuk3ac.png" alt="Image description" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The CacheBrowser experiment demonstrates a viable method for bypassing internet censorship by exploiting the inherent properties of CDNs. This tool offers a promising solution for accessing restricted content in regions with stringent censorship, like China. By understanding and leveraging the weaknesses in traditional censorship techniques, CacheBrowser provides a pathway to maintaining free access to information on the internet.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Six Ways to Use Residential Proxies for Corporate Objectives</title>
      <dc:creator>2captcha</dc:creator>
      <pubDate>Mon, 20 May 2024 07:45:34 +0000</pubDate>
      <link>https://dev.to/2captcha/six-ways-to-use-residential-proxies-for-corporate-objectives-mg</link>
      <guid>https://dev.to/2captcha/six-ways-to-use-residential-proxies-for-corporate-objectives-mg</guid>
      <description>&lt;p&gt;&lt;a href="https://2captcha.com/proxy/residential-proxies"&gt;Residential proxies&lt;/a&gt; can play a crucial role in solving various corporate challenges, from accessing geo-restricted content to enhancing security measures. Here’s how businesses can leverage this technology effectively.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk92ygs4a1s9ldly1zcok.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk92ygs4a1s9ldly1zcok.jpeg" alt="Image description" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Competitive Intelligence
&lt;/h2&gt;

&lt;p&gt;Overview:&lt;br&gt;
Residential proxies allow businesses to gather competitive intelligence by masking their IP addresses as those of real users. This helps in collecting data from competitors' websites without being blocked.&lt;/p&gt;

&lt;p&gt;Use Case:&lt;br&gt;
Companies can monitor competitor pricing, promotions, and new product releases. For instance, an e-commerce company can track prices across different platforms to adjust its own pricing strategy accordingly.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Brand Protection
&lt;/h2&gt;

&lt;p&gt;Overview:&lt;br&gt;
Residential proxies are effective in combating counterfeit products. By using IP addresses from specific regions, companies can identify and take action against unauthorized sellers.&lt;/p&gt;

&lt;p&gt;Use Case:&lt;br&gt;
Pharmaceutical companies can detect counterfeit drug sellers by accessing their websites through proxies that appear as local users, making it easier to gather evidence and take legal actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Testing and Performance Monitoring
&lt;/h2&gt;

&lt;p&gt;Overview:&lt;br&gt;
Using residential proxies, businesses can test new website features and monitor performance from different geographical locations. This ensures that users across the globe have a consistent experience.&lt;/p&gt;

&lt;p&gt;Use Case:&lt;br&gt;
A global SaaS company can simulate user interactions from various regions to test website load times and functionality, ensuring optimal performance for users worldwide.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Marketing and Advertising Optimization
&lt;/h2&gt;

&lt;p&gt;Overview:&lt;br&gt;
Residential proxies enable businesses to view how their advertisements appear in different regions and optimize their marketing strategies accordingly. This includes analyzing competitors' ads and their effectiveness.&lt;/p&gt;

&lt;p&gt;Use Case:&lt;br&gt;
A digital marketing agency can use proxies to verify that ads are being displayed correctly in target regions, ensuring the ad spend is effectively utilized and tweaking campaigns based on local performance data.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Content Aggregation
&lt;/h2&gt;

&lt;p&gt;Overview:&lt;br&gt;
Businesses that aggregate content from multiple sources can use residential proxies to avoid anti-bot measures, ensuring continuous data collection without interruptions.&lt;/p&gt;

&lt;p&gt;Use Case:&lt;br&gt;
A price comparison website can use proxies to gather real-time data on product prices from various e-commerce platforms, keeping their database updated and accurate.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Custom Data Collection and Analysis
&lt;/h2&gt;

&lt;p&gt;Overview:&lt;br&gt;
Residential proxies are essential for companies that specialize in large-scale data collection and analysis, as they help avoid detection and blocking by websites.&lt;/p&gt;

&lt;p&gt;Use Case:&lt;br&gt;
A market research firm can use proxies to collect vast amounts of data from different online sources for analysis, aiding in producing comprehensive market insights.&lt;/p&gt;

&lt;p&gt;Residential proxies offer businesses a way to mimic real user behavior, providing access to restricted data and ensuring the smooth operation of various online activities. By integrating residential proxies into their strategies, companies can enhance data collection, protect their brand, and optimize marketing efforts.&lt;/p&gt;

</description>
      <category>proxy</category>
      <category>vpn</category>
      <category>security</category>
    </item>
    <item>
      <title>How to set up a proxy for the Google Chrome browser – step-by-step instructions</title>
      <dc:creator>2captcha</dc:creator>
      <pubDate>Mon, 22 Apr 2024 08:38:15 +0000</pubDate>
      <link>https://dev.to/2captcha/how-to-set-up-a-proxy-for-the-google-chrome-browser-step-by-step-instructions-g83</link>
      <guid>https://dev.to/2captcha/how-to-set-up-a-proxy-for-the-google-chrome-browser-step-by-step-instructions-g83</guid>
      <description>&lt;p&gt;Often, to solve various tasks, you need to use a proxy server, which allows, for example, to study search results through the eyes of a person from another region or even a country. But for an ordinary Internet user, setting up a proxy for Google Chrome may seem to be quite a complicated process (at first thought), but in fact it is no more difficult than installing wallpaper on the main screen of your computer.&lt;/p&gt;

&lt;p&gt;There are no settings that allow you to install a proxy inside the Google Chrome browser itself. The settings of your operating system have to be used, and now we will figure out how to deal with that.&lt;br&gt;
Before setting up a proxy for Google Chrome, you need to get these proxies. There are many free services, but we recommend using paid proxies, as they are more secure and work faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where do we get a proxy?
&lt;/h2&gt;

&lt;p&gt;Using the example of 2Captcha residential proxies, we will tell you where to get a proxy.&lt;br&gt;
If you do not have an account on the 2Captcha service yet, register there and log in to your personal account.&lt;br&gt;
Top up your balance, then click on the "Proxy" button on the left.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3zx7cv37yc3utc9l6ir.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3zx7cv37yc3utc9l6ir.png" alt="Image description" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will be sent to the page with the 2Captcha residential proxies. In the right sidebar you will see a window for the proxy region selection; select the country, the region, and the city you need there. If you don't need to be linked to a specific city or region, you can choose a country or even a mix of countries from a specified region. In the "IP lifetime" box, set a number (no more than 120), this is the time after which reconnection to a new IP address from your chosen region will take place.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fetpcd74ap7x34gf3mize.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fetpcd74ap7x34gf3mize.png" alt="Image description" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the "Generate" button.&lt;/p&gt;

&lt;p&gt;Your proxies are ready – now you just need to configure them for the Chrome browser.&lt;/p&gt;

&lt;p&gt;In the center of the page you can see the necessary data – "Login", "Password", and "Host" –that's all you need. You can save them in a separate file for convenience, or use your client area.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa586e3a69ms3zz9f9iza.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa586e3a69ms3zz9f9iza.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to use a proxy for only one browser, you will need an Antidetect Browser, for example Dolphin Anti or Indigo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-step instructions for setting up a proxy
&lt;/h2&gt;

&lt;p&gt;Go to the settings of your operating system, click on the "Start" button and then click on the gear sign on the left.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxboat9hf5kr41uuvt3a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxboat9hf5kr41uuvt3a.png" alt="Image description" width="658" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, select the section – "Network and Internet"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9i4k8yalqtuuoiy8vgxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9i4k8yalqtuuoiy8vgxo.png" alt="Image description" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The "Proxy server" button is on the bottom left.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5fj3pyob1mf9tjc8glt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5fj3pyob1mf9tjc8glt.png" alt="Image description" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You need the section – "Configuring the proxy manually". Turn the "Use proxy server" checkbox to the "On" position.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwe4cnhr3qh4rqdtlqc91.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwe4cnhr3qh4rqdtlqc91.png" alt="Image description" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter the Address and port in the specified fields and click on the "Save" button.&lt;/p&gt;

&lt;p&gt;The proxy settings are applied, now you just need to enter your login and password (if you use paid proxies). The first time you try to access the Internet, a field for entering your login and password will appear, after entering them you will be able to use the Internet.&lt;/p&gt;

&lt;p&gt;For the purity of the experiment, you can check which IP address is used for you by typing the query "My IP" in the Google search engine, and you will see the result on any checker.&lt;/p&gt;

&lt;p&gt;A detailed video instruction describing the proxy set up process for Google Chrome is attached below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=ZC7bh15EJlw"&gt;https://www.youtube.com/watch?v=ZC7bh15EJlw&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And more useful videos can be found on our YouTube channel. Also, we have a library on Github.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Solving Amazon captcha Waf Captcha fully automatically with almost zero experience in development</title>
      <dc:creator>2captcha</dc:creator>
      <pubDate>Tue, 12 Mar 2024 06:08:37 +0000</pubDate>
      <link>https://dev.to/2captcha/solving-amazon-captcha-waf-captcha-fully-automatically-with-almost-zero-experience-in-development-3j69</link>
      <guid>https://dev.to/2captcha/solving-amazon-captcha-waf-captcha-fully-automatically-with-almost-zero-experience-in-development-3j69</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Disclaimer: &lt;br&gt;
Dear followers!&lt;br&gt;
We'd like to share an insightful article, detailing effective methods for solving CAPTCHA on the Amazon platform. While this article isn't authored by us, we believe it's important to share valuable information with our community. We hope you find this article helpful and engaging!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A small epigraph - if you are making an instruction, then do it to the end, otherwise instructions on &lt;a href="https://2captcha.com/p/amazon-captcha-bypass"&gt;how to solve the Amazon captcha&lt;/a&gt; for junior developer will be as clear as mud.&lt;/p&gt;

&lt;p&gt;What's it all about? When I needed to solve a captcha from Amazon, the notorious Waf Captcha, I started looking for information at a service that I constantly use when I work with GSA Ranker and some other services (2captcha).&lt;/p&gt;

&lt;p&gt;I found instructions there and posted the link to it above. As you probably understood from the epigraph, I didn’t understand a thing, or rather, I understood that I needed to use the API, but that’s all...&lt;/p&gt;

&lt;p&gt;It was much easier with &lt;a href="https://dev.to/2captcha/how-to-solve-captcha-in-selenium-1n3"&gt;Selenium&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The main issue is the short timeout given for a solution from Amazon's side. The time to solve the captcha is limited, and if there's no response, the captcha refreshes (two of its parameters get updated - iv and context)&lt;/p&gt;

&lt;p&gt;It turns out the captcha freshness timeout is about 30 seconds, and in that time, you need to find the parameters on the page, copy them, paste them into the script code, and run it. After that, 2captcha should solve it and return the correct answer. I tried to do this for a couple of fruitless hours, developing a routine of actions, but alas, searching for and replacing the changing parameters takes at least 12-15 seconds, leaving only 15 to 18 seconds for the captcha to be solved by the service, which in current realities sounds quite fantastical.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0ifmqf0v3yss47rzmem.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0ifmqf0v3yss47rzmem.jpg" alt="Image description" width="800" height="334"&gt;&lt;/a&gt;&lt;br&gt;
We need a different approach here, the script should search for and insert the parameters, but how can someone who's never dealt with anything more complex than Ahrefs in their life write it? That's exactly why I think instructions like those mentioned in the article need to be more detailed than just "Just use the API, are you completely nuts?"&lt;/p&gt;
&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;p&gt;After all the solution was found, and it took me about 3 hours. Let me tell you how a junior developer can solve the Amazon captcha fully automatically.&lt;/p&gt;

&lt;p&gt;You'll need GPT Chat, and in my case, video recognition for Amazon captcha (you won't need this, as I'll give you the ready-made file).&lt;/p&gt;

&lt;p&gt;I got the video from a friend who is a programmer, but he did not allow me to make it public, as it wasn't anonymized.&lt;br&gt;
However, you'll keep nagging me for proofs, and then I'll end up on antidepressants because no one believes me, so I reproduced this video at the very end, when I got the final script, and will happily attach it at the end of this text, as a demonstration of my endless dedication to the audience!&lt;/p&gt;

&lt;p&gt;So, let’s do it step by step.&lt;/p&gt;

&lt;p&gt;I took the video, made 3 screenshots, uploaded them to GPT Chat, and asked it to transcribe this code into text for me.&lt;/p&gt;

&lt;p&gt;The video contained several files but showed only the contents of 2 of them - index.js and inject.js - which is where I started.&lt;br&gt;
I won't bore you with the details of deciphering the screenshots (it was a bit of a hassle to compile the code from the screenshots into one unit but in the end, I got these two pieces of code for the two files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// index.js
import { launch } from 'puppeteer'
import { Captcha } from '2captcha-ts'
import { readFileSync } from 'fs'

const solver = new Captcha(process.env.APIKEY)

const target = 'URL of website where you faced CAPTCHA'

const example = async () =&amp;gt; {
  const browser = await launch({
    headless: false,
    devtools: true
  })

  const [page] = await browser.pages()

  const preloadFile = readFileSync('./inject.js', 'utf8')
  await page.evaluateOnNewDocument(preloadFile)

  // Here we intercept the console messages to catch the message logged by inject.js script
  page.on('console', async (msg) =&amp;gt; {
    const txt = msg.text()
    if (txt.includes('intercepted-params:')) {
      const params = JSON.parse(txt.replace('intercepted-params:', ''))

      const wafParams = {
        pageurl: target,
        sitekey: params.key,
        iv: params.iv,
        context: params.context,
        challenge_script: params.challenge_script,
        captcha_script: params.captcha_script
      }
      console.log(wafParams)

      try {
        console.log('Solving the captcha...')
        const res = await solver.solveRecaptchaV2(wafParams)
        console.log(`Solved the captcha ${res.id}`)
        console.log(res)
        console.log('Using the token...')
        await page.evaluate(token =&amp;gt; {
          window.localStorage.inputCaptchaToken(token)
        }, res.data.captcha.voucher)
        console.log(e)
      } catch (e) {
        console.log(e)
      }
    }
  })

  await page.goto(target)
  // Additional code to interact with the page after captcha is solved might be here...
}

example()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the second file, inject.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.clear = () =&amp;gt; console.log('Console was cleared')

const i = setInterval(() =&amp;gt; {
  if (window.CaptchaScript) {
    clearInterval(i)

    let params = gokProps

    Array.from(document.querySelectorAll('script')).forEach(s =&amp;gt; {
      const src = s.getAttribute('src')
      if (src &amp;amp;&amp;amp; src.includes('captcha.js')) params.captcha_script = src
      if (src &amp;amp;&amp;amp; src.includes('challenge.js')) params.challenge_script = src
    })

    console.log('intercepted-params: ' + JSON.stringify(params))
  }
}, 5)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I asked the Chat how to make the code work, and I was advised to use the standard command.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;node index.js&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But I've been around these internet streets for a long time, and I understand that the code won't just work like that if the necessary libraries aren't installed on the computer. My neuro-consultant helped me out here too.&lt;/p&gt;

&lt;p&gt;After examining the code, I gave him in the form of screenshots, he recommended installing the following packages:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/puppeteer"&gt;puppeteer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/2captcha-ts"&gt;2captcha-ts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Honestly, I didn't quite understand why playwright is needed here, but who am I to doubt the competence of the Chat.&lt;/p&gt;

&lt;p&gt;As such, the installation code is npm install puppeteer 2captcha-ts playwright (though I couldn't install them all together using VS Code, probably because of my clumsy hands, I installed them one by using the console).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install puppeteer&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;code&gt;npm install 2captcha-ts&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Next is where it gets interesting, because everything up to this point I know one way or another, but the next block is a real mystery to me, and I just do what my neuro-consultant tells me.&lt;/p&gt;

&lt;p&gt;So, for the code to work correctly, a file with the .env extension was needed. It can be unnamed, but it should contain the following data:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;APIKEY=your_2captcha_api_key&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
It is understood that instead of the "your_2captcha_api_key" parameter, I inserted my own key from the service.&lt;/p&gt;

&lt;p&gt;There were 6 more recommendations on what to do to make the code work, but...&lt;/p&gt;

&lt;p&gt;So, the first run and the first error occurred.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8a9ldo9l5t4rg86vofi9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8a9ldo9l5t4rg86vofi9.jpg" alt="Image description" width="612" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The error was related to using syntax ES6 import in Node.js. To use it, you either need to specify the module type in package.json or change the file extension to .mjs.&lt;/p&gt;

&lt;p&gt;I was too lazy to specify the module type in package.json, so I took the path of least resistance and simply renamed the file extension from .js to .mjs.&lt;/p&gt;

&lt;p&gt;The next error was related to the imported package 2captcha-ts, but I don't want to go into detail about it. I'll just say that I changed the code responsible for running this module several times, added logging, and checked the correctness of connecting the .env file.&lt;/p&gt;

&lt;p&gt;Still, it didn't work. The script kept throwing errors and stubbornly refused to run. I compared the screenshot and the code extracted from it by the Chat and found a small typo, which turned out to be the root of the problem.&lt;/p&gt;

&lt;p&gt;As it turned out, even that didn't help - an error occurred saying &lt;code&gt;APIKEY is not defined in .env file&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We fixed this by adding a new package:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/dotenv"&gt;dotenv&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install dotenv&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After that, I encountered a couple more typos, which the Chat tried to solve by changing the code structure, but I just needed to carefully compare the screenshot and the code itself.&lt;/p&gt;

&lt;p&gt;In the end, the code of the index.js file looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// index.js
import { launch } from 'puppeteer'
import { Captcha } from '2captcha-ts'
import { readFileSync } from 'fs'

const solver = new Captcha(process.env.APIKEY)

const target = 'URL of website where you faced CAPTCHA'

const example = async () =&amp;gt; {
  const browser = await launch({
    headless: false,
    devtools: true
  })

  const [page] = await browser.pages()

  const preloadFile = readFileSync('./inject.js', 'utf8')
  await page.evaluateOnNewDocument(preloadFile)

  // Here we intercept the console messages to catch the message logged by inject.js script
  page.on('console', async (msg) =&amp;gt; {
    const txt = msg.text()
    if (txt.includes('intercepted-params:')) {
      const params = JSON.parse(txt.replace('intercepted-params:', ''))

      const wafParams = {
        pageurl: target,
        sitekey: params.key,
        iv: params.iv,
        context: params.context,
        challenge_script: params.challenge_script,
        captcha_script: params.captcha_script
      }
      console.log(wafParams)

      try {
        console.log('Solving the captcha...')
        const res = await solver.solveRecaptchaV2(wafParams)
        console.log(`Solved the captcha ${res.id}`)
        console.log(res)
        console.log('Using the token...')
        await page.evaluate(token =&amp;gt; {
          window.localStorage.inputCaptchaToken(token)
        }, res.data.captcha.voucher)
        console.log(e)
      } catch (e) {
        console.log(e)
      }
    }
  })

  await page.goto(target)
  // Additional code to interact with the page after captcha is solved might be here...
}

example()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Turned into the following index.mjs&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// index.js
import 'dotenv/config';
import { launch } from 'puppeteer'
import Captcha from '2captcha-ts';
import { readFileSync } from 'fs'

if (!process.env.APIKEY) {
    console.error("APIKEY is not defined in .env file");
    process.exit(1); // Terminate execution if key not found
}

const solver = new Captcha.Solver(process.env.APIKEY);

const target = 'URL of website where you faced CAPTCHA'

const example = async () =&amp;gt; {
    const browser = await launch({
        headless: false,
        devtools: true
    })

    const [page] = await browser.pages()

    const preloadFile = readFileSync('./inject.js', 'utf8')
    await page.evaluateOnNewDocument(preloadFile)

    // Here we intercept the console messages to catch the message logged by inject.js script
    page.on('console', async (msg) =&amp;gt; {
        const txt = msg.text()
        if (txt.includes('intercepted-params:')) {
            const params = JSON.parse(txt.replace('intercepted-params:', ''))

            const wafParams = {
                pageurl: target,
                sitekey: params.key,
                iv: params.iv,
                context: params.context,
                challenge_script: params.challenge_script,
                captcha_script: params.captcha_script
            }
            console.log(wafParams)

            try {
                console.log('Solving the captcha...')
                const res = await solver.amazonWaf(wafParams)
                console.log(`Solved the captcha ${res.id}`)
                console.log(res)
                console.log('Using the token...')
                await page.evaluate(async (token) =&amp;gt; {
                    await ChallengeScript.submitCaptcha(token);
                    window.location.reload ()
                }, res.data.captcha_voucher);
            } catch (e) {
                console.log(e)
            }
        } else {
            return
        }
    })

    await page.goto(target)
    // Additional code to interact with the page after captcha is solved might be here...
}

example()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;In the code above, don't forget to substitute the correct URL where the solution is needed (if you decide to apply it).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From this inject.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.clear = () =&amp;gt; console.log('Console was cleared')

const i = setInterval(() =&amp;gt; {
  if (window.CaptchaScript) {
    clearInterval(i)

    let params = gokProps

    Array.from(document.querySelectorAll('script')).forEach(s =&amp;gt; {
      const src = s.getAttribute('src')
      if (src &amp;amp;&amp;amp; src.includes('captcha.js')) params.captcha_script = src
      if (src &amp;amp;&amp;amp; src.includes('challenge.js')) params.challenge_script = src
    })

    console.log('intercepted-params: ' + JSON.stringify(params))
  }
}, 5)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Into this inject.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// console.clear = () =&amp;gt; console.log('Console was cleared')

let counter = 0;
const MAX_ATTEMPTS = 2000; // Approximately 10 seconds at 5 ms intervals
console.log('Let's start searching for CaptchaScript...');

const i = setInterval(() =&amp;gt; {
    console.log(`Attempt ${counter}: Checking for CaptchaScript...`);

    if (window.CaptchaScript || counter &amp;gt; MAX_ATTEMPTS) {
        clearInterval(i);
        if (!window.CaptchaScript) {
            console.log('CaptchaScript не найден');
        } else {
            console.log('CaptchaScript найден');

            let params = gokuProps;
            Array.from(document.querySelectorAll('script')).forEach(s =&amp;gt; {
                const src = s.getAttribute('src');
                if (src &amp;amp;&amp;amp; src.includes('captcha.js')) params.captcha_script = src;
                if (src &amp;amp;&amp;amp; src.includes('challenge.js')) params.challenge_script = src;
            });

            console.log('intercepted-params: ' + JSON.stringify(params));
        }
    }
    counter++;
}, 5);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, the script worked. In full. It solved the captcha and continues to solve it every time it runs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=49vf0ob6xbY"&gt;https://www.youtube.com/watch?v=49vf0ob6xbY&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, the script worked. In full. It solved the captcha and continues to solve it every time it runs.&lt;/p&gt;

&lt;p&gt;Looks like the future has arrived, buddy. But this is not certain.&lt;/p&gt;

&lt;p&gt;What to do with this information? Well, darn it, I really like the advice - just live with it now. But I don't feel like giving advice. Have it your way, maybe someone will find it useful for their projects...&lt;/p&gt;

&lt;p&gt;For more tips and tricks on CAPTCHA recognition, be sure to check out our &lt;a href="https://www.youtube.com/channel/UC_uHJbHt_zH89w4gKGC1sdw"&gt;YouTube channel&lt;/a&gt; where we delve deeper into this topic. Additionally, you can find even more ready-made solutions in our &lt;a href="https://github.com/2captcha"&gt;GitHub repository&lt;/a&gt;. Stay tuned for more insightful content and updates!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>2captcha proxy review - new service</title>
      <dc:creator>2captcha</dc:creator>
      <pubDate>Fri, 01 Mar 2024 07:16:08 +0000</pubDate>
      <link>https://dev.to/2captcha/2captcha-proxy-review-new-service-17l7</link>
      <guid>https://dev.to/2captcha/2captcha-proxy-review-new-service-17l7</guid>
      <description>&lt;p&gt;We've launched a &lt;a href="https://2captcha.com/proxy/residential-proxies"&gt;residential proxy service&lt;/a&gt; and we're excited to introduce it in detail.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4ll5skala4vyiabgva9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4ll5skala4vyiabgva9.png" alt="Image description" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Residential proxies differ from server proxies in that with residential proxies, all available IP addresses are tied to internet providers in different countries. This means that when using such proxies, your IP is associated with a real person's IP, which enhances security and trustworthiness for websites and services, allowing you to tackle more complex tasks.&lt;/p&gt;

&lt;p&gt;Now, onto specifics - our &lt;a href="https://2captcha.com/proxy/residential-proxies"&gt;residential proxy&lt;/a&gt; network covers over 220 countries, with a pool of over 90 million available IP addresses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyc8zvkoshuysjq4xe8la.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyc8zvkoshuysjq4xe8la.png" alt="Image description" width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Getting started with the service is easy - if you have an account on our platform, all you need to purchase proxies is to ensure that your account balance is positive and has enough funds to cover the cost of the proxies.&lt;/p&gt;

&lt;p&gt;With residential proxies, you're not purchasing a specific IP but rather traffic, within which you can use as many IP addresses as needed (they rotate). The price for one gigabyte of traffic is 5,5$, but with a larger order, you get a discount, which increases proportionally to the amount of traffic. For instance, when purchasing 100 gigabytes of traffic, the price per gigabyte will be 2,5$, which is 50% lower than purchasing 1 gigabyte separately.&lt;/p&gt;

&lt;p&gt;As for settings, we offer the option to specify the country, region, or city when forming the pool of IP addresses. You can choose an IP address down to a specific city if needed, or use standard settings where the system mixes different countries. Additionally, you can use a mix of IP addresses from specific regions or countries, which is also convenient for certain tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fokaero6wt71ejd0z93nn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fokaero6wt71ejd0z93nn.png" alt="Image description" width="800" height="585"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can configure the rotation time for IPs, whether to change the address every minute or every two hours, with a one-minute adjustment step.&lt;/p&gt;

&lt;p&gt;After purchasing traffic, you'll have the option to change your login and password (for authentication). By default, the system generates them automatically, but you can set ones that are convenient for you.&lt;/p&gt;

&lt;p&gt;It's worth noting the presence of pre-configured settings for some popular anti-detection browsers. When selecting a specific browser, three URLs (http, https, Socks5) appear below, any of which you can copy and paste into the proxy configuration field in your chosen anti-detection browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbd28ia4t9q0nsuty8bhm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbd28ia4t9q0nsuty8bhm.png" alt="Image description" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, in your account, you'll find examples for integrating our residential proxies using popular programming languages. Code examples can be found at the bottom of the page.&lt;/p&gt;

</description>
      <category>proxy</category>
      <category>automation</category>
      <category>2captcha</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Understanding Bounding Boxes: A Key Tool in Computer Vision and Machine Learning</title>
      <dc:creator>2captcha</dc:creator>
      <pubDate>Thu, 16 Nov 2023 10:10:34 +0000</pubDate>
      <link>https://dev.to/2captcha/understanding-bounding-boxes-a-key-tool-in-computer-vision-and-machine-learning-2ai</link>
      <guid>https://dev.to/2captcha/understanding-bounding-boxes-a-key-tool-in-computer-vision-and-machine-learning-2ai</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E-Yp9vHh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g3wxutf7fktprui1ey13.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E-Yp9vHh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g3wxutf7fktprui1ey13.png" alt="What is bounding box" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the rapidly evolving field of computer vision, one of the fundamental tools used for object recognition and image classification is the bounding box. These rectangular outlines encapsulate objects or areas of interest within an image, forming the backbone of many machine learning projects.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;More detailed information you can read on our article &lt;a href="https://2captcha.com/p/bounding-box-object-detection"&gt;oriented bounding box&lt;/a&gt; what is it and how we can help you with it!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What are Bounding Boxes?
&lt;/h2&gt;

&lt;p&gt;At its core, a bounding box is a simple concept: a rectangle drawn around an object in an image. This method is instrumental in annotating images for tasks such as object detection, a significant area in computer vision. The process involves marking the size and location of various objects, from people and animals to vehicles and buildings. In some cases, bounding boxes are rotated to better fit the object's shape, known as "oriented bounding boxes," a feature in advanced labeling tools. Besides marking locations, bounding boxes can carry additional information like object classes and attributes, enhancing the depth of data for machine learning models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Their Role in Machine Learning
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GqiR2y-e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gd63pwh7irnv9mbuqpzq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GqiR2y-e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gd63pwh7irnv9mbuqpzq.png" alt="Object" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Machine learning models, like YOLO (You Only Look Once), rely on datasets annotated with bounding boxes for training and testing. These models learn to predict the positions and classes of objects in new, unseen images, making them crucial in developing intelligent systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bounding Boxes and Data Annotation
&lt;/h2&gt;

&lt;p&gt;In artificial intelligence applications, particularly in teaching machines to recognize and classify objects in images, bounding boxes are indispensable. They contribute to the data annotation process, adding essential context to raw data, which could be in various formats like images, text, or videos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Computer Vision and Object Detection
&lt;/h2&gt;

&lt;p&gt;In computer vision, bounding boxes are vital for object detection and localization. By providing explicit information about an object's location and size, they help create comprehensive datasets for machine learning algorithms, enabling these models to identify and classify objects accurately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Applications
&lt;/h2&gt;

&lt;p&gt;From security cameras identifying potential threats to smartphone apps recognizing faces, bounding boxes play a pivotal role. They help in training algorithms to distinguish different objects in varied environments, a cornerstone of modern AI applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  2Captcha’s Solution
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9p24tS73--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ycx3z26znwb5e8b9riit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9p24tS73--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ycx3z26znwb5e8b9riit.png" alt="Bounding Box" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2Captcha offers a robust bounding box data labeling API, tailor-made to meet the specific needs of data scientists. The service focuses on precision and high-quality annotation, essential for crafting cutting-edge machine learning models for computer vision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Aspects
&lt;/h2&gt;

&lt;p&gt;The service supports various image formats like JPEG, PNG, and GIF, with a maximum file size of 600kB and a maximum dimension of 1000px on any side. It requires images in Base64 format and allows for additional instructions or comments to guide the annotation process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Request example
&lt;/h2&gt;

&lt;p&gt;Method: createTask&lt;br&gt;
API endpoint: &lt;code&gt;https://{{api_hostname}}/createTask&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "clientKey":"YOUR_API_KEY",
    "task": {
        "type":"BoundingBoxTask",
        "body":"/9j/4AAQSkZJRgABAQAAAQ..HIAAAAAAQwAABtbnRyUkdCIFhZ.wc5GOGSRF//Z",
        "comment":"draw a tight box around the green apple"
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Response example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "errorId": 0,
    "status": "ready",
    "solution": {
        "bounding_boxes": [
            {
                "xMin": 310,
                "xMax": 385,
                "yMin": 231,
                "yMax": 308
            }
        ]
    },
    "cost": "0.0012",
    "ip": "1.2.3.4",
    "createTime": 1692863536,
    "endTime": 1692863556,
    "solveCount": 1
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bounding boxes are more than just simple rectangles drawn around objects. They are the building blocks of complex machine learning systems that are reshaping our world. By understanding and utilizing bounding boxes, developers and data scientists are pushing the boundaries of what's possible in AI and computer vision.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
