<?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: Lustove</title>
    <description>The latest articles on DEV Community by Lustove (@lustove).</description>
    <link>https://dev.to/lustove</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%2F1214989%2Fadac1931-9bc6-4f38-8734-1155901e923a.png</url>
      <title>DEV Community: Lustove</title>
      <link>https://dev.to/lustove</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lustove"/>
    <language>en</language>
    <item>
      <title>How to Solve DataDome: Complete Guide 2024</title>
      <dc:creator>Lustove</dc:creator>
      <pubDate>Thu, 18 Apr 2024 07:59:14 +0000</pubDate>
      <link>https://dev.to/lustove/how-to-solve-datadome-complete-guide-2024-33a7</link>
      <guid>https://dev.to/lustove/how-to-solve-datadome-complete-guide-2024-33a7</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LHE_wzkh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-04-18/31eb8335-9c2d-43dc-92dc-93bdce028e69.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LHE_wzkh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-04-18/31eb8335-9c2d-43dc-92dc-93bdce028e69.png" alt="" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DataDome is a powerful anti-data scraping protection system widely employed by some companies, to protect their websites from data scraping. It employs advanced technology that poses a significant challenge to solving the system.&lt;/p&gt;

&lt;p&gt;Despite the complexity of DataDome's measures, there are tools that can help break through its defences and enable reliable data scraping. In this guide, we'll explore ways to solve DataDome so you can choose the method that best suits your needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Table of Contents:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understanding DataDome and Its Purpose&lt;/li&gt;
&lt;li&gt;What does DataDome do to detect robots?

&lt;ul&gt;
&lt;li&gt;Server-side Measures&lt;/li&gt;
&lt;li&gt;Client-side Measures&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;How to Solve DataDome

&lt;ul&gt;
&lt;li&gt;Automated Browsers&lt;/li&gt;
&lt;li&gt;High-Quality Proxies&lt;/li&gt;
&lt;li&gt;CAPTCHA Solving Services&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Solving DataDome Captcha&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Understanding DataDome and Its Purpose
&lt;/h2&gt;

&lt;p&gt;DataDome's implementation of CAPTCHA is an integral part of their defense mechanism against bots. CAPTCHA, an acronym for "Completely Automated Public Turing test to tell Computers and Humans Apart," is a test designed to distinguish between human users and automated bots.&lt;/p&gt;

&lt;p&gt;When DataDome's system identifies suspicious activity that indicates the presence of a bot, it may prompt a CAPTCHA challenge. The purpose of this challenge is to ensure that the user attempting to access the website or application is genuinely human. By successfully completing the CAPTCHA, the user verifies their human identity and gains access to the desired content or functionality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vZBSxNNc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-05-12/8e31f4fb-08b8-453e-a0da-38a68b16e905.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vZBSxNNc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-05-12/8e31f4fb-08b8-453e-a0da-38a68b16e905.png" alt="" width="272" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What does DataDome do to detect robots?
&lt;/h2&gt;

&lt;p&gt;DataDome employs a combination of server-side and client-side techniques to detect bots, utilizing various factors such as user behavior, network and browser fingerprints, geolocation tracking, and more. These measures are regularly updated and maintained to adapt to the evolving landscape of bots.&lt;/p&gt;

&lt;p&gt;Let's explore the key detection techniques used by DataDome, categorized into server-side and client-side measures, which are fundamental to understanding how solve DataDome's detection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Server-side Measures:
&lt;/h3&gt;

&lt;p&gt;DataDome's server-side measures focus on analyzing the connection to the server, browsing sessions, and related metadata. By leveraging protocols like HTTP, TCP, and TLS, these measures generate user fingerprints and identify inconsistencies or suspicious behavior.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;TCP/IP Fingerprinting:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Networked devices reveal characteristics from the initial TCP/IP request, including parameters such as Time-To-Live (TTL) and support for IP fragmentation.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;HTTP/2 Fingerprinting:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;DataDome utilizes HTTP/2, a binary protocol that enhances website and application performance through features like header field compression and concurrent requests on the same TCP connection.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;TLS Fingerprinting:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;TLS fingerprinting helps web servers identify the client's identity (e.g., browsers, CLI tools, scripts) using the parameters from the initial connection packet before any application data exchange occurs.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Server-side Behavioral Analysis:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;DataDome analyzes browsing sessions, logs, requests, IP addresses, and interactions with honeypots to detect anomalies and outliers. Unusual request frequencies may trigger rate-limiting, while a change in the country of origin during a browsing session could indicate proxy usage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Client-side Signals:
&lt;/h3&gt;

&lt;p&gt;Client-side signals are collected from end-user devices and can be obtained through JavaScript (JS) or mobile application SDKs. These signals provide valuable insights for bot detection. Here are some techniques used:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Operating System and Hardware Data:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Operating System fingerprinting, including details on CPU, GPU, device models, vendors, and manufacturers, helps identify vulnerable OS versions. Hardware data, which is even more resistant to change, provides additional information.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Browser fingerprinting&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Browser fingerprinting is a method used to identify web browsers by gathering various information about them, including browser type, version, screen resolution, and IP address. This aggregated data forms a unique "fingerprint" that can be used to track browsers across different websites and browsing sessions.&lt;/p&gt;

&lt;p&gt;Browser fingerprinting techniques encompass several methods, such as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Canvas Fingerprinting&lt;/strong&gt;: This technique utilizes the HTML5 canvas element to extract information about a browser's rendering capabilities, which can be used to create a unique fingerprint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audio Fingerprinting&lt;/strong&gt;: By analyzing audio output capabilities and characteristics, audio fingerprinting can be used to differentiate browsers.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Solve DataDome
&lt;/h2&gt;

&lt;p&gt;To overcome DataDome's protective measures, we need to employ a combination of tactics learned from previous experiences. DataDome employs sophisticated bot detection techniques both on the server and client sides, such as TLS fingerprinting and browser fingerprinting. To solve DataDome's defenses and extract the desired data, we must operate stealthily within its radar.&lt;/p&gt;

&lt;p&gt;Here are several effective strategies:&lt;/p&gt;

&lt;h3&gt;
  
  
  Automated Browsers
&lt;/h3&gt;

&lt;p&gt;Tools like Selenium and Puppeteer are invaluable for automation tasks. However, they typically leave conspicuous traces of their automated nature. To tackle DataDome protection, utilize masking packages like puppeteer-extra-plugin-stealth for Puppeteer, selenium-stealth for Selenium, or playwright-stealth for Playwright. While the specifics may vary, the underlying principle remains consistent. These extensions address browser fingerprint inconsistencies, manipulate browser JavaScript variables, and eliminate telltale signs of automation.&lt;/p&gt;

&lt;h3&gt;
  
  
  High-Quality Proxies
&lt;/h3&gt;

&lt;p&gt;Proxies play a crucial role in web scraping by shielding and diversifying your IP address, facilitating data extraction. Datacenter and residential proxies are particularly effective against DataDome. Consider the merits of static and rotating proxies: static proxies offer a fixed IP address, but excessive requests may trigger detection. Rotating proxies, on the other hand, constantly change IP addresses, providing a more discreet approach to scraping.&lt;/p&gt;

&lt;h3&gt;
  
  
  CAPTCHA Solving Services
&lt;/h3&gt;

&lt;p&gt;DataDome often employs CAPTCHA challenges as an additional layer of defense. CAPTCHA-solving services come in two primary forms, sometimes even combining elements of both:&lt;/p&gt;

&lt;p&gt;a. &lt;strong&gt;Automated CAPTCHA Solvers:&lt;/strong&gt; These solutions leverage machine learning techniques such as optical character recognition (OCR) and object detection to swiftly solve challenges. They offer speed and efficiency in solving CAPTCHAs.&lt;/p&gt;

&lt;p&gt;b. &lt;strong&gt;Human Workers:&lt;/strong&gt; Alternatively, manual CAPTCHA solving by a team of human workers is available, albeit slower and more costly. Although the accuracy of this method can be guaranteed, but with the accuracy of machine learning is now gradually improved and there is no gap between human. Moreover, this method lacks the immediacy required for certain tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus Code
&lt;/h2&gt;

&lt;p&gt;A bonus code for top captcha solutions; &lt;a href="https://www.capsolver.com/"&gt;CapSolver&lt;/a&gt;: &lt;strong&gt;WEBS&lt;/strong&gt;. After redeeming it, you will get an extra 5% bonus after each recharge, Unlimited&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" alt="" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Solving DataDome Captcha
&lt;/h2&gt;

&lt;p&gt;For expedient and cost-effective CAPTCHA resolution, automated solutions like &lt;a href="https://www.capsolver.com/"&gt;Capsolver&lt;/a&gt; are recommended. So next, we will talk about how to solve DataDome through an automated captcha solution.&lt;/p&gt;

&lt;p&gt;Before we start solving DataDome, there are some requeriments and points that we need to be aware that they are needed to know&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔒 Requeriments:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Capsolver Key&lt;/li&gt;
&lt;li&gt;Proxy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🪄 Points to be aware that if you don't follow, solution will be invalid:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The query parameters&lt;/strong&gt; of the captcha url are obtained dynamic. This mean that you can't send a static captcha url over and over.
The query parameters are the bold words: &lt;a href="https://geo.captcha-delivery.com/captcha/?**initialCid**=yourInitialCid&amp;amp;**cid**=yourCid&amp;amp;**t**=fe&amp;amp;**referer**=https%3A%2F%2Fantoinevastel.com%2Fbots%2Fdatadome&amp;amp;**s**=YourSParam&amp;amp;**e**=youreParam"&gt;https://geo.captcha-delivery.com/captcha/?**initialCid**=yourInitialCid&amp;amp;**cid**=yourCid&amp;amp;**t**=fe&amp;amp;**referer**=https%3A%2F%2Fantoinevastel.com%2Fbots%2Fdatadome&amp;amp;**s**=YourSParam&amp;amp;**e**=youreParam&lt;/a&gt; &lt;strong&gt;these are obtained in the first GET where you get the captcha&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The query param&lt;/strong&gt; t, need to have the value t=fe, if have t=bv, this mean the captchaUrl is banned and you can't submit us that.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Match&lt;/strong&gt; the TLS of the chrome version, header and header order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Match&lt;/strong&gt; the proxy used for solve the captcha for interact with the page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Agent&lt;/strong&gt; must be obtained from the documentation
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AZlMj0N5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-12-06/67f6c5ff-e831-4924-bc67-2cf8c86a2d78.png" alt="" width="780" height="238"&gt;
&lt;strong&gt;Check the documentation to obtain the latest&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Make sure that you understand all the points to make sure capsolver can solve the captcha correctly.&lt;/p&gt;

&lt;p&gt;To solve datadome captcha you also need to understand our documentation: &lt;a href="https://docs.capsolver.com/guide/antibots/datadome.html"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If any parameter is missing, you will likely encounter issues with the token not being accepted by the website. &lt;/p&gt;

&lt;p&gt;The first method that you need to use from the documentation is &lt;code&gt;createTask&lt;/code&gt;, this method need the parameters of the picture.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--opf9nM2C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-05-11/3f9e93fd-ecdb-45d8-8c81-aff582c5b6fc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--opf9nM2C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-05-11/3f9e93fd-ecdb-45d8-8c81-aff582c5b6fc.png" alt="" width="695" height="267"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Some parameters are required and some are optional. Depends where you want to solve DataDome Captcha&lt;/strong&gt;&lt;br&gt;
For this example, we will only use the required parameters. The task types for datadome are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;DatadomeSliderTask&lt;/code&gt;: This task type requires your own proxies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this example, we will use &lt;strong&gt;DatadomeSliderTask&lt;/strong&gt; as the site uses datadome captcha.&lt;/p&gt;

&lt;p&gt;After read this basic guide to understand how you should do it, you are ready for solve datadome. So let's start!&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Submit the information to Capsolver
&lt;/h3&gt;

&lt;p&gt;Use the method &lt;code&gt;createTask&lt;/code&gt; for submit the information:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;POST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;https://api.capsolver.com/createTask&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"clientKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"task"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DatadomeSliderTask"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"websiteURL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://antoinevastel.com/bots/datadome"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"captchaUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://geo.captcha-delivery.com/captcha/?initialCid=yourInitialCid&amp;amp;cid=yourCid&amp;amp;t=fe&amp;amp;referer=https%3A%2F%2Fantoinevastel.com%2Fbots%2Fdatadome&amp;amp;s=YourSParam&amp;amp;e=youreParam"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"proxy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yourproxy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"userAgent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"check documentation for get user agent that you must use"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Get the results
&lt;/h3&gt;

&lt;p&gt;To verify the results, you'll need to continuously poll the &lt;code&gt;getTaskResult&lt;/code&gt; API endpoint until the captcha is resolved. &lt;/p&gt;

&lt;p&gt;Here's an example request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;POST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;https://api.capsolver.com/getTaskResult&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Host:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;api.capsolver.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Content-Type:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;application/json&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"clientKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"taskId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TASKID_OF_CREATETASK"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;created&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;createTask&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;method&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

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

&lt;/div&gt;



&lt;p&gt;Once the captcha is successfully resolved, you'll receive a response similar to the one depicted in the following image:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ai5Ahgq9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-05-11/af01f1dd-9a30-46b6-a536-b43129df8d1a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ai5Ahgq9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-05-11/af01f1dd-9a30-46b6-a536-b43129df8d1a.png" alt="" width="800" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The captcha token received can be verified by submitting the cookie &lt;code&gt;datadome&lt;/code&gt; with the value of the response to the relevant site. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;If the token is rejected, it may indicate that some information is missing or incorrect.&lt;br&gt;
 Make sure your TLS is correct (TLS matching the user agent used, good headers, headers order) and the same proxy used for solve the captcha is being used.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;In conclusion, solving DataDome's robust anti-data scraping protection requires a combination of tactics such as automated browsers, high-quality proxies, and CAPTCHA-solving services. By carefully navigating the server-side and client-side measures implemented by DataDome, it is possible to solve its defenses and extract the desired data. Also at the end we tutored how to solve DataDome by automating the captcha solution, Capsolver &lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to do Web Scraping with Puppeteer and NodeJS in 2024 | Puppeteer tutorial</title>
      <dc:creator>Lustove</dc:creator>
      <pubDate>Wed, 17 Apr 2024 07:29:04 +0000</pubDate>
      <link>https://dev.to/lustove/how-to-do-web-scraping-with-puppeteer-and-nodejs-in-2024-puppeteer-tutorial-2nmh</link>
      <guid>https://dev.to/lustove/how-to-do-web-scraping-with-puppeteer-and-nodejs-in-2024-puppeteer-tutorial-2nmh</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3O32shjB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-04-17/6507c2fb-3ed5-4044-811d-0ede3de92b44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3O32shjB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-04-17/6507c2fb-3ed5-4044-811d-0ede3de92b44.png" alt="" width="486" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Web scraping is a powerful technique used to extract data from websites. In this tutorial, we will explore how to perform web scraping using Puppeteer and Node.js, two popular technologies in the web development ecosystem. Puppeteer is a Node.js library that provides a high-level API for controlling headless Chrome or Chromium browsers. It allows us to automate browser actions, navigate through web pages, and extract the desired data. By combining Puppeteer with the flexibility of Node.js, we can build robust and efficient web scraping solutions. Let's dive into the steps involved in scraping websites using Puppeteer in 2024.&lt;/p&gt;

&lt;h2&gt;
  
  
  So What is Puppeteer?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/puppeteer/puppeteer"&gt;Puppeteer&lt;/a&gt; is a cutting-edge framework that enables testers to conduct headless browser testing with Google Chrome. With Puppeteer testing, testers can execute JavaScript commands to interact with web pages, including actions like clicking links, filling out forms, and submitting buttons.&lt;/p&gt;

&lt;p&gt;Developed by Google, Puppeteer is a Node.js library that allows for seamless control of headless Chrome through the DevTools Protocol. It provides a range of high-level APIs that facilitate automated testing, website feature development, debugging, element inspection, and performance profiling.&lt;/p&gt;

&lt;p&gt;With Puppeteer, you can use (headless) Chromium or Chrome to open websites, fill forms, click buttons, extract data and generally perform any action that a human could when using a computer. This makes Puppeteer a really powerful tool for web scraping, but also for automating complex workflows on the web. Having a clear understanding of Puppeteer and its capabilities is invaluable for both testers and developers in the modern web development landscape.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are the Advantages of Using Puppeteer for Web Scraping?
&lt;/h2&gt;

&lt;p&gt;Axios and Cheerio are excellent options for scraping with JavaScript. However, that poses two issues: crawling dynamic content and anti-scraping software. Since Puppeteer is a headless browser, it has no problem scraping dynamic content.&lt;br&gt;
Also Puppeteer offers a series of significant advantages for web scraping:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Headless Browser Automation: With Puppeteer, you can control a headless Chrome browser programmatically, enabling automation of browser actions like clicking, scrolling, filling forms, and data extraction without a visible browser window.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Full Chrome Functionality and DOM Manipulation: Puppeteer provides access to Chrome's complete functionality, making it suitable for scraping modern websites with JavaScript-heavy content. You can easily interact with page elements, modify attributes, and perform actions such as clicking buttons or submitting forms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simulated User Interactions and Event Capture: Puppeteer allows you to simulate user interactions and capture network requests and responses. This enables scraping of pages that require user input or dynamically load content through AJAX or WebSocket requests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance and Debugging Capabilities: Puppeteer's optimized Chrome engine ensures efficient scraping, and its integration with DevTools offers robust debugging and testing capabilities. You can debug web pages, log console messages, trace network activity, and analyze performance metrics.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the following guides, I will explore the process of web scraping using Puppeteer and Node.js, along with integrating a cutting-edge CAPTCHA solving solution, &lt;a href="https://www.capsolver.com/"&gt;Capsolver&lt;/a&gt;, to overcome one of the major challenges encountered during web scraping.&lt;/p&gt;
&lt;h2&gt;
  
  
  Bonus Code
&lt;/h2&gt;

&lt;p&gt;A bonus code for top captcha solutions; &lt;a href="https://www.capsolver.com/"&gt;CapSolver&lt;/a&gt;: &lt;strong&gt;WEBS&lt;/strong&gt;. After redeeming it, you will get an extra 5% bonus after each recharge, Unlimited&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" alt="" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Solve Captcha in Puppeteer using CapSolver while Web Scraping
&lt;/h2&gt;

&lt;p&gt;The goal will be to solve the captcha located at &lt;a href="https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"&gt;recaptcha-demo.appspot.com&lt;/a&gt; using CapSolver.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cgAynbwv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/omkarcloud/puppeter-captcha-solving-tutorial/master/images/recaptcha-v2-checkbox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cgAynbwv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/omkarcloud/puppeter-captcha-solving-tutorial/master/images/recaptcha-v2-checkbox.png" alt="Captcha Form" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During the tutorial, we will take the following steps to solve the above Captcha:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the required dependencies.&lt;/li&gt;
&lt;li&gt;Find the site key of the &lt;a href="https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"&gt;Captcha Form&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Set up CapSolver.&lt;/li&gt;
&lt;li&gt;Solve the captcha.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Install Required Dependencies
&lt;/h3&gt;

&lt;p&gt;To get started, we need to install the following dependencies for this tutorial:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://pypi.org/project/capsolver-python/"&gt;capsolver-python&lt;/a&gt;&lt;/strong&gt;: The official Python SDK for easy integration with the CapSolver API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://pypi.org/project/pyppeteer/"&gt;puppeteer&lt;/a&gt;&lt;/strong&gt;: pyppeteer is a Python port of Puppeteer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install these dependencies by running the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -m pip install pyppeteer capsolver-python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, Create a file named &lt;code&gt;main.py&lt;/code&gt; where we will write the Python code for solving captchas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Get Site Key of Captcha Form
&lt;/h3&gt;

&lt;p&gt;The Site Key is a unique identifier provided by Google that uniquely identifies each Captcha. &lt;/p&gt;

&lt;p&gt;To solve the Captcha, it is necessary to send the Site Key to CapSolver.&lt;/p&gt;

&lt;p&gt;Let's find the Site Key of the &lt;a href="https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"&gt;Captcha Form&lt;/a&gt; by following these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit the &lt;a href="https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"&gt;Captcha Form&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cgAynbwv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/omkarcloud/puppeter-captcha-solving-tutorial/master/images/recaptcha-v2-checkbox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cgAynbwv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/omkarcloud/puppeter-captcha-solving-tutorial/master/images/recaptcha-v2-checkbox.png" alt="Captcha Form" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Chrome Dev Tools by pressing &lt;code&gt;Ctrl&lt;/code&gt;/&lt;code&gt;Cmd&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;I&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Go to the &lt;code&gt;Elements&lt;/code&gt; tab and search for &lt;code&gt;data-sitekey&lt;/code&gt;. Copy the attribute's value.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zzzj6WXm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/omkarcloud/puppeter-captcha-solving-tutorial/master/images/site-key.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zzzj6WXm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/omkarcloud/puppeter-captcha-solving-tutorial/master/images/site-key.png" alt="Site Key" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Store the Site Key in a secure place as it will be used in a later section when we submit the captcha to CapSolver.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Setup CapSolver
&lt;/h3&gt;

&lt;p&gt;To solve captchas using CapSolver, you need to create a CapSolver account, add funds to your account, and obtain an API Key. Follow these steps to set up your CapSolver account:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign up for a CapSolver account by visiting &lt;a href="https://www.capsolver.com/"&gt;capsolver.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uuQu9C8R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://raw.githubusercontent.com/omkarcloud/puppeter-captcha-solving-tutorial/master/images/sign-up.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uuQu9C8R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://raw.githubusercontent.com/omkarcloud/puppeter-captcha-solving-tutorial/master/images/sign-up.gif" alt="Sign Up" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add funds to your CapSolver account using PayPal, Crypto Currencies, or other listed payment methods. Please note that the minimum deposit amount is $6, and additional taxes apply.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h8_3Itc2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://raw.githubusercontent.com/omkarcloud/puppeter-captcha-solving-tutorial/master/images/add-funds.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h8_3Itc2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://raw.githubusercontent.com/omkarcloud/puppeter-captcha-solving-tutorial/master/images/add-funds.gif" alt="Add Funds" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Now, copy the API Key provided by CapSolver and store it securely for later usage.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dBYqjQqP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/omkarcloud/puppeter-captcha-solving-tutorial/master/images/store-api-key.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dBYqjQqP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/omkarcloud/puppeter-captcha-solving-tutorial/master/images/store-api-key.png" alt="Store API Key" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Solving the Captcha
&lt;/h3&gt;

&lt;p&gt;Now, we will proceed to solving the captcha using CapSolver. The overall process involves three steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Launching the browser and visiting the captcha page using pyppeteer.&lt;/li&gt;
&lt;li&gt;Solving the captcha using CapSolver.&lt;/li&gt;
&lt;li&gt;Submitting the captcha response.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Read the following Code Snippets to understand these steps.&lt;br&gt;
&lt;strong&gt;Launching the browser and visiting the captcha page:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Launch the browser.
&lt;/span&gt;&lt;span class="n"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;headless&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;# Load the target page.
&lt;/span&gt;&lt;span class="n"&gt;captcha_page_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;captcha_page_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Solving the captcha using CapSolver:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Solve the reCAPTCHA using CapSolver.
&lt;/span&gt;&lt;span class="n"&gt;capsolver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RecaptchaV2Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;site_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;captcha_page_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;site_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join_task_result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get the solved reCAPTCHA code.
&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gRecaptchaResponse&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Setting the solved captcha on the form and submitting it:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Set the solved reCAPTCHA code on the form.
&lt;/span&gt;&lt;span class="n"&gt;recaptcha_response_element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#g-recaptcha-response&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;(element) =&amp;gt; element.value = &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recaptcha_response_element&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Submit the form.
&lt;/span&gt;&lt;span class="n"&gt;submit_btn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;button[type=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;submit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;submit_btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Putting it all Together
&lt;/h3&gt;

&lt;p&gt;Below is the complete code for the tutorial, which will solve the captcha using CapSolver.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pyppeteer&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;launch&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;capsolver_python&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RecaptchaV2Task&lt;/span&gt;

&lt;span class="c1"&gt;# Following code solves a reCAPTCHA v2 challenge using CapSolver.
&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="c1"&gt;# Launch Browser.
&lt;/span&gt;    &lt;span class="n"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;headless&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="c1"&gt;# Load the target page.
&lt;/span&gt;    &lt;span class="n"&gt;captcha_page_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;captcha_page_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Solve the reCAPTCHA using CapSolver.
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solving captcha&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;capsolver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RecaptchaV2Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;site_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;captcha_page_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;site_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join_task_result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Get the solved reCAPTCHA code.
&lt;/span&gt;    &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gRecaptchaResponse&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Successfully solved the reCAPTCHA. The solve code is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Set the solved reCAPTCHA code on the form.
&lt;/span&gt;    &lt;span class="n"&gt;recaptcha_response_element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#g-recaptcha-response&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;(element) =&amp;gt; element.value = &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recaptcha_response_element&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Submit the form.
&lt;/span&gt;    &lt;span class="n"&gt;submit_btn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;button[type=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;submit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;submit_btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Pause the execution so you can see the screen after submission before closing the driver
&lt;/span&gt;    &lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Captcha Submission Successfull. Press enter to continue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Close Browser.
&lt;/span&gt;    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_event_loop&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;run_until_complete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste the above code into your &lt;code&gt;main.py&lt;/code&gt; file. Replace &lt;code&gt;YOUR_API_KEY&lt;/code&gt; with your API Key and run the code.&lt;/p&gt;

&lt;p&gt;You will observe that the captcha will be solved, and you will be greeted with a success page.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Solve Captcha in NodeJS using CapSolver while Web Scraping
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Proxy (&lt;strong&gt;Optional&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Node.JS installed&lt;/li&gt;
&lt;li&gt;Capsolver API key&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1: Install Necessary Packages
&lt;/h3&gt;

&lt;p&gt;Execute the following commands to install the required packages:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Node.JS Code for solve reCaptcha v2 without proxy
&lt;/h3&gt;

&lt;p&gt;Here's a Node.JS sample script to accomplish the task:&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PAGE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Replace with your Website&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SITE_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Replace with your Website&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CLIENT_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Replace with your CAPSOLVER API Key&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.capsolver.com/createTask&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;clientKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;CLIENT_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getTaskResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;success&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;success&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;

            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Getting task result for task ID: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.capsolver.com/getTaskResult&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;clientKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;CLIENT_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;taskId&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ready&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;success&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;solveReCaptcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pageURL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sitekey&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;taskPayload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ReCaptchaV2TaskProxyless&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;websiteURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pageURL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;websiteKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;sitekey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;taskData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;createTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;taskPayload&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getTaskResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;taskData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;solveReCaptcha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PAGE_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;SITE_KEY&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Received token: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gReCaptcharesponse&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Error: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

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

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  👀 More information
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.capsolver.com/guide/captcha/ReCaptchaV2.html"&gt;reCaptcha v2 Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;In this tutorial, we have learned how to solve captchas using CapSolver while performing web scraping with Puppeteer and Node.js. By leveraging CapSolver's API, we can automate the captcha-solving process and make web scraping tasks more efficient and reliable. Remember to comply with the terms and conditions of the websites you scrape and use web scraping responsibly&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>puppeteer</category>
      <category>node</category>
      <category>javascript</category>
    </item>
    <item>
      <title># How to Solve reCAPTCHA v2: Solve and Bypass reCAPTCHA v2 Guide</title>
      <dc:creator>Lustove</dc:creator>
      <pubDate>Wed, 17 Apr 2024 07:20:18 +0000</pubDate>
      <link>https://dev.to/lustove/-how-to-solve-recaptcha-v2-solve-and-bypass-recaptcha-v2-guide-2n9f</link>
      <guid>https://dev.to/lustove/-how-to-solve-recaptcha-v2-solve-and-bypass-recaptcha-v2-guide-2n9f</guid>
      <description>&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%2Fwle6rxj9fbl0m8kguqyt.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%2Fwle6rxj9fbl0m8kguqyt.png" alt="Image description" width="486" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;reCAPTCHA v2 is a widely used security measure that protects websites from automated bots. It presents users with challenges such as selecting specific images or solving puzzles to verify their human identity. However, in certain scenarios, there may be a need to automate the process of solving reCAPTCHA v2. In this guide, we will explore various techniques and approaches to successfully solve and bypass reCAPTCHA v2.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus Code
&lt;/h2&gt;

&lt;p&gt;A bonus code for top captcha solutions; &lt;a href="https://www.capsolver.com/"&gt;CapSolver&lt;/a&gt;: &lt;strong&gt;WEBS&lt;/strong&gt;. After redeeming it, you will get an extra 5% bonus after each recharge, Unlimited&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" alt="" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;reCAPTCHA provides advanced protection for your website, preventing fraud and abuse without causing inconvenience. It utilizes an intelligent risk analysis engine and adaptive challenges to deter malicious software and ensure legitimate users can access your site effortlessly. With over a decade of proven success, reCAPTCHA actively safeguards data for millions of websites. Its frictionless approach seamlessly detects and blocks bots and automated attacks while allowing genuine users to proceed. Through continuous machine learning, reCAPTCHA's adaptive algorithms consider customer and bot interactions, surpassing the limitations of traditional challenge-based bot detection technologies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There are several versions of reCAPTCHA:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;reCAPTCHA v1&lt;/strong&gt;: The original version, which presented users with distorted text and asked them to type it into a box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;reCAPTCHA v2&lt;/strong&gt;: This version asks users to click on a checkbox confirming that they are not a robot. Sometimes it can also ask users to select specific types of images from a grid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;reCAPTCHA v3&lt;/strong&gt;: This version works in the background of websites to analyze user behavior and assign a score based on the perceived likelihood that the user is human or a bot. It's a more seamless experience for the user because it doesn't require any specific user interaction like previous versions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this blog, we will focus on solving reCAPTCHA v2,, the second version of Google's CAPTCHA, employs an "I am not a robot" checkbox or an invisible reCAPTCHA badge to discern genuine users from bots and looks like:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FKhxZTEk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-05-12/1786afea-e28f-4f1a-92e2-7fab7b2a81c8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FKhxZTEk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-05-12/1786afea-e28f-4f1a-92e2-7fab7b2a81c8.gif" alt="" width="616" height="164"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  So How reCAPTCHA v2 work
&lt;/h2&gt;

&lt;p&gt;reCAPTCHA v2 operates by displaying either an "I am not a robot" checkbox or an invisible reCAPTCHA verification badge when a user engages with a secured website. Upon clicking the reCAPTCHA v2 checkbox, the system undertakes an automated identity verification process in the background. It promptly identifies and blocks any suspicious bot-like behavior to ensure user authenticity. So in many cases reCAPTCHA v2 is used to protect websites from unauthorised web scraping.&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%2Fk8d267w8ibv4czoac8d0.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%2Fk8d267w8ibv4czoac8d0.png" alt="Image description" width="525" height="425"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  How to solve reCAPTCHA v2?
&lt;/h3&gt;

&lt;p&gt;If an issue with reCAPTCHA v2 has not been solved, you will potentially come across reCAPTCHA v2 on any web page, and this could prevent you from getting the data you want when conducting web scraping, so you must wonder how to solve reCAPTCHA v2 when we meet like if in web scraping? Here are some scenarios you can draw on&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manual solving techniques: also commonly known as carefully selecting the desired image or solving the puzzle. However, this method requires a lot of interaction on your part, which is very time-consuming and inefficient.&lt;/li&gt;
&lt;li&gt;Use an automated solver: Automated solvers are services or application programming interfaces that provide solutions to reCAPTCHA v2 challenges. These services use advanced algorithms and machine learning techniques to analyse and solve challenges on behalf of users.&lt;/li&gt;
&lt;li&gt;Implement CAPTCHA solver libraries: Developers can integrate CAPTCHA solver libraries into their code to automate processes. These libraries provide functions and methods to interact with reCAPTCHA v2 and solve CAPTCHA challenges programmatically.&lt;/li&gt;
&lt;li&gt;Through Machine Learning and Artificial Intelligence: Machine Learning and Artificial Intelligence techniques can be leveraged to train models capable of identifying and solving reCAPTCHA v2 challenges. By training models on large reCAPTCHA image datasets, they can learn to recognise patterns and solve challenges accurately.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  How to bypass reCAPTCHA v2?
&lt;/h3&gt;

&lt;p&gt;When you're doing web scraping, you'll often get blocked by recaptcha v2, and it's a good idea to bypass that.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Proxy Rotation: This can be done through the use of proxy pools, where users can rotate their IP addresses to avoid detection, but often requires high quality proxies.&lt;/li&gt;
&lt;li&gt;CAPTCHA Solution Services: Some services offer solutions that specifically bypass reCAPTCHA v2. These services use sophisticated algorithms and techniques to analyse and bypass the challenge, and one of the most recommended is &lt;a href="https://www.capsolver.com/products/recaptchav2"&gt;&lt;strong&gt;Capsolver&lt;/strong&gt;&lt;/a&gt;, which is known for its speed, accuracy, variety, and affordability. I'll explain more about it below.&lt;/li&gt;
&lt;li&gt;Browser Automation Tools: Tools such as Selenium or Puppeteer can be used to automate web browsers and simulate human-computer interactions. By automating the entire browsing process, including solving the reCAPTCHA v2 challenge, these tools can bypass security measures.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  How To Solve reCAPTCHA v2-API Guide
&lt;/h2&gt;

&lt;p&gt;Let's take Capsolver as an example to help you comply with web scraping without the hassles and constraints of Captcha! &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%2Fi7v3loi3olkw0hya07k7.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%2Fi7v3loi3olkw0hya07k7.png" alt="Image description" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Capsolver Automatic CAPTCHA Solving Service can easily solve reCAPTCHA v2. Capsolver provides two CAPTCHA solving services that can help you to easily solve reCAPTCHA v2. One service is using Capsolver's &lt;a href="https://docs.capsolver.com/guide/api-server.html"&gt;API&lt;/a&gt;, and the other one is downloading the &lt;a href="https://docs.capsolver.com/guide/extension/introductions.html"&gt;Extension&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1
&lt;/h3&gt;

&lt;p&gt;You can &lt;a href="https://dashboard.capsolver.com/passport/register"&gt;sign up&lt;/a&gt; for CapSolver and get access to our CAPTCHA service, which is currently supported with a free trial.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2
&lt;/h3&gt;

&lt;p&gt;Once you have registered, you can obtain your api key from the home page panel.  &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%2Fpr3w4qk7mmnvyx9ry7fe.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%2Fpr3w4qk7mmnvyx9ry7fe.png" alt="Image description" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3 : Creating a Task
&lt;/h3&gt;

&lt;p&gt;To solve reCaptcha v2, you first need to create a task using the &lt;code&gt;createTask&lt;/code&gt; method.&lt;/p&gt;

&lt;p&gt;Here's the structure of the task object:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;type&lt;/code&gt;: Required. This should be &lt;code&gt;ReCaptchaV2Task&lt;/code&gt; or &lt;code&gt;ReCaptchaV2TaskProxyLess&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;websiteURL&lt;/code&gt;: Required. This is the web address of the website using reCaptcha v2.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;websiteKey&lt;/code&gt;: Required. This is the domain's public key.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;proxy&lt;/code&gt;: Optional. If you're using a proxy, you can include it here.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;isInvisible&lt;/code&gt;: Optional. If the reCaptcha doesn't have pageAction, set this to true.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;userAgent&lt;/code&gt;: Optional. If you're emulating a browser, include its User-Agent here.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cookies&lt;/code&gt;: Optional. If you need to use cookies, include them here.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's an example request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"clientKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"task"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ReCaptchaV2Task"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"websiteURL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.google.com/recaptcha/api2/demo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"websiteKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"isInvisible"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"userAgent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cookies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"__Secure-3PSID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sdadasdasdsda"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"__Secure-3PAPISID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sd/AytXQTb6RUALqxSEL"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"proxy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the task is successfully submitted, you'll receive a Task ID in the response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"errorId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"errorCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"errorDescription"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"taskId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"61138bb6-19fb-11ec-a9c8-0242ac110006"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4 : Getting Results
&lt;/h3&gt;

&lt;p&gt;Once you have the Task ID, you can use it to retrieve the solution. Submit the Task ID with the getTaskResult method. The results should be ready within an interval of 1s to 10s.&lt;/p&gt;

&lt;p&gt;Here's an example request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"clientKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"taskId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"61138bb6-19fb-11ec-a9c8-0242ac110006"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response will include the solution token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"errorId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"errorCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"errorDescription"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"solution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"userAgent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"xxx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"expireTime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1671615324290&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"gRecaptchaResponse"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3AHJ....."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;solution&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;token&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ready"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Solving reCAPTCHA v2 using Capsolver SDK:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#pip install --upgrade capsolver
#export CAPSOLVER_API_KEY='...'
&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;capsolver&lt;/span&gt;
&lt;span class="c1"&gt;# capsolver.api_key = "..."
&lt;/span&gt;&lt;span class="n"&gt;solution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;solve&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ReCaptchaV2TaskProxyLess&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteURL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.google.com/recaptcha/api2/demo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Golang
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="n"&gt;capsolver_go&lt;/span&gt; &lt;span class="s"&gt;"github.com/capsolver/capsolver-go"&lt;/span&gt;
    &lt;span class="s"&gt;"log"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;// first you need to install sdk&lt;/span&gt;
    &lt;span class="c"&gt;//go get github.com/capsolver/capsolver-go&lt;/span&gt;
    &lt;span class="c"&gt;//export CAPSOLVER_API_KEY='...' or&lt;/span&gt;
    &lt;span class="c"&gt;//capSolver := CapSolver{ApiKey:"..."}&lt;/span&gt;

    &lt;span class="n"&gt;capSolver&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;capsolver_go&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CapSolver&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="n"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;capSolver&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Solve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;any&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;       &lt;span class="s"&gt;"ReCaptchaV2TaskProxyLess"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;"websiteURL"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"https://www.google.com/recaptcha/api2/demo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;"websiteKey"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures that integrating CapSolver products into your infrastructure is as easy as possible.Capsolver supports multiple languages and provides ready-to-use code samples to ensure that you can get started with your web projects quickly and easily.&lt;/p&gt;

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

&lt;p&gt;reCAPTCHA v2 is a widely used security measure to protect websites from automated bot attacks. It presents users with challenges like selecting specific images or solving puzzles to verify their human identity. However, there are techniques and methods to automate the process of solving or bypassing reCAPTCHA v2. These methods include manual solving, automated solutions, OCR image interpretation, and cracking the reCAPTCHA v2 algorithm. It's important to note that bypassing reCAPTCHA v2 may violate terms of service and could result in access restrictions.&lt;/p&gt;

</description>
      <category>recaptcha</category>
      <category>captcha</category>
      <category>webscraping</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Solving and Bypassing Amazon captcha Waf Captcha Automatically When scraping</title>
      <dc:creator>Lustove</dc:creator>
      <pubDate>Mon, 15 Apr 2024 09:13:53 +0000</pubDate>
      <link>https://dev.to/lustove/solving-and-bypassing-amazon-captcha-waf-captcha-automatically-when-scraping-2gla</link>
      <guid>https://dev.to/lustove/solving-and-bypassing-amazon-captcha-waf-captcha-automatically-when-scraping-2gla</guid>
      <description>&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%2Fbl4h43k802qhu5xuvgs6.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%2Fbl4h43k802qhu5xuvgs6.png" alt="Image description" width="486" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article provides insights into AWS WAF Captcha and its role in preventing automated activities such as web scraping, spam, and credential stuffing. AWS WAF Captcha, which stands for "Completely Automated Public Turing test to tell Computers and Humans Apart," presents puzzles or challenges to verify the user's human identity. While it may not be foolproof against advanced machine learning techniques, it effectively deters less sophisticated bot traffic and adds an extra layer of security.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is AWS WAF Captcha and how does it work
&lt;/h2&gt;

&lt;p&gt;To understand what is AWS WAF Captcha, I suggest that we first understand what is this captcha and how it works&lt;/p&gt;

&lt;p&gt;AWS WAF includes a feature called CAPTCHA that helps determine if a user is human or a bot. CAPTCHA stands for "Completely Automated Public Turing Test to tell Computers and Humans Apart." It presents puzzles or challenges that users need to solve to verify their human identity and prevent activities like web scraping, spam, and credential stuffing. While some automated techniques can solve CAPTCHA puzzles using machine learning and artificial intelligence, CAPTCHA still serves as a useful tool to deter less sophisticated bot traffic and make large-scale operations more difficult.&lt;/p&gt;

&lt;p&gt;AWS WAF generates random CAPTCHA puzzles and regularly updates them to ensure unique challenges for users. The CAPTCHA script collects client data to confirm human interaction and prevent replay attacks.&lt;/p&gt;

&lt;p&gt;Each CAPTCHA puzzle includes standard controls for users to request a new puzzle, switch between audio and visual puzzles, access instructions, and submit their solution. The puzzles are designed to be accessible, supporting screen readers, keyboard controls, and contrasting colors.&lt;/p&gt;

&lt;p&gt;So if a requisition from a visitor looks suspicious, Amazon displays the CAPTCHA in the form of a puzzle. Users also have the option to complete an audio CAPTCHA. If the CAPTCHA is successfully broken, the user is redirected back to the page. If the CAPTCHA is not successfully completed, the user is offered a new puzzle until the CAPTCHA is solved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Different Types of AWS WAF Captcha when Web Scraping
&lt;/h2&gt;

&lt;p&gt;An example of a picture grid puzzle is shown below. The puzzle asks you to select all pictures in the grid that contain objects of a particular type.&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%2Fbvzroaag4nk9b2ac34m0.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%2Fbvzroaag4nk9b2ac34m0.png" alt="Image description" width="341" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The screenshot below shows an example puzzle that requires you to determine the end point of a car's path in a drawing.&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%2Faynkpvy0r0jkmq8635uy.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%2Faynkpvy0r0jkmq8635uy.png" alt="Image description" width="351" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The following shows the display for the audio puzzle choice. Audio CAPTCHAs use background noise superimposed on the voice. Just like puzzles, audio CAPTCHAs can be solved automatically.&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%2Fwam0zeqtjv7zcw7cwkos.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%2Fwam0zeqtjv7zcw7cwkos.png" alt="Image description" width="349" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Solving Amazon WAF with CapSolver
&lt;/h2&gt;

&lt;p&gt;In many scenarios, Amazon randomly generates and even rotates puzzles to ensure that users face distinct challenges. More critically new puzzle types are also added periodically to remain effective against automated methods. As well as through the puzzles themselves, of course, Amazon also uses user data collection to verify that tasks are being completed by humans to prevent repeat requests. So in most cases, Amazon CAPTCHA is able to block simple bot access, but there is a way for us to achieve compliant automated puzzle solving, and that's through &lt;a href="https://www.capsolver.com/"&gt;CapSolver&lt;/a&gt; is a service that provides solutions for captcha recognition. It offers various task types for different captcha systems, including Amazon WAF. &lt;/p&gt;

&lt;p&gt;Capsolver provides two CAPTCHA solving services that can help you to easily solve Amazon WAF. One service is using Capsolver's &lt;a href="https://docs.capsolver.com/guide/api-server.html"&gt;API&lt;/a&gt;, and the other one is downloading the &lt;a href="https://docs.capsolver.com/guide/extension/introductions.html"&gt;Extension&lt;/a&gt;. In the API, the task type used by Amazon WAF is &lt;code&gt;AwsWafClassification&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Next, follow my steps to see how to implement an automated solution to Amazon's captcha in web scraping, it's simple, let's dig in!&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1 Login
&lt;/h3&gt;

&lt;p&gt;You can &lt;a href="https://dashboard.capsolver.com/passport/register"&gt;sign up&lt;/a&gt; for CapSolver and get access to our CAPTCHA service, which is currently supported with a free trial.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 Get your free API!
&lt;/h3&gt;

&lt;p&gt;Once you have registered, you can obtain your api key from the home page panel.  &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%2Fike3tvwgsuyzpfmxqnrp.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%2Fike3tvwgsuyzpfmxqnrp.png" alt="Image description" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AwsWafCaptcha: solving AwsWaf
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;tip Create the task with the &lt;a href="//../api-createtask.md"&gt;createTask&lt;/a&gt; method and get the result with
the &lt;a href="//../api-gettaskresult.md"&gt;getTaskResult&lt;/a&gt; method.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The task type &lt;code&gt;types&lt;/code&gt; that we support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;AntiAwsWafTask&lt;/code&gt;  this task type require your own proxies.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AntiAwsWafTaskProxyLess&lt;/code&gt;  this task type don't require your own proxies.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3 Create Task
&lt;/h3&gt;

&lt;p&gt;Create a recognition task with the &lt;a href="//../api-createtask.md"&gt;createTask&lt;/a&gt; method.&lt;/p&gt;

&lt;h4&gt;
  
  
  Task Object Structure
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Properties&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;type&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;AntiAwsWafTask&lt;/code&gt; &lt;br&gt; &lt;code&gt;AntiAwsWafTaskProxyLess&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;websiteURL&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;The URL of the page that returns the  captcha info&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;awsKey&lt;/td&gt;
&lt;td&gt;Optional&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;When the status code returned by the websiteURL page is 405, you need to pass in awsKey&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;awsIv&lt;/td&gt;
&lt;td&gt;Optional&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;When the status code returned by the websiteURL  page is 405, you need to pass in awsIv&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;awsContext&lt;/td&gt;
&lt;td&gt;Optional&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;When the status code returned by the websiteURL  page is 405, you need to pass in awsContext&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;awsChallengeJS&lt;/td&gt;
&lt;td&gt;Optional&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;When the status code returned by the websiteURL  page is 202, you only need to pass in awsChallengeJs;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;proxy&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;Learn &lt;a href="//../api-how-to-use-proxy"&gt;Using proxies&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;warning
If the obtained token is not available, it may be because of the ip
please try to use the AntiAwsWafTask mode to pass in your own proxy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Example Request
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;POST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;https://api.capsolver.com/createTask&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Host:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;api.capsolver.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Content-Type:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;application/json&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"clientKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"task"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AntiAwsWafTask"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//Required&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"websiteURL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//Required&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"awsKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"awsIv"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"awsContext"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"awsChallengeJS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"proxy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http:ip:port:user:pass"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;socks&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="err"&gt;:ip:port:user:pass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Optional&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After you submit the task to us, you should receive in the response a 'Task id' if it's successfull. Please&lt;br&gt;
read &lt;a href="//../api-createtask.md"&gt;errorCode: full list of errors&lt;/a&gt; if you didn't receive the task id. For more information, you can&lt;br&gt;
also refer to this blog post &lt;a href="https://www.capsolver.com/blog/All/how-to-solve-aws-amazon-captcha-token"&gt;How to solve aws amazon captcha token&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Example Response
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"errorId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"errorCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"errorDescription"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"taskId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"61138bb6-19fb-11ec-a9c8-0242ac110006"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Getting Results
&lt;/h2&gt;

&lt;p&gt;After you have the taskId, you need to submit the taskId to retrieve the solution. Response structure is explained&lt;br&gt;
in &lt;a href="//../api-gettaskresult.md"&gt;getTaskResult&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Depending on the system load, you will get the results within the interval of &lt;code&gt;5s&lt;/code&gt; to &lt;code&gt;30s&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Example Request
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;POST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;https://api.capsolver.com/getTaskResult&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Host:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;api.capsolver.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Content-Type:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;application/json&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"clientKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"taskId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"61138bb6-19fb-11ec-a9c8-0242ac110006"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Example Response
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"errorId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"taskId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"646825ef-9547-4a29-9a05-50a6265f9d8a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ready"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"solution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cookie"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"223d1f60-0e9f-4238-ac0a-e766b15a778e:EQoAf0APpGIKAAAA:AJam3OWpff1VgKIJxH4lGMMHxPVQ0q0R3CNtgcMbR4VvnIBSpgt1Otbax4kuqrgkEp0nFKanO5oPtwt9+Butf7lt0JNe4rZQwZ5IrEnkXvyeZQPaCFshHOISAFLTX7AWHldEXFlZEg7DjIc="&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Solving AwsWafCaptcha using Capsolver SDK:
&lt;/h2&gt;

&lt;p&gt;::: code-group&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# pip install --upgrade capsolver
# export CAPSOLVER_API_KEY='...'
&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;capsolver&lt;/span&gt;

&lt;span class="c1"&gt;# capsolver.api_key = "..."
&lt;/span&gt;&lt;span class="n"&gt;solution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;solve&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AntiAwsWafTask&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteURL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ip:port:user:pass&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;```go [golang]&lt;br&gt;
package main&lt;/p&gt;

&lt;p&gt;import (&lt;br&gt;
    "fmt"&lt;br&gt;
    capsolver_go "github.com/capsolver/capsolver-go"&lt;br&gt;
    "log"&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;func main() {&lt;br&gt;
    // first you need to install sdk&lt;br&gt;
    //go get github.com/capsolver/capsolver-go&lt;br&gt;
    //export CAPSOLVER_API_KEY='...' or&lt;br&gt;
    //capSolver := CapSolver{ApiKey:"..."}&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;capSolver := capsolver_go.CapSolver{}
solution, err := capSolver.Solve(map[string]any{
    "type": "AntiAwsWafTaskProxyLess",
    "websiteURL": "AntiAwsWafTask",
     "proxy":"ip:port:user:pass"
})
if err != nil {
    log.Fatal(err)
    return
}
fmt.Println(solution)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

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



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

&lt;/div&gt;



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

&lt;p&gt;In conclusion, AWS WAF Captcha is an essential tool in distinguishing between human users and bots, protecting websites from malicious activities. By generating random and regularly updated puzzles, AWS WAF ensures unique challenges for users. Capsolver, a captcha recognition service, offers solutions for solving Amazon WAF Captcha, making it possible to automate puzzle-solving tasks during web scraping. However, it's important to note that while automated solutions exist, captchas continue to evolve to stay effective against automated methods, highlighting the ongoing battle between security measures and adversaries seeking to solve them.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>tutorial</category>
      <category>amazoncaptcha</category>
    </item>
    <item>
      <title>The 3 Best Programming Languages for Web Scraping</title>
      <dc:creator>Lustove</dc:creator>
      <pubDate>Fri, 29 Mar 2024 09:38:14 +0000</pubDate>
      <link>https://dev.to/lustove/the-3-best-programming-languages-for-web-scraping-1lnc</link>
      <guid>https://dev.to/lustove/the-3-best-programming-languages-for-web-scraping-1lnc</guid>
      <description>&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%2Fr05z8binhgykyewjrgth.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%2Fr05z8binhgykyewjrgth.png" alt="Image description" width="486" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Web scraping has become an essential technique for extracting data from websites in various domains such as research, data analysis, and business intelligence. When it comes to choosing the right programming language for web scraping, there are several options available. In this article, we will explore the three best programming languages for web scraping, considering factors such as ease of use, availability of libraries and frameworks, and community support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus Code
&lt;/h2&gt;

&lt;p&gt;A bonus code for top captcha solutions; &lt;a href="https://www.capsolver.com/"&gt;CapSolver&lt;/a&gt;: &lt;strong&gt;WEBS&lt;/strong&gt;. After redeeming it, you will get an extra 5% bonus after each recharge, Unlimited&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" alt="" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript
&lt;/h2&gt;

&lt;p&gt;JavaScript is a highly versatile and widely adopted programming language, making it an excellent choice for web scraping tasks. It offers a vast range of libraries and tools within its ecosystem and benefits from a supportive and enthusiastic community.&lt;/p&gt;

&lt;p&gt;JavaScript's flexibility is a notable advantage for web scraping. It seamlessly integrates with HTML, enabling easy client-side usage. Additionally, with the advent of Node.js, JavaScript can be deployed on the server side as well, providing developers with multiple options for implementation.&lt;/p&gt;

&lt;p&gt;In terms of performance, JavaScript has made significant strides to optimize resource usage. Engines like V8 have contributed to improved performance, making JavaScript efficient for web scraping workloads. Its ability to handle asynchronous operations also enables concurrent processing of requests, further enhancing performance for large-scale scraping applications.&lt;/p&gt;

&lt;p&gt;JavaScript has a relatively gentle learning curve compared to other languages, making it accessible to both beginner and experienced developers. The language's straightforward syntax and extensive documentation, along with abundant learning resources, contribute to its user-friendly nature.&lt;/p&gt;

&lt;p&gt;The JavaScript community is robust and continually growing, offering invaluable support and collaboration opportunities. The vast network of experienced professionals ensures that developers, especially newcomers, can find assistance, troubleshoot issues, and access best practices. This vibrant community fosters innovation and contributes to the evolution of web scraping techniques and solutions.&lt;/p&gt;

&lt;p&gt;JavaScript provides a wide range of web scraping libraries that streamline the scraping process and improve efficiency. Libraries such as Axios, Cheerio, Puppeteer, and Playwright offer various features and capabilities to address different scraping requirements. These tools simplify data extraction and manipulation from diverse sources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python
&lt;/h2&gt;

&lt;p&gt;Python is undoubtedly the oneof most popular programming language for web scraping, and for good reason. It provides a rich ecosystem of libraries and tools specifically designed for web scraping tasks. One of the key libraries in Python is BeautifulSoup, which simplifies the process of parsing HTML and XML documents. With its intuitive and easy-to-use methods, developers can navigate the website's structure, extract data, and handle complex scraping scenarios.&lt;/p&gt;

&lt;p&gt;In addition to BeautifulSoup, Python offers other powerful libraries such as Scrapy and Selenium. Scrapy is a comprehensive web scraping framework that handles the entire scraping process, from requesting web pages to storing extracted data. Selenium is a browser automation tool that enables interaction with web elements, making it ideal for scraping dynamic websites.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N-CdPScA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/b7ad061a-93d7-4776-9508-957028ea6e05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N-CdPScA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/b7ad061a-93d7-4776-9508-957028ea6e05.png" alt="" width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python's versatility extends beyond scraping libraries. It has excellent support for handling HTTP requests with the requests library, enabling developers to retrieve website data efficiently. Moreover, Python's integration capabilities with CAPTCHA-solving tools like &lt;a href="https://www.capsolver.com/"&gt;Capsolver&lt;/a&gt; simplify the process of bypassing CAPTCHAs, making it a go-to choice for scraping websites with CAPTCHA protection.&lt;/p&gt;

&lt;p&gt;Here's an example of using Capsolver in Python to solve reCAPTCHA v2:&lt;/p&gt;
&lt;h3&gt;
  
  
  How to Solve Any CAPTCHA with Capsolver Using Python:
&lt;/h3&gt;

&lt;p&gt;Prerequisites&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A working proxy&lt;/li&gt;
&lt;li&gt;Python installed&lt;/li&gt;
&lt;li&gt;Capsolver API key&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  🤖 Step 1: Install Necessary Packages
&lt;/h4&gt;

&lt;p&gt;Execute the following commands to install the required packages:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pip install capsolver&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Here is an example of reCAPTCHA v2:
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;👨‍💻 Python Code for solve reCAPTCHA v2 with your proxy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's a Python sample script to accomplish the task:&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="c1"&gt;# Consider using environment variables for sensitive information
&lt;/span&gt;&lt;span class="n"&gt;PROXY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://username:password@host:port&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your Capsolver API Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;PAGE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PAGE_URL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;PAGE_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PAGE_SITE_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;solve_recaptcha_v2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;solution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;solve&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ReCaptchaV2Task&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteURL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PROXY&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;solution&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solving reCaptcha v2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;solution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;solve_recaptcha_v2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PAGE_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PAGE_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solution: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;👨‍💻 Python Code for solve reCAPTCHA v2 without proxy&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Here's a Python sample script to accomplish the task:&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="c1"&gt;# Consider using environment variables for sensitive information
&lt;/span&gt;&lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your Capsolver API Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;PAGE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PAGE_URL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;PAGE_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PAGE_SITE_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;solve_recaptcha_v2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;solution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;solve&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ReCaptchaV2TaskProxyless&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteURL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;solution&lt;/span&gt;



&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solving reCaptcha v2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;solution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;solve_recaptcha_v2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PAGE_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PAGE_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solution: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ruby
&lt;/h2&gt;

&lt;p&gt;Ruby, known for its simplicity and readability, is also a viable language for web scraping. It offers an elegant and expressive syntax that allows developers to write concise scraping scripts. Ruby's Nokogiri library is widely used for parsing HTML and XML documents, providing similar functionality to Python's BeautifulSoup. Nokogiri's intuitive API enables developers to traverse the document structure, extract data, and manipulate web elements with ease.&lt;/p&gt;

&lt;p&gt;Additionally, Ruby has the Mechanize gem, which simplifies the process of interacting with websites. Mechanize handles tasks such as submitting forms, managing cookies, and handling redirects, making it an excellent choice for scraping websites that involve complex interactions.&lt;/p&gt;

&lt;p&gt;Ruby's clean and expressive code, coupled with the power of Nokogiri and Mechanize, make it a solid option for web scraping projects.&lt;/p&gt;

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

&lt;p&gt;In conclusion, Python, JavaScript, and Ruby are three of the best programming languages for web scraping. Python's extensive libraries, such as BeautifulSoup, Scrapy, and Selenium, make it a popular choice for a wide range of scraping tasks. JavaScript, with frameworks like Puppeteer, excels at scraping dynamic websites that heavily rely on client-side rendering. Ruby's simplicity and the capabilities of libraries like Nokogiri and Mechanize make it a reliable choice for web scraping.&lt;/p&gt;

&lt;p&gt;When choosing a programming language for web scraping, consider the specific requirements of your project, the complexity of the target websites, and your familiarity with the language. Remember to always respect the terms of service and legal restrictions of the websites you scrape.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>programming</category>
      <category>python</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Web Scraping Without Getting Blocked and How to Solve Web Scraping Captcha</title>
      <dc:creator>Lustove</dc:creator>
      <pubDate>Fri, 29 Mar 2024 09:34:32 +0000</pubDate>
      <link>https://dev.to/lustove/web-scraping-without-getting-blocked-and-how-to-solve-web-scraping-captcha-4cnf</link>
      <guid>https://dev.to/lustove/web-scraping-without-getting-blocked-and-how-to-solve-web-scraping-captcha-4cnf</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i-cROAQm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/952ed123-de54-4d3c-93b1-822bc43bde0e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i-cROAQm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/952ed123-de54-4d3c-93b1-822bc43bde0e.png" alt="" width="486" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Web scraping has become a popular technique for extracting data from websites. However, many websites employ anti-scraping measures, including CAPTCHAs, to protect data and prevent automated access. This paper explores effective strategies to avoid interception during web scraping and provides a solution to deal with CAPTCHAs encountered during scraping by attempting to process web scraped CAPTCHAs using python&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus Code
&lt;/h2&gt;

&lt;p&gt;A bonus code for top captcha solutions; &lt;a href="https://www.capsolver.com/"&gt;CapSolver&lt;/a&gt;: &lt;strong&gt;WEBS&lt;/strong&gt;. After redeeming it, you will get an extra 5% bonus after each recharge, Unlimited&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" alt="" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding CAPTCHA in Web Scraping:
&lt;/h2&gt;

&lt;p&gt;CAPTCHA refers to the challenges that web scrapers encounter while extracting data from websites. CAPTCHAs are implemented as a security measure to prevent automated bots from accessing and gathering information. These challenges typically involve tests that are easy for humans to pass but difficult for bots to solve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reasons for Encountering CAPTCHA during Web Scraping:
&lt;/h2&gt;

&lt;p&gt;Websites use CAPTCHAs to protect their content and prevent unauthorized access. CAPTCHAs are commonly found on websites with valuable or restricted data or those aiming to prevent excessive traffic or scraping activities. When web scrapers encounter CAPTCHA, they must find a way to solve it in order to continue extracting the desired data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solving CAPTCHA during Web Scraping:
&lt;/h2&gt;

&lt;p&gt;Solving CAPTCHA challenges during web scraping requires robust strategies. Manual intervention, where a human solves CAPTCHAs as they arise, is one option, but it can be time-consuming and inefficient.&lt;/p&gt;

&lt;p&gt;Automated CAPTCHA solving techniques offer a more efficient solution. These techniques involve using algorithms and tools to recognize and solve CAPTCHA challenges without human intervention. By integrating automated CAPTCHA solving services into their scraping workflows, developers can overcome CAPTCHA challenges and extract the desired data more effectively.&lt;/p&gt;

&lt;p&gt;Web scraping developers can explore libraries and APIs that offer CAPTCHA solving services. These services provide pre-trained models and algorithms capable of accurately solving different types of CAPTCHAs, such as image-based and text-based challenges.&lt;/p&gt;

&lt;p&gt;Introducing CapSolver: The Optimal CAPTCHA Solving Solution for Web Scraping:&lt;br&gt;
CapSolver is a leading solution provider for CAPTCHA challenges encountered during web data scraping and similar tasks. It offers prompt solutions for individuals facing CAPTCHA obstacles in large-scale data scraping or automation tasks.&lt;/p&gt;

&lt;p&gt;CapSolver supports various types of CAPTCHA services, including  reCAPTCHA (&lt;a href="https://www.capsolver.com/products/recaptchav2"&gt;v2&lt;/a&gt;/&lt;a href="https://www.capsolver.com/products/recaptchav3"&gt;v3&lt;/a&gt;/Enterprise), &lt;a href="https://www.capsolver.com/products/funcaptcha"&gt;FunCaptcha&lt;/a&gt;, &lt;a href="https://www.capsolver.com/products/hcaptcha"&gt;hCaptcha&lt;/a&gt; (Normal/Enterprise), GeeTest V3/V4, AWS Captcha, ImageToText, and more. It covers a wide range of CAPTCHA types and continually updates its capabilities to address new challenges.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ilT4F1-G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/5a0532e1-65e8-40e8-9231-8fdac3e53efa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ilT4F1-G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/5a0532e1-65e8-40e8-9231-8fdac3e53efa.png" alt="" width="486" height="486"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Solve Any CAPTCHA with Capsolver Using Python:
&lt;/h2&gt;

&lt;p&gt;Prerequisites&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A working proxy&lt;/li&gt;
&lt;li&gt;Python installed&lt;/li&gt;
&lt;li&gt;Capsolver API key&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🤖 Step 1: Install Necessary Packages
&lt;/h3&gt;

&lt;p&gt;Execute the following commands to install the required packages:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pip install capsolver&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Here is an example of reCAPTCHA v2:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;👨‍💻 Python Code for solve reCAPTCHA v2 with your proxy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's a Python sample script to accomplish the task:&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="c1"&gt;# Consider using environment variables for sensitive information
&lt;/span&gt;&lt;span class="n"&gt;PROXY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://username:password@host:port&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your Capsolver API Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;PAGE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PAGE_URL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;PAGE_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PAGE_SITE_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;solve_recaptcha_v2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;solution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;solve&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ReCaptchaV2Task&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteURL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PROXY&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;solution&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solving reCaptcha v2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;solution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;solve_recaptcha_v2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PAGE_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PAGE_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solution: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;👨‍💻 Python Code for solve reCAPTCHA v2 without proxy&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Here's a Python sample script to accomplish the task:&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="c1"&gt;# Consider using environment variables for sensitive information
&lt;/span&gt;&lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your Capsolver API Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;PAGE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PAGE_URL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;PAGE_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PAGE_SITE_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;solve_recaptcha_v2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;solution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;capsolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;solve&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ReCaptchaV2TaskProxyless&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteURL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;websiteKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;solution&lt;/span&gt;



&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solving reCaptcha v2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;solution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;solve_recaptcha_v2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PAGE_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PAGE_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solution: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;In conclusion, web scraping can be a powerful technique for extracting data from websites, but it often encounters obstacles such as CAPTCHAs. Understanding CAPTCHA challenges and employing effective strategies to solve them is crucial for successful web scraping. By leveraging automated CAPTCHA solving techniques and services like CapSolver, developers can overcome these challenges and continue extracting the desired data efficiently. With the provided Python code examples, you can integrate CapSolver into your web scraping workflow and tackle CAPTCHAs effectively. &lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>scraping</category>
      <category>captcha</category>
      <category>captchasolver</category>
    </item>
    <item>
      <title>Web Scraping vs API: Collect data with web scraping and API</title>
      <dc:creator>Lustove</dc:creator>
      <pubDate>Fri, 29 Mar 2024 09:31:38 +0000</pubDate>
      <link>https://dev.to/lustove/web-scraping-vs-api-collect-data-with-web-scraping-and-api-p36</link>
      <guid>https://dev.to/lustove/web-scraping-vs-api-collect-data-with-web-scraping-and-api-p36</guid>
      <description>&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%2F8ps0uyncc9x2kswaby5l.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%2F8ps0uyncc9x2kswaby5l.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In today's data-driven world, the ability to collect and analyze vast amounts of information is crucial. When it comes to gathering data from the web, two popular methods are web scraping and APIs. Both approaches offer unique ways to access data, but understanding their differences and choosing the right method can greatly impact the success of data retrieval. In this article, we will explore what web scraping and APIs are, how they work, and compare them comprehensively. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Article Outline&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is Web Scraping?&lt;/li&gt;
&lt;li&gt;What is an API?&lt;/li&gt;
&lt;li&gt;Collecting Data with Web Scraping and APIs&lt;/li&gt;
&lt;li&gt;Web Scraping vs API: How do they work?&lt;/li&gt;
&lt;li&gt;API vs Web Scraping: Comprehensive Comparison&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Bonus Code
&lt;/h2&gt;

&lt;p&gt;A bonus code for top captcha solutions; &lt;a href="https://www.capsolver.com/"&gt;CapSolver&lt;/a&gt;: &lt;strong&gt;WEBS&lt;/strong&gt;. After redeeming it, you will get an extra 5% bonus after each recharge, Unlimited&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" alt="" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Web Scraping?
&lt;/h2&gt;

&lt;p&gt;Web scraping, also known as web data extraction, is the process of automatically extracting data from websites. It involves programmatically retrieving and parsing HTML or other structured data from web pages. By analyzing the HTML structure and using techniques like XPath or CSS selectors, specific data elements can be extracted, such as text, images, links, or tables. Web scraping enables you to gather data from multiple websites and extract valuable insights for various purposes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an API?
&lt;/h2&gt;

&lt;p&gt;API, short for Application Programming Interface, is a set of rules and protocols that allows different software applications to communicate and share data with each other. APIs act as intermediaries, enabling developers to access and retrieve specific data or perform certain functions from a service or platform. APIs provide predefined endpoints and data formats, making it easier for developers to integrate external data into their applications or systems without the need for parsing HTML or dealing with web page structures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Collecting Data with Web Scraping and APIs:
&lt;/h2&gt;

&lt;p&gt;Both web scraping and APIs serve as effective means of collecting data, but they differ in their approaches.&lt;/p&gt;

&lt;p&gt;Web scraping involves writing code to mimic human interaction with web pages. It accesses the HTML structure of a website, extracts the desired data, and saves it for further analysis. Web scraping allows for more flexibility and the extraction of unstructured or semi-structured data. It can be used to retrieve data from websites that do not provide APIs or require authentication.&lt;/p&gt;

&lt;p&gt;On the other hand, APIs provide a structured and streamlined way to access data. Instead of parsing HTML, APIs offer predefined endpoints and data formats, making data retrieval more efficient and consistent. APIs are commonly used when accessing data from platforms or services that provide API access. They often require authentication and provide data in a structured format such as JSON or XML.&lt;/p&gt;

&lt;h2&gt;
  
  
  Web Scraping vs API: How do they work?
&lt;/h2&gt;

&lt;p&gt;The approach to scraping depends on the target site you want to retrieve data from. There is no universal strategy, and each site requires different logic and measures. Suppose you want to extract data from a static site, which is the most common scraping scenario. The technical process you need to follow involves the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get the HTML content of the target page: Use an HTTP client to download the HTML document associated with the page you want to scrape.&lt;/li&gt;
&lt;li&gt;Parse the HTML: Feed the downloaded content to an HTML parser.&lt;/li&gt;
&lt;li&gt;Apply data extraction logic: Use the features offered by the parser to collect data, such as text, images, or videos, from the HTML elements on the page.&lt;/li&gt;
&lt;li&gt;Repeat the process on other pages: Apply the above steps to other pages programmatically discovered through web crawling to gather all the required data.&lt;/li&gt;
&lt;li&gt;Export the collected data: Preprocess the scraped data and export it to CSV or JSON files.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On the other hand, APIs provide standardized access to data. Regardless of the provider site, the approach to retrieving information through an API remains similar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get an API key: Sign up for free or purchase a subscription to obtain an API key.&lt;/li&gt;
&lt;li&gt;Perform API requests with your key: Use an HTTP client to make authenticated API requests using your key and retrieve data in a semi-structured format, typically JSON.&lt;/li&gt;
&lt;li&gt;Store the data: Preprocess the retrieved data and store it in a database or export it to human-readable files.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The main similarity between web scraping and API access is that both aim to retrieve data online, while the main difference lies in the actors involved. In web scraping, the effort lies on the web scraper, which needs to be built according to specific data extraction requirements and goals. In the case of APIs, most of the work is done by the API provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  API vs Web Scraping: A Comprehensive Comparison
&lt;/h2&gt;

&lt;p&gt;While both web scraping and APIs are valuable tools for data collection, they have distinct advantages and disadvantages:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages of Web Scraping:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access to publicly available data from any website&lt;/li&gt;
&lt;li&gt;No need for official authorization or API keys&lt;/li&gt;
&lt;li&gt;Flexibility to extract data in any desired format&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages of Web Scraping:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Potential legal and ethical concerns (violating terms of service)&lt;/li&gt;
&lt;li&gt;Risk of website changes breaking scrapers&lt;/li&gt;
&lt;li&gt;Difficulty in scaling and maintaining scrapers for large datasets&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Officially sanctioned and reliable access to data&lt;/li&gt;
&lt;li&gt;Documented and structured data formats&lt;/li&gt;
&lt;li&gt;Potentially faster and more efficient data retrieval&lt;/li&gt;
&lt;li&gt;Additional features like authentication and rate limiting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages of APIs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Limited to data sources that offer APIs&lt;/li&gt;
&lt;li&gt;Potential costs or usage restrictions&lt;/li&gt;
&lt;li&gt;Dependence on the API provider's uptime and maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choosing the Right Approach for Your Data Retrieval Goals The choice between web scraping and APIs depends on your specific data needs, the availability of APIs, and the legal and ethical considerations involved.&lt;/p&gt;

&lt;p&gt;If the data you require is publicly available on websites, and no official API exists, web scraping may be the best option. However, it's essential to consider the terms of service and potential legal implications before proceeding.&lt;/p&gt;

&lt;p&gt;If an official API is available, it is generally recommended to use it, as it provides a more reliable and structured way to access data. APIs also offer additional features and functionalities that can simplify data retrieval and integration.&lt;/p&gt;

&lt;p&gt;In some cases, a combination of web scraping and APIs may be the most effective approach. For example, you could use web scraping to gather data not available through APIs and then supplement it with data retrieved from official APIs.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J2ZN6k-A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/d9ceecec-dcfb-45fa-a06c-cd3f5e5d3380.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J2ZN6k-A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/d9ceecec-dcfb-45fa-a06c-cd3f5e5d3380.png" alt="" width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When dealing with websites that employ advanced security measures like CAPTCHAs, it's crucial to have a reliable solution. &lt;a href="https://www.capsolver.com/"&gt;CapSolver&lt;/a&gt;, a leading CAPTCHA solving service, provides APIs and tools to programmatically solve various types of CAPTCHAs, enabling seamless integration with your data collection workflows, whether you're using web scraping or APIs.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;In conclusion, both web scraping and APIs are powerful tools for data collection, each with its own strengths and limitations. By understanding the differences and considering your specific requirements, you can make an informed decision on the best approach to achieve your data retrieval goals efficiently and compliantly.&lt;/p&gt;

</description>
      <category>api</category>
      <category>webscraping</category>
      <category>scraping</category>
      <category>collectdata</category>
    </item>
    <item>
      <title>Web Scraping Challenges and How to Solve</title>
      <dc:creator>Lustove</dc:creator>
      <pubDate>Fri, 29 Mar 2024 09:27:05 +0000</pubDate>
      <link>https://dev.to/lustove/web-scraping-challenges-and-how-to-solve-5abo</link>
      <guid>https://dev.to/lustove/web-scraping-challenges-and-how-to-solve-5abo</guid>
      <description>&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%2Fqc0qn67ud0qmgzqjycyt.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%2Fqc0qn67ud0qmgzqjycyt.png" alt="Image description" width="486" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The internet is a vast repository of data, but harnessing its true potential can be challenging. Whether it's dealing with data in an unstructured format, navigating limitations imposed by websites, or encountering various obstacles, accessing and utilizing web data effectively requires overcoming significant hurdles. This is where web search becomes invaluable. By automating the extraction and processing of unstructured web content, one can compile extensive datasets that provide valuable insights and a competitive edge.&lt;/p&gt;

&lt;p&gt;However, web data enthusiasts and professionals encounter numerous challenges in this dynamic online landscape. In this article, we will explore the top 5 web search challenges that both beginners and experts must be aware of. Moreover, we will delve into the most effective solutions to overcome these difficulties.&lt;/p&gt;

&lt;p&gt;Let's delve deeper into the world of web search and discover how to conquer these challenges!&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus Code
&lt;/h2&gt;

&lt;p&gt;A bonus code for top captcha solutions; &lt;a href="https://www.capsolver.com/"&gt;CapSolver&lt;/a&gt;: &lt;strong&gt;WEBS&lt;/strong&gt;. After redeeming it, you will get an extra 5% bonus after each recharge, Unlimited&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X_0ZGBaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/fbc29472-886c-45b2-9eb2-2b307f6d9700.png" alt="" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  IP Blocking
&lt;/h2&gt;

&lt;p&gt;To prevent abuse and unauthorized web scraping, websites often employ blocking measures that rely on unique identifiers like IP addresses. When certain limits are exceeded or suspicious activities are detected, the website may ban the associated IP address, effectively preventing automated scraping.&lt;/p&gt;

&lt;p&gt;Websites may also implement geo-blocking, which blocks IPs based on their geographical location, as well as other anti-bot measures that analyze IP origin and unusual usage patterns to identify and block IPs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;Fortunately, there are several solutions to overcome IP blocking. The simplest approach involves adjusting your requests to adhere to the website's limits, controlling the rate of requests and maintaining a natural usage pattern. However, this approach significantly restricts the amount of data that can be scraped within a given timeframe.&lt;/p&gt;

&lt;p&gt;A more scalable solution is to utilize a proxy service that incorporates IP rotation and retry mechanisms to evade IP blocking. It's important to note that web scraping using proxies and other circumvention methods may raise ethical concerns. Always ensure compliance with local and international data regulations and carefully review the website's terms of service (TOS) and policies before proceeding.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0vnsYsdr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/e29ece3f-beb5-413a-9e17-2255cc76b2be.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0vnsYsdr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-29/e29ece3f-beb5-413a-9e17-2255cc76b2be.png" alt="" width="486" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CAPTCHAs
&lt;/h2&gt;

&lt;p&gt;CAPTCHAs, short for Completely Automated Public Turing Tests to Tell Computers and Humans Apart, serve as a widely used security measure to impede web scrapers from accessing and extracting data from websites.&lt;/p&gt;

&lt;p&gt;This system presents challenges that require manual interaction to prove the user's authenticity before granting access to the desired content. These challenges can take various forms, including image recognition, textual puzzles, auditory puzzles, or even analysis of user behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;To overcome CAPTCHAs, one can either solve them or take measures to avoid triggering them. It is generally recommended to opt for the former approach, as it ensures data integrity, increases automation efficiency, provides reliability and stability, and complies with legal and ethical guidelines. Avoiding triggering CAPTCHA may result in incomplete data, increased manual operations, use of non-compliant methods, and exposure to legal and ethical risks. Therefore, addressing CAPTCHA is a more reliable and sustainable approach. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.capsolver.com/"&gt;Capsolver&lt;/a&gt;, for example, is a third-party service dedicated to solving Captchas. It offers an API that can be integrated directly into scraping scripts or applications.&lt;br&gt;
By outsourcing Captcha solving to services like Capsolver, you can streamline the scraping process and reduce manual intervention. Sign up for a &lt;a href="https://dashboard.capsolver.com/dashboard/overview"&gt;free trial&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rate Limiting
&lt;/h2&gt;

&lt;p&gt;Rate limiting is a method employed by websites to protect against abuse and different types of attacks. It sets limits on the number of requests a client can make within a given time frame. If the limit is exceeded, the website may throttle or block the requests using techniques such as IP blocking or CAPTCHA.&lt;/p&gt;

&lt;p&gt;Rate limiting primarily focuses on identifying individual clients and monitoring their usage to ensure they stay within the set limits. Identification can be based on the client's IP address or utilize techniques like browser fingerprinting, which involves detecting unique client features. User-agent strings and cookies may also be examined as part of the identification process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;There are several ways to get over rate limits. One simple approach is to control the frequency and timing of your requests to mimic more human-like behavior. This can include introducing random delays or retries between requests. Other solutions involve rotating your IP address and customizing various properties, such as the user-agent string and browser fingerprint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honeypot Traps
&lt;/h2&gt;

&lt;p&gt;Honeypot traps pose a significant challenge for web scraping bots, as they are specifically designed to deceive automated scripts. These traps involve the inclusion of hidden elements or links that are intended to be accessed only by bots.&lt;/p&gt;

&lt;p&gt;The purpose of honeypot traps is to identify and block scraping activities, as real users would not interact with these hidden elements. When a scraper encounters and interacts with these traps, it raises a red flag, potentially leading to the scraper being banned from the website.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;To overcome this challenge, it is crucial to be vigilant and avoid falling into honeypot traps. One effective strategy is to identify and avoid hidden links. These links are typically configured with CSS properties such as &lt;code&gt;display: none&lt;/code&gt; or &lt;code&gt;visibility: hidden&lt;/code&gt;, making them invisible to human users but detectable by scraping bots.&lt;/p&gt;

&lt;p&gt;By carefully analyzing the HTML structure and CSS properties of the web pages you are scraping, you can exclude or bypass these hidden links. This way, you can minimize the risk of triggering honeypot traps and maintain the integrity and stability of your scraping process.&lt;/p&gt;

&lt;p&gt;It is important to note that respecting website policies and terms of service is essential when engaging in web scraping activities. Always ensure that your scraping activities align with the ethical and legal guidelines set by the website owners.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic Content
&lt;/h2&gt;

&lt;p&gt;In addition to rate limiting and blocking, web scraping presents challenges related to detecting and handling dynamic content.&lt;/p&gt;

&lt;p&gt;Modern websites often incorporate a significant amount of JavaScript to enhance interactivity and dynamically render various parts of the user interface, additional content, or even entire pages.&lt;/p&gt;

&lt;p&gt;With the prevalence of single-page applications (SPAs), JavaScript plays a crucial role in rendering almost every aspect of the website. Additionally, other types of web applications utilize JavaScript to asynchronously load content, allowing features like infinite scroll without the need for page refresh or reload. In such cases, parsing the HTML alone is insufficient.&lt;/p&gt;

&lt;p&gt;To successfully scrape dynamic content, it is necessary to load and process the underlying JavaScript code. However, implementing this correctly in a custom script can be challenging. This is why many developers prefer utilizing headless browsers and web automation tooling such as Playwright, Puppeteer, and Selenium.&lt;/p&gt;

&lt;p&gt;By leveraging these tools, you can emulate a browser environment, execute JavaScript, and obtain the fully rendered HTML, including any dynamically loaded content. This approach ensures that you capture all the desired information, even from websites heavily reliant on JavaScript for content generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Slow Page Loading
&lt;/h2&gt;

&lt;p&gt;When a website experiences a high volume of concurrent requests, its loading speed can be significantly affected. Factors such as page size, network latency, server performance, and the amount of JavaScript and other resources to load all contribute to this issue.&lt;/p&gt;

&lt;p&gt;Slow page loading can cause delays in data retrieval for web scraping. This can slow down the entire scraping project, especially when dealing with multiple pages. It can also lead to timeouts, unpredictable scraping times, incomplete data extraction, or incorrect data if certain page elements fail to load properly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;To address this challenge, it is recommended to use headless browsers like Selenium or Puppeteer. These tools allow you to ensure that a page is fully loaded before extracting data, avoiding incomplete or inaccurate information. Setting up timeouts, retries, or refreshes, and optimizing your code can also help mitigate the impact of slow page loading.&lt;/p&gt;

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

&lt;p&gt;We face several challenges when it comes to web scraping. These challenges include IP blocking, CAPTCHA verification, rate limiting, honeypot traps, dynamic content, and slow page loading. However, we can overcome these challenges by using proxies, solving CAPTCHAs, controlling request frequency, avoiding traps, leveraging headless browsers, and optimizing our code. By addressing these obstacles, we can improve our web scraping efforts, gather valuable information, and ensure compliance.&lt;/p&gt;

</description>
      <category>scraping</category>
      <category>captchasolver</category>
      <category>webscraping</category>
      <category>captcha</category>
    </item>
    <item>
      <title>How to Solve Captchas when Scraping eCommerce Websites</title>
      <dc:creator>Lustove</dc:creator>
      <pubDate>Tue, 26 Mar 2024 08:34:55 +0000</pubDate>
      <link>https://dev.to/lustove/how-to-solve-captchas-when-scraping-ecommerce-websites-1mpg</link>
      <guid>https://dev.to/lustove/how-to-solve-captchas-when-scraping-ecommerce-websites-1mpg</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FsB2R5Jf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-26/bb83fa75-2ba7-488c-90d1-9d92c38fdf35.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FsB2R5Jf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-26/bb83fa75-2ba7-488c-90d1-9d92c38fdf35.png" alt="" width="486" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When scraping data from eCommerce websites, encountering captchas can be a common challenge. Captchas are used to verify that a user is human and not a bot. For developers using local browsers to scrape data, solving captchas can be a significant obstacle. However, there are third-party solutions available, such as Capsolver, that can help solve captcha challenges through an API integration. In this article, we will explore how to overcome captchas when scraping eCommerce websites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understand Captcha Types when Scraping eCommerce Websites:
&lt;/h2&gt;

&lt;p&gt;Before delving into solutions, it's crucial to understand what Captchas are and why they're employed on eCommerce websites. Captchas are security measures implemented to differentiate between human users and bots. They typically involve tasks like identifying distorted text, selecting images, or solving puzzles. eCommerce websites use Captchas to protect against automated scraping, which can overload servers or scrape sensitive data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text-based CAPTCHA&lt;/strong&gt;,Text-based CAPTCHAs are also a very common form of CAPTCHA, requiring the user to correctly identify and enter a series of characters displayed in a distorted or creative font. The accuracy of the response is then used to decide whether to allow access to the website or not&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image-based CAPTCHA&lt;/strong&gt;, in image-based CAPTCHAs, the user must recognise and correctly interact with the image to be granted access. These image challenges are visually compelling and proving challenging for automated scripts, as a result of the complex image recognition capabilities they require, which are often outside the capabilities of automated scripts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Puzzle-based CAPTCHA&lt;/strong&gt;,
Puzzle-based CAPTCHA challenges requiring the user to accurately perform a greater puzzle. This manual verification approach is more secure than text-based CAPTCHAs. Common puzzles include slide puzzles, pattern recognition or colour matching among many other novel recognitions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Challenges of Captcha Solving in eCommerce Scraping:
&lt;/h2&gt;

&lt;p&gt;Captchas pose significant challenges to the scraping process. They can slow down scraping operations, leading to delays and reduced efficiency. Manual solving of Captchas is time-consuming and impractical for large-scale scraping tasks. Additionally, traditional captcha-solving methods may not always be accurate or reliable, especially as Captcha designs evolve to combat scraping techniques.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strategies for Solving Captchas when Scraping eCommerce Websites:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Utilize Third-Party Captcha Solving Services:
&lt;/h3&gt;

&lt;p&gt;Capsolver, for example, is a third-party service dedicated to solving Captchas. It offers an API that can be integrated directly into scraping scripts or applications.&lt;br&gt;
By outsourcing Captcha solving to services like Capsolver, you can streamline the scraping process and reduce manual intervention. Sign up for a &lt;a href="https://dashboard.capsolver.com/dashboard/overview"&gt;free trial&lt;/a&gt;.&lt;br&gt;
Here's an example of the imagetotext that Amazon will encounter, to show the python steps: &lt;/p&gt;

&lt;h4&gt;
  
  
  Create Task
&lt;/h4&gt;

&lt;p&gt;Create the task with the &lt;a href="//../api-createtask.md"&gt;createTask&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task Object Structure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Note that this type of task returns the task execution result directly after createTask, rather than getting it&lt;br&gt;
asynchronously through getTaskResult.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Properties&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;type&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;ImageToTextTask&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;websiteURL&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Optional&lt;/td&gt;
&lt;td&gt;Page source url to improve accuracy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;body&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;base64 encoded content of the image (no newlines) (no data:image/*&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;*; base64, content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;module&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Optional&lt;/td&gt;
&lt;td&gt;Specifies the module. Currently, the supported modules are common and queueit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;score&lt;/td&gt;
&lt;td&gt;Float&lt;/td&gt;
&lt;td&gt;Optional&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;0.8 ~ 1&lt;/code&gt;, Identify the matching degree. If the recognition rate is not within the range, no deduction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;case&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;td&gt;Optional&lt;/td&gt;
&lt;td&gt;Case sensitive or not&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Example Request
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;```json lines&lt;br&gt;
{&lt;br&gt;
  "clientKey": "YOUR_API_KEY",&lt;br&gt;
  "task": {&lt;br&gt;
    "type": "ImageToTextTask",&lt;br&gt;
    "websiteURL": "&lt;a href="https://xxxx.com"&gt;https://xxxx.com&lt;/a&gt;",&lt;br&gt;
    // You can choose the module you need to use&lt;br&gt;
    // ocr single image model, default common&lt;br&gt;
    "module": "queueit",&lt;br&gt;
    // base64 encoded image&lt;br&gt;
    "body": "/9j/4AAQSkZJRgABA......"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

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


#### Example Response



```json lines
{
  "errorId": 0,
  "errorCode": "",
  "errorDescription": "",
  "status": "ready",
  "solution": {
    "text": "44795sds"
  },
  "taskId": "2376919c-1863-11ec-a012-94e6f7355a0b"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Optimize Scraping Parameters:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Adjust scraping parameters such as request frequency, user-agent strings, and IP rotation to minimize the occurrence of Captchas.&lt;/li&gt;
&lt;li&gt;By scraping responsibly and respecting website policies, you can reduce the likelihood of triggering Captchas.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Solving Captchas when scraping eCommerce websites is essential for obtaining accurate and reliable data. By employing strategies such as utilizing third-party Captcha-solving services like Capsolver, implementing Captcha-solving algorithms, and optimizing scraping parameters, businesses and researchers can effectively overcome Captchas and extract valuable insights from eCommerce platforms. &lt;/p&gt;

</description>
      <category>captcha</category>
      <category>ecommerce</category>
      <category>scraping</category>
      <category>python</category>
    </item>
    <item>
      <title>How to Solve Captchas Automatically Using CapSolver</title>
      <dc:creator>Lustove</dc:creator>
      <pubDate>Tue, 26 Mar 2024 08:31:04 +0000</pubDate>
      <link>https://dev.to/lustove/how-to-solve-captchas-automatically-using-capsolver-i0f</link>
      <guid>https://dev.to/lustove/how-to-solve-captchas-automatically-using-capsolver-i0f</guid>
      <description>&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%2Fn2x6feu7oimsvwslllxn.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%2Fn2x6feu7oimsvwslllxn.png" alt="Image description" width="486" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CAPTCHA was developed to differentiate between human users and automated computer programs, serving as a protective barrier for web services. It prevents harmful activities like creating multiple accounts, automated brute force attacks, data scraping, and spamming. CAPTCHA presents a challenge-response test that is easy for humans but challenging for automated algorithms. This article explores various CAPTCHA types and demonstrates the use of CapSolver to bypass these challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Different types of CAPTCHAs
&lt;/h2&gt;

&lt;p&gt;CAPTCHA challenges nowadays come in many different forms and variations, of which the following are a few of the very common ones you'll encounter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ReCaptcha &lt;a href="https://www.capsolver.com/products/recaptchav2"&gt;V2&lt;/a&gt;&amp;amp;&lt;a href="https://www.capsolver.com/products/recaptchav3"&gt;v3&lt;/a&gt;&lt;/strong&gt;: ReCaptcha is a widely used captcha system developed by Google. It includes various types, such as selecting images that match a given description or solving puzzles.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S_aC2Vyf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-12-28/b3073b51-f0ea-4603-a07d-85221c4474cf.png" alt="" width="618" height="1058"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-&lt;strong&gt;FunCaptcha&lt;/strong&gt;: FunCaptcha stands out among CAPTCHA variants by providing users with enjoyable and interactive puzzles. Rather than traditional text-based challenges, FunCaptcha presents users with visually engaging tasks, such as selecting specific objects or solving puzzles. This approach enhances user experience while maintaining a high level of security.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.capsolver.com/products/hcaptcha"&gt;hCaptcha&lt;/a&gt;: hCaptcha bears a striking resemblance to reCaptcha, with the main distinction being that hCaptcha allows multiple companies to reap the advantages of data labeling performed by users when they interact with websites. In contrast, when using reCaptcha, only Google benefits from the collective efforts of crowdsourced data labeling.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gyDKJOq8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-12-28/b6069978-15dd-4411-8db4-68b7b731fb92.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gyDKJOq8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-12-28/b6069978-15dd-4411-8db4-68b7b731fb92.png" alt="" width="545" height="833"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Text-based CAPTCHA&lt;/strong&gt;,Text-based CAPTCHAs are also a very common form of CAPTCHA, requiring the user to correctly identify and enter a series of characters displayed in a distorted or creative font. The accuracy of the response is then used to decide whether to allow access to the website or not&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8Xl9OQUK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/v1/data:image/jpeg%3Bbase64%2C/9j/4AAQSkZJRgABAQEAqACoAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADGAP8DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4%2BTl5ufo6erx8vP09fb3%2BPn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3%2BPn6/9oADAMBAAIRAxEAPwD3%2BiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooprnCE%2BlADsj1pMj1rOiVpk3tJJks3Q47mn%2BT/wBNZf8AvqgC9ketGR61R8n/AKay/wDfVHk/9NZf%2B%2BqAL2R60ZHrVHyf%2Bmsv/fVHk/8ATWX/AL6oAvZHrRketUfJ/wCmsv8A31R5P/TWX/vqgC9ketGR61R8n/prL/31R5P/AE1l/wC%2BqAL2R60ZHrVHyf8AprL/AN9UeT/01l/76oAvZHrRketUfJ/6ay/99UeT/wBNZf8AvqgC9ketGR61R8n/AKay/wDfVHk/9NZf%2B%2BqAL2R60ZHrVHyf%2Bmsv/fVHk/8ATWX/AL6oAvZHrRketUfJ/wCmsv8A31R5P/TWX/vqgC9ketGR61R8n/prL/31R5P/AE1l/wC%2BqAL2R60ZHrVHyf8AprL/AN9UeT/01l/76oAvZHrRketUfJ/6ay/99UeT/wBNZf8AvqgC9ketLkVQ8n/prL/31TXBh2uskh%2BYAgnPWgDRopFOVBpaACmSf6tvpT6ZJ/q2%2BlAFK1/49x/vN/6EamqG1/49x/vN/wChGpqACiiigApvmIOrr%2BdOqaD/AFK0AV/Mj/vr%2BdHmR/31/OrlFAFPzI/76/nR5kf99fzq5RQBT8yP%2B%2Bv50eZH/fX86uUUAU/Mj/vr%2BdHmR/31/OrlFAFPzI/76/nR5kf99fzq5RQBT8yP%2B%2Bv50eZH/fX86uUUAU/Mj/vr%2BdHmR/31/OrlFAFPzI/76/nR5kf99fzq5RQBUBBGQQR6ilo7t/vH%2BdFABRRRQAVDc/6tf99f51NUNz/q1/31/nQBeT7gp1NT7gp1ABTJP9W30p9Mk/1bfSgCla/8e4/3m/8AQjU1Q2v/AB7j/eb/ANCNTUAFFFFABU0H%2BpWoamg/1K0ASUUV5l8d9V1bSfh35mlTSweddpDcyxEhliKseo6ZYKPxx3oA9GW9tWuTbLcwmcDJiEg3D8OtU9V8RaJoTRLq2rWVi0oJjFzOse8DrjJ56iuC%2BF3w08M6TouheJIIpJ9WktVuPtTTMApkj%2BYBQQuAGI5GfxrkPjRa2OpePJrXVb2O0SPw4ZbB5W2qbgTk7QfVgCtAHvrOqLuZgq%2BpOBSggjIOQehFeEfEDxDZ%2BMPAXgWe6uzb6TqN/GupSq2PKZRtcZx2O/GR2Bqp4BOoab4g8ZeGfAmrjUbFLJZdOuLmbMccp2gkEKV3De/QYYoM%2BwB9B0V82aZ8WfifYXl5YzaZFrTWE5t7p1sy2xwxGC8WFHIOCRzivSfHHxh0vwQsdhLAL/XfKVprW3kxHCSM/M5Bx7DBOME4yKAPSqK8ivfjTPF8MLXxdBoSrLPqH2H7PLPlQdjNvDAZI%2BXGMDv6c6XxxfU4/hw1/pN/cWv2e4ikmMEhUvE3y4JHbcyn8KAOm%2BIGsaroHgfVNV0aCOa8tot4EnIVc/M%2BO%2B0ZbHt%2BFeTfBn4tT3N9/wAI54mvWlluZS1neTtyXY5MTH3J%2BX67fQD2HwtrNv4v8F6fqbKjpfWw8%2BPqobG2RfoGDCvkfV/B11p/jfWPDtsWN1ZNI9qnVpkUbwBj%2BIx/MPUjHUigD7Voryz4N/Ev/hMNJOk6rKP7bsk5Ynm5jHG/eHRvwPfj1OgAooooAq92/3j/Oiju3%2B8f50hIVSzEADqSeBQAtFFFABUNz/q1/31/nU1Q3P%2BrX/fX%2BdAF9PuClpqfcFOoAKZJ/q2%2BlPpkn%2Brb6UAUrX/AI9x/vN/6EamqG1/49x/vN/6EamoAKKKKACpoP8AUrUNTQf6laAJKzPEOhWfibw/e6NfqTb3cRRiOqnqrDPcEAj3FadFAHhHgrxpP8LNRm8D%2BNjJHaQuXsL8IWTyyfbkoTkg8lSSD04i8YeMPDPjLxbYXOk2iavdaFMGa2kgEi6lbMP3wiRh8zp1AP8AtMM4r2HxN4S0Txfp32HWrJLiNTmN87XjPqrDkfyPfNcd4R%2BCmheEPFEWuW1/fXMkCsII5yuELAqSSoGeCR%2BNAFDxL8NdRb%2B1YvDcdtHp928Wp2kDYT7JfxkcquAArpkH0OO1em6ZY21rbiaLTbexnnVXnSKNQd2OhK8HBJGeavUUAeWfDsJonxP8d%2BHGxuluE1KEkcsknLfUAyKPzrl/hV4Q0q48Y%2BK7Txfawaj4jtrjc0d5GHVkYkmVUPB3Eg5xwCuMZ59p/sDS/wDhIRrwtEXVPJNubhSQWjJB2kZweg6jIxXMePvBV3rMtt4g8OXIsfE%2Bnj/R5%2Bizp3ifsQcnGeOSDwaAMT4veFLK2%2BEV9baPYx28NncJeiCBcKPmw5A7DDMePSmWnjzwf4m%2BGMWlav4gsra7u9MFvcLI%2BGjl2bScH0YZH4VR0f4panqmtW/g7xt4TawfUd9nLOSyo5ZSMBGU5DHjIYjnNcf8KvBXhfWPEPiTwt4i01Lu902djDMJpI2Kq5jfhWHAIU/8CNAG9%2Bzp4kzBqnha4kBaBvtVthsgqSFcD2B2n/gRrI%2BOSSeGvifoPie1GHaOOXA43PC/OfqpQVB4r0iz%2BD/xc0HVdJR4NInAZ4zIz4XOyVcnk/KQwznk%2B1a37TOwp4YP8RN1j6fuqAMP4oeGbrwB4usfG/hnMNjdSidCo%2BWGYjJUj%2B44zx/vDpive/Bfiuz8Z%2BF7XWbTCmQbJ4s5MMoxuQ/nkeoIPevErH4VfEHxjoOny6r4sjGl3FtFLFbvPK%2B1SoKgx4C5Ax3NZ3wW8QXXg74iXXhXUyY4r2U2siMeI7lCQpH15X3yvpQB9PUUUUAVe7f7x/nWJqMUOtXd5ot3ujhihguVdJCjMd756fwjYv5/Q1t92/3j/OqGp6Ra6rEBMrLKqssc0bsjpuHIypBIPGR0OKAINM8611W900yzTW8UUU0LzMXZN5cFCx5bGzIJJPzdela1QWNothYW9okkkiwxhA8rbmOB1JqegAqG5/1a/wC%2Bv86mqG5/1a/76/zoAvJ9wU6mp9wU6gApkn%2Brb6U%2BmSf6tvpQBStf%2BPcf7zf%2BhGpqhtf%2BPcf7zf8AoRqagAooooAKmg/1K1DTo5tiBTG5x6Y/xoAsUVD9o/6ZP%2Bn%2BNH2j/pk/6f40ATUVD9o/6ZP%2Bn%2BNH2j/pk/6f40ATUVD9o/6ZP%2Bn%2BNH2j/pk/6f40ATUVD9o/6ZP%2Bn%2BNH2j/pk/6f40ATVlW3hnRLPXJdatdMtoNSmVlluIk2tIGILbsdSSAcnmr/ANo/6ZP%2Bn%2BNH2j/pk/6f40Act48%2BHWk/ECGyTU7i7gazZzE9syg/NjIO5T/dFUvGfwt07xvBpMV/qV7ENNiaNDFsy%2BQuS2R1%2BUdK7b7R/wBMn/T/ABo%2B0f8ATJ/0/wAaAG2FnHp2nWtjDnyraFIUz12qAB/Ksk%2BCvDLa5NrUmiWUupSyLK1xLHvYOoADLuyFIwORjnnrWx9o/wCmT/p/jR9o/wCmT/p/jQBNRUP2j/pk/wCn%2BNH2j/pk/wCn%2BNAEfdv94/zrjfE3jldK1CTR7S3kN8HjUyuB5ahgDkc5Jwe4A/r2I5ySMZJOD9aztV0LT9YgKXMCeZuDrMqgOrDoQf0x6UAUNJ1WSXWprUyyS20zXJi80DdE8MoR0yOqncpXPI5BNdDWdZaULa/nvZZRLNJuWMLGESKMsWKqB3J5ZjyxHbpWjQAVDc/6tf8AfX%2BdTVDc/wCrX/fX%2BdAF5PuCnU1PuCnUAFMk/wBW30p9Mk/1bfSgCla/8e4/3m/9CNTVDa/8e4/3m/8AQjU1ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUNz/q1/wB9f51NUNz/AKtf99f50AXk%2B4KdSJ9wUtABTJP9W30p9Mk/1bfSgCla/wDHuP8Aeb/0I1NUNr/x7j/eb/0I1NQAUUUUAFFFFABRTfMQHBdcj3pPNj/vr%2BdAD6ydUsXudS0uRJLtFEzCUw3EiIF8qQjcqsARu29RzwK0/Nj/AL6/nQZIyMF0IPuKAOPt9d1q4ks96skswkKwRW29WMckUTbmGdqMfNYNkfKy%2BhBsLc%2BIrvw7rhlWS3vVtWNssMbeYk218qu6MBhkIARv7/McjHTL5CBQnlKEXaoXA2j0HoOBTvNj/vr%2BdAHKT3HiCzWQ2aTzxzPM/wC9hO6JRcRgEYUnJjeRgCp%2B4MLwQbt3d6%2Bmnaa9tAktzMhWYCI7VYAOGO7aVBVHTkfekTjit7zY/wC%2Bv50ebH/fX86AOVutS8SLbSyQW0ouvs7yRQG13JgwM65YfxiXam3PIHT5twvWx1FvEyR3El08MIkUEwbYmXam1t4GCxO/jPHoMZO55sf99fzo82P%2B%2Bv50AcZLqGuz3CvJHqEEUM28PFZO7gmOcFCuzDKGEXTcPm%2B%2Bcgi82peIIzLK1nK7wo0s1qlvlcKyELE/G93TzOMnDYHy4%2BbpfNj/AL6/nR5sf99fzoAwdLudeOtvbaikYgSJcsiNtc7EJZTs2/fLjBfOAPl7noaZ5sf99fzo82P%2B%2Bv50APopnmx/31/OjzY/76/nQA%2BiiigAooooAKhuf9Wv%2B%2Bv86mqG5/1a/wC%2Bv86ALyfcFOpqfcFOoAKZJ/q2%2BlPpkn%2Brb6UAUrX/AI9x/vN/6EamqG1/49x/vN/6EamoAKKKKACiiigCW3/1X/Am/malqvDNEkZDSIDubgsPWpPtEP8Az2j/AO%2BhQBJRUf2iH/ntH/30KPtEP/PaP/voUASUVH9oh/57R/8AfQo%2B0Q/89o/%2B%2BhQBJRUf2iH/AJ7R/wDfQo%2B0Q/8APaP/AL6FAElFR/aIf%2Be0f/fQo%2B0Q/wDPaP8A76FAElFR/aIf%2Be0f/fQo%2B0Q/89o/%2B%2BhQBJRUf2iH/ntH/wB9Cj7RD/z2j/76FAElR3H/AB7S/wC4f5UfaIf%2Be0f/AH0KjnniNvIBKhJQ4AYelADaKKKACiiigAqG5/1a/wC%2Bv86mqG5/1a/76/zoAvJ9wU6mp9wU6gApkn%2Brb6U%2BmSf6tvpQBStf%2BPcf7zf%2BhGpqhtf%2BPcf7zf8AoRqagAooooAKKKKACiiigAooooAUDJx615f/AML78G/889W/8BR/8VXqC/fX618MnrQB9Lf8L78G/wDPPVv/AAFH/wAVR/wvvwb/AM89W/8AAUf/ABVeD%2BENNtNa1qTSLlFM17ayxWUjSFBHc7d0ZJB6Ert5yPn6V3A%2BH3hfWJjc6fqc8FrJqQso0h3SIirLHCdzFWAdwWlG5hwQApGSAD0D/hffg3/nnq3/AICj/wCKo/4X34N/556t/wCAo/8Aiq830/RvBzeHftdxBLHDc21si3Uzr5kCS3lxG0pHK7wsa8joBgY5J4jxNpEWga9NpKT%2BfLapGly4IKifYDIq4H3VYleeeDQB78fj34MAz5erf%2BAo/wDiq9RIwcelfC8n%2Brb6Gvuhvvt9aAEooooAKKKKACiiigAooooAKhuf9Wv%2B%2Bv8AOpqhuf8AVr/vr/OgC8n3BTqan3BTqACmSf6tvpT6RhuUj1oAoWv/AB7j/eb/ANCNTVXEV1CNiBCuSRkHuc%2BtL/pn92L8j/jQBPRUH%2Bmf3YvyP%2BNH%2Bmf3YvyP%2BNAE9FQf6Z/di/I/40f6Z/di/I/40AT0VB/pn92L8j/jR/pn92L8j/jQBPRUH%2Bmf3YvyP%2BNH%2Bmf3YvyP%2BNAFgHDA%2BhrwH/hnfUP%2Bhltf/ARv/iq92/0z%2B7F%2BR/xo/wBM/uxfkf8AGgDwk/s7X5GD4ktCP%2BvRv/iqQ/s6Xx6%2BI7M4/wCnNv8A4qvd/wDTP7sX5H/Gj/TP7sX5H/GgDw22/Z%2B1Wzu4bq38T2kc8LiSNxZklWByDy3tSTfs%2B6rcTyTz%2BKbeWaVzJJI9q5Z2JySTu5JJzXuf%2Bmf3YvyP%2BNH%2Bmf3YvyP%2BNAHhJ/Z11AqQfEtryMf8ejf/ABVe/E5Yn1NV/wDTP7sX5H/Gj/TP7sX5H/GgCeioP9M/uxfkf8aP9M/uxfkf8aAJ6Kg/0z%2B7F%2BR/xo/0z%2B7F%2BR/xoAnoqD/TP7sX5H/Gj/TP7sX5H/GgCeioP9M/uxfkf8aP9M/uxfkf8aAJ6huf9Wv%2B%2Bv8AOk/0z%2B7F%2BR/xo8q5lKrIEChgeAe340AaCfcFLSAYAFLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8Xl9OQUK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/v1/data:image/jpeg%3Bbase64%2C/9j/4AAQSkZJRgABAQEAqACoAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADGAP8DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4%2BTl5ufo6erx8vP09fb3%2BPn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3%2BPn6/9oADAMBAAIRAxEAPwD3%2BiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooprnCE%2BlADsj1pMj1rOiVpk3tJJks3Q47mn%2BT/wBNZf8AvqgC9ketGR61R8n/AKay/wDfVHk/9NZf%2B%2BqAL2R60ZHrVHyf%2Bmsv/fVHk/8ATWX/AL6oAvZHrRketUfJ/wCmsv8A31R5P/TWX/vqgC9ketGR61R8n/prL/31R5P/AE1l/wC%2BqAL2R60ZHrVHyf8AprL/AN9UeT/01l/76oAvZHrRketUfJ/6ay/99UeT/wBNZf8AvqgC9ketGR61R8n/AKay/wDfVHk/9NZf%2B%2BqAL2R60ZHrVHyf%2Bmsv/fVHk/8ATWX/AL6oAvZHrRketUfJ/wCmsv8A31R5P/TWX/vqgC9ketGR61R8n/prL/31R5P/AE1l/wC%2BqAL2R60ZHrVHyf8AprL/AN9UeT/01l/76oAvZHrRketUfJ/6ay/99UeT/wBNZf8AvqgC9ketLkVQ8n/prL/31TXBh2uskh%2BYAgnPWgDRopFOVBpaACmSf6tvpT6ZJ/q2%2BlAFK1/49x/vN/6EamqG1/49x/vN/wChGpqACiiigApvmIOrr%2BdOqaD/AFK0AV/Mj/vr%2BdHmR/31/OrlFAFPzI/76/nR5kf99fzq5RQBT8yP%2B%2Bv50eZH/fX86uUUAU/Mj/vr%2BdHmR/31/OrlFAFPzI/76/nR5kf99fzq5RQBT8yP%2B%2Bv50eZH/fX86uUUAU/Mj/vr%2BdHmR/31/OrlFAFPzI/76/nR5kf99fzq5RQBUBBGQQR6ilo7t/vH%2BdFABRRRQAVDc/6tf99f51NUNz/q1/31/nQBeT7gp1NT7gp1ABTJP9W30p9Mk/1bfSgCla/8e4/3m/8AQjU1Q2v/AB7j/eb/ANCNTUAFFFFABU0H%2BpWoamg/1K0ASUUV5l8d9V1bSfh35mlTSweddpDcyxEhliKseo6ZYKPxx3oA9GW9tWuTbLcwmcDJiEg3D8OtU9V8RaJoTRLq2rWVi0oJjFzOse8DrjJ56iuC%2BF3w08M6TouheJIIpJ9WktVuPtTTMApkj%2BYBQQuAGI5GfxrkPjRa2OpePJrXVb2O0SPw4ZbB5W2qbgTk7QfVgCtAHvrOqLuZgq%2BpOBSggjIOQehFeEfEDxDZ%2BMPAXgWe6uzb6TqN/GupSq2PKZRtcZx2O/GR2Bqp4BOoab4g8ZeGfAmrjUbFLJZdOuLmbMccp2gkEKV3De/QYYoM%2BwB9B0V82aZ8WfifYXl5YzaZFrTWE5t7p1sy2xwxGC8WFHIOCRzivSfHHxh0vwQsdhLAL/XfKVprW3kxHCSM/M5Bx7DBOME4yKAPSqK8ivfjTPF8MLXxdBoSrLPqH2H7PLPlQdjNvDAZI%2BXGMDv6c6XxxfU4/hw1/pN/cWv2e4ikmMEhUvE3y4JHbcyn8KAOm%2BIGsaroHgfVNV0aCOa8tot4EnIVc/M%2BO%2B0ZbHt%2BFeTfBn4tT3N9/wAI54mvWlluZS1neTtyXY5MTH3J%2BX67fQD2HwtrNv4v8F6fqbKjpfWw8%2BPqobG2RfoGDCvkfV/B11p/jfWPDtsWN1ZNI9qnVpkUbwBj%2BIx/MPUjHUigD7Voryz4N/Ev/hMNJOk6rKP7bsk5Ynm5jHG/eHRvwPfj1OgAooooAq92/3j/Oiju3%2B8f50hIVSzEADqSeBQAtFFFABUNz/q1/31/nU1Q3P%2BrX/fX%2BdAF9PuClpqfcFOoAKZJ/q2%2BlPpkn%2Brb6UAUrX/AI9x/vN/6EamqG1/49x/vN/6EamoAKKKKACpoP8AUrUNTQf6laAJKzPEOhWfibw/e6NfqTb3cRRiOqnqrDPcEAj3FadFAHhHgrxpP8LNRm8D%2BNjJHaQuXsL8IWTyyfbkoTkg8lSSD04i8YeMPDPjLxbYXOk2iavdaFMGa2kgEi6lbMP3wiRh8zp1AP8AtMM4r2HxN4S0Txfp32HWrJLiNTmN87XjPqrDkfyPfNcd4R%2BCmheEPFEWuW1/fXMkCsII5yuELAqSSoGeCR%2BNAFDxL8NdRb%2B1YvDcdtHp928Wp2kDYT7JfxkcquAArpkH0OO1em6ZY21rbiaLTbexnnVXnSKNQd2OhK8HBJGeavUUAeWfDsJonxP8d%2BHGxuluE1KEkcsknLfUAyKPzrl/hV4Q0q48Y%2BK7Txfawaj4jtrjc0d5GHVkYkmVUPB3Eg5xwCuMZ59p/sDS/wDhIRrwtEXVPJNubhSQWjJB2kZweg6jIxXMePvBV3rMtt4g8OXIsfE%2Bnj/R5%2Bizp3ifsQcnGeOSDwaAMT4veFLK2%2BEV9baPYx28NncJeiCBcKPmw5A7DDMePSmWnjzwf4m%2BGMWlav4gsra7u9MFvcLI%2BGjl2bScH0YZH4VR0f4panqmtW/g7xt4TawfUd9nLOSyo5ZSMBGU5DHjIYjnNcf8KvBXhfWPEPiTwt4i01Lu902djDMJpI2Kq5jfhWHAIU/8CNAG9%2Bzp4kzBqnha4kBaBvtVthsgqSFcD2B2n/gRrI%2BOSSeGvifoPie1GHaOOXA43PC/OfqpQVB4r0iz%2BD/xc0HVdJR4NInAZ4zIz4XOyVcnk/KQwznk%2B1a37TOwp4YP8RN1j6fuqAMP4oeGbrwB4usfG/hnMNjdSidCo%2BWGYjJUj%2B44zx/vDpive/Bfiuz8Z%2BF7XWbTCmQbJ4s5MMoxuQ/nkeoIPevErH4VfEHxjoOny6r4sjGl3FtFLFbvPK%2B1SoKgx4C5Ax3NZ3wW8QXXg74iXXhXUyY4r2U2siMeI7lCQpH15X3yvpQB9PUUUUAVe7f7x/nWJqMUOtXd5ot3ujhihguVdJCjMd756fwjYv5/Q1t92/3j/OqGp6Ra6rEBMrLKqssc0bsjpuHIypBIPGR0OKAINM8611W900yzTW8UUU0LzMXZN5cFCx5bGzIJJPzdela1QWNothYW9okkkiwxhA8rbmOB1JqegAqG5/1a/wC%2Bv86mqG5/1a/76/zoAvJ9wU6mp9wU6gApkn%2Brb6U%2BmSf6tvpQBStf%2BPcf7zf%2BhGpqhtf%2BPcf7zf8AoRqagAooooAKmg/1K1DTo5tiBTG5x6Y/xoAsUVD9o/6ZP%2Bn%2BNH2j/pk/6f40ATUVD9o/6ZP%2Bn%2BNH2j/pk/6f40ATUVD9o/6ZP%2Bn%2BNH2j/pk/6f40ATUVD9o/6ZP%2Bn%2BNH2j/pk/6f40ATVlW3hnRLPXJdatdMtoNSmVlluIk2tIGILbsdSSAcnmr/ANo/6ZP%2Bn%2BNH2j/pk/6f40Act48%2BHWk/ECGyTU7i7gazZzE9syg/NjIO5T/dFUvGfwt07xvBpMV/qV7ENNiaNDFsy%2BQuS2R1%2BUdK7b7R/wBMn/T/ABo%2B0f8ATJ/0/wAaAG2FnHp2nWtjDnyraFIUz12qAB/Ksk%2BCvDLa5NrUmiWUupSyLK1xLHvYOoADLuyFIwORjnnrWx9o/wCmT/p/jR9o/wCmT/p/jQBNRUP2j/pk/wCn%2BNH2j/pk/wCn%2BNAEfdv94/zrjfE3jldK1CTR7S3kN8HjUyuB5ahgDkc5Jwe4A/r2I5ySMZJOD9aztV0LT9YgKXMCeZuDrMqgOrDoQf0x6UAUNJ1WSXWprUyyS20zXJi80DdE8MoR0yOqncpXPI5BNdDWdZaULa/nvZZRLNJuWMLGESKMsWKqB3J5ZjyxHbpWjQAVDc/6tf8AfX%2BdTVDc/wCrX/fX%2BdAF5PuCnU1PuCnUAFMk/wBW30p9Mk/1bfSgCla/8e4/3m/9CNTVDa/8e4/3m/8AQjU1ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUNz/q1/wB9f51NUNz/AKtf99f50AXk%2B4KdSJ9wUtABTJP9W30p9Mk/1bfSgCla/wDHuP8Aeb/0I1NUNr/x7j/eb/0I1NQAUUUUAFFFFABRTfMQHBdcj3pPNj/vr%2BdAD6ydUsXudS0uRJLtFEzCUw3EiIF8qQjcqsARu29RzwK0/Nj/AL6/nQZIyMF0IPuKAOPt9d1q4ks96skswkKwRW29WMckUTbmGdqMfNYNkfKy%2BhBsLc%2BIrvw7rhlWS3vVtWNssMbeYk218qu6MBhkIARv7/McjHTL5CBQnlKEXaoXA2j0HoOBTvNj/vr%2BdAHKT3HiCzWQ2aTzxzPM/wC9hO6JRcRgEYUnJjeRgCp%2B4MLwQbt3d6%2Bmnaa9tAktzMhWYCI7VYAOGO7aVBVHTkfekTjit7zY/wC%2Bv50ebH/fX86AOVutS8SLbSyQW0ouvs7yRQG13JgwM65YfxiXam3PIHT5twvWx1FvEyR3El08MIkUEwbYmXam1t4GCxO/jPHoMZO55sf99fzo82P%2B%2Bv50AcZLqGuz3CvJHqEEUM28PFZO7gmOcFCuzDKGEXTcPm%2B%2Bcgi82peIIzLK1nK7wo0s1qlvlcKyELE/G93TzOMnDYHy4%2BbpfNj/AL6/nR5sf99fzoAwdLudeOtvbaikYgSJcsiNtc7EJZTs2/fLjBfOAPl7noaZ5sf99fzo82P%2B%2Bv50APopnmx/31/OjzY/76/nQA%2BiiigAooooAKhuf9Wv%2B%2Bv86mqG5/1a/wC%2Bv86ALyfcFOpqfcFOoAKZJ/q2%2BlPpkn%2Brb6UAUrX/AI9x/vN/6EamqG1/49x/vN/6EamoAKKKKACiiigCW3/1X/Am/malqvDNEkZDSIDubgsPWpPtEP8Az2j/AO%2BhQBJRUf2iH/ntH/30KPtEP/PaP/voUASUVH9oh/57R/8AfQo%2B0Q/89o/%2B%2BhQBJRUf2iH/AJ7R/wDfQo%2B0Q/8APaP/AL6FAElFR/aIf%2Be0f/fQo%2B0Q/wDPaP8A76FAElFR/aIf%2Be0f/fQo%2B0Q/89o/%2B%2BhQBJRUf2iH/ntH/wB9Cj7RD/z2j/76FAElR3H/AB7S/wC4f5UfaIf%2Be0f/AH0KjnniNvIBKhJQ4AYelADaKKKACiiigAqG5/1a/wC%2Bv86mqG5/1a/76/zoAvJ9wU6mp9wU6gApkn%2Brb6U%2BmSf6tvpQBStf%2BPcf7zf%2BhGpqhtf%2BPcf7zf8AoRqagAooooAKKKKACiiigAooooAUDJx615f/AML78G/889W/8BR/8VXqC/fX618MnrQB9Lf8L78G/wDPPVv/AAFH/wAVR/wvvwb/AM89W/8AAUf/ABVeD%2BENNtNa1qTSLlFM17ayxWUjSFBHc7d0ZJB6Ert5yPn6V3A%2BH3hfWJjc6fqc8FrJqQso0h3SIirLHCdzFWAdwWlG5hwQApGSAD0D/hffg3/nnq3/AICj/wCKo/4X34N/556t/wCAo/8Aiq830/RvBzeHftdxBLHDc21si3Uzr5kCS3lxG0pHK7wsa8joBgY5J4jxNpEWga9NpKT%2BfLapGly4IKifYDIq4H3VYleeeDQB78fj34MAz5erf%2BAo/wDiq9RIwcelfC8n%2Brb6Gvuhvvt9aAEooooAKKKKACiiigAooooAKhuf9Wv%2B%2Bv8AOpqhuf8AVr/vr/OgC8n3BTqan3BTqACmSf6tvpT6RhuUj1oAoWv/AB7j/eb/ANCNTVXEV1CNiBCuSRkHuc%2BtL/pn92L8j/jQBPRUH%2Bmf3YvyP%2BNH%2Bmf3YvyP%2BNAE9FQf6Z/di/I/40f6Z/di/I/40AT0VB/pn92L8j/jR/pn92L8j/jQBPRUH%2Bmf3YvyP%2BNH%2Bmf3YvyP%2BNAFgHDA%2BhrwH/hnfUP%2Bhltf/ARv/iq92/0z%2B7F%2BR/xo/wBM/uxfkf8AGgDwk/s7X5GD4ktCP%2BvRv/iqQ/s6Xx6%2BI7M4/wCnNv8A4qvd/wDTP7sX5H/Gj/TP7sX5H/GgDw22/Z%2B1Wzu4bq38T2kc8LiSNxZklWByDy3tSTfs%2B6rcTyTz%2BKbeWaVzJJI9q5Z2JySTu5JJzXuf%2Bmf3YvyP%2BNH%2Bmf3YvyP%2BNAHhJ/Z11AqQfEtryMf8ejf/ABVe/E5Yn1NV/wDTP7sX5H/Gj/TP7sX5H/GgCeioP9M/uxfkf8aP9M/uxfkf8aAJ6Kg/0z%2B7F%2BR/xo/0z%2B7F%2BR/xoAnoqD/TP7sX5H/Gj/TP7sX5H/GgCeioP9M/uxfkf8aP9M/uxfkf8aAJ6huf9Wv%2B%2Bv8AOk/0z%2B7F%2BR/xo8q5lKrIEChgeAe340AaCfcFLSAYAFLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k%3D" alt="" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Image-based CAPTCHA&lt;/strong&gt;, in image-based CAPTCHAs, the user must recognise and correctly interact with the image to be granted access. These image challenges are visually compelling and proving challenging for automated scripts, as a result of the complex image recognition capabilities they require, which are often outside the capabilities of automated scripts&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to solve ReCaptcha with CapSolver
&lt;/h2&gt;

&lt;p&gt;As web scraping scenarios become more prevalent, today's CAPTCHA solutions leverage machine learning and artificial intelligence to identify and effectively bypass CAPTCHA challenges, and CapSolver is currently the most effective and affordable solution on the market!&lt;/p&gt;

&lt;p&gt;To solve CAPTCHA problems with CapSolver, sign up for a &lt;a href="https://dashboard.capsolver.com/dashboard/overview"&gt;free trial&lt;/a&gt;. And here's how to use CapSolver to solve the different types of CAPTCHAs we've summarised above.&lt;/p&gt;

&lt;p&gt;Take Recaptcha V2 as example&lt;br&gt;
To solve reCaptcha v2, follow our &lt;a href="https://docs.capsolver.com/guide/captcha/ReCaptchaV2.html"&gt;documentation&lt;/a&gt;. &lt;strong&gt;Some parameters are required and some are optional&lt;/strong&gt;. For this example, we will only use the required parameters. The task types for reCAPTCHA v2 are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ReCaptchaV2Task&lt;/code&gt;: This task type requires your own proxies.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ReCaptchaV2TaskProxyLess&lt;/code&gt;: This task type uses the server's built-in proxy.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ReCaptchaV2EnterpriseTask&lt;/code&gt;: This task type requires your own proxies.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ReCaptchaV2EnterpriseTaskProxyLess&lt;/code&gt;: This task type uses the server's built-in proxy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this example, we will use &lt;strong&gt;ReCaptchaV2TaskProxyLess&lt;/strong&gt; as the site uses standard reCAPTCHA v2. If the site uses Recaptcha Enterprise, you will need to send the correct task type (ReCaptchaV2EnterpriseTaskProxyLess or ReCaptchaV2EnterpriseTask) and ensure all required parameters are included. &lt;br&gt;
If any parameters are missing, you will likely encounter issues with the token not being accepted by the website. You can find all the parameters in this picture:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tEUZ6-re--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-05-11/37c208b9-4953-419b-8e08-7859c2f16b10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tEUZ6-re--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-05-11/37c208b9-4953-419b-8e08-7859c2f16b10.png" alt="" width="694" height="581"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For get the captcha solved, first you need to submit all the information needed, for this we use the method &lt;code&gt;createTask&lt;/code&gt;:&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Submitting the information to CapSolver
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;POST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;https://api.capsolver.com/createTask&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"clientKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"task"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ReCaptchaV2TaskProxyless"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"websiteURL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"site url"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"websiteKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"site key"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 2: Getting the results
&lt;/h3&gt;

&lt;p&gt;To verify the results, you'll need to continuously poll the &lt;code&gt;getTaskResult&lt;/code&gt; API endpoint until the captcha is resolved. &lt;/p&gt;

&lt;p&gt;Here's an example request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;POST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;https://api.capsolver.com/getTaskResult&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Host:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;api.capsolver.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Content-Type:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;application/json&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"clientKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"taskId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TASKID_OF_CREATETASK"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;created&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;createTask&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;method&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

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

&lt;/div&gt;



&lt;p&gt;Once the captcha is successfully resolved, you'll receive a response similar to the one depicted in the following image:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TwvYsFU2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-05-11/fdffaba0-88e1-4bfa-b924-921bd5c87c85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TwvYsFU2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2023-05-11/fdffaba0-88e1-4bfa-b924-921bd5c87c85.png" alt="" width="646" height="153"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How to solve Funcaptcha with CapSolver
&lt;/h2&gt;

&lt;p&gt;To solve FunCaptcha, the first step involves creating a task with the createTask method. This requires you to provide certain details like the type of task, the URL of the website using FunCaptcha, the public domain key, and more. Here's an overview of the task object structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FunCaptchaTask"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"websiteURL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"URL of the website using FunCaptcha"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"websitePublicKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Public domain key"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"funcaptchaApiJSSubdomain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A special subdomain of funcaptcha.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Additional parameter that may be required by FunCaptcha"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"proxy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Proxy details"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"userAgent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Browser's User-Agent used in emulation"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

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

&lt;/div&gt;



&lt;p&gt;You can send a POST request to create a task using the CapSolver API like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"clientKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"task"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FunCaptchaTask"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"websiteURL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"https://funcaptcha.com/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"websitePublicKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"00000000-0000-0000-0000-000000000000"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"proxy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Your_own_proxy"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

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

&lt;/div&gt;



&lt;p&gt;Once you've submitted the task, you should receive a 'Task ID' in the response if it's successful&lt;/p&gt;

&lt;h3&gt;
  
  
  Retrieving the result of the task
&lt;/h3&gt;

&lt;p&gt;After you've created the task, you can retrieve the result using the getTaskResult method. Depending on the system load, the results can be obtained within an interval of 1 to 20 seconds.&lt;/p&gt;

&lt;p&gt;Here's an example of a POST request to get the task result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;POST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;https://api.capsolver.com/getTaskResult&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Host:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;api.capsolver.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Content-Type:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;application/json&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"clientKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"taskId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Task ID received from the createTask method"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the task status is ready, you should receive the result of the FunCaptcha challenge in the response&lt;/p&gt;

&lt;h2&gt;
  
  
  How to solve hcaptcha with CapSolver
&lt;/h2&gt;

&lt;p&gt;To solve hCaptcha, the first step involves creating a task with the &lt;code&gt;createTask&lt;/code&gt; method. This requires you to provide certain details like the type of task, the URL of the website using hCaptcha, the public domain key, and more. Here's an overview of the task object structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HCaptchaTask"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"websiteURL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"URL of the website using hCaptcha"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"websiteKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Public domain key"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"isInvisible"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Boolean value indicating if it's an invisible captcha"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"proxy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Proxy details"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"enableIPV6"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Boolean value indicating if your proxy is ipv6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"userAgent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Browser's User-Agent used in emulation"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can send a POST request to create a task using the Capsolver API like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"clientKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"task"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HCaptchaTask"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"websiteURL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"websiteKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"proxy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Your_own_proxy"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you've submitted the task, you should receive a 'Task ID' in the response if it's successful&lt;/p&gt;

&lt;h3&gt;
  
  
  Retrieving the result of the task
&lt;/h3&gt;

&lt;p&gt;After you've created the task, you can retrieve the result using the getTaskResult method. Depending on the system load, the results can be obtained within an interval of 1 to 10 seconds.&lt;/p&gt;

&lt;p&gt;Here's an example of a POST request to get the task result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;POST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;https://api.capsolver.com/getTaskResult&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Host:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;api.capsolver.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Content-Type:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;application/json&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"clientKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"taskId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Task ID received from the createTask method"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the task status is ready, you should receive the result of the hCaptcha challenge in the response.&lt;/p&gt;

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

&lt;p&gt;The advent of CapSolver has redefined automated data access and collection. In this article, a number of different CAPTCHAs including recaptcha, funcaptcha, hcaptcha, etc. are presented along with steps on how CapSolver can circumvent these captchas. Whilst CapSolver can potentially provide a way to automate CAPTCHA resolution, it is critical to be aware of the ethnic and legislative implications of its use and to ensure that it is used in a responsible and non-malicious manner.&lt;/p&gt;

</description>
      <category>captcha</category>
      <category>captchasolving</category>
      <category>captchasolver</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Use AI for Web Scraping and Solving Captcha</title>
      <dc:creator>Lustove</dc:creator>
      <pubDate>Tue, 26 Mar 2024 08:26:09 +0000</pubDate>
      <link>https://dev.to/lustove/how-to-use-ai-for-web-scraping-and-solving-captcha-1f2n</link>
      <guid>https://dev.to/lustove/how-to-use-ai-for-web-scraping-and-solving-captcha-1f2n</guid>
      <description>&lt;p&gt;Web scraping is a powerful technique for extracting data from websites. However, traditional web scraping methods have limitations in adapting to dynamic websites, dealing with complex structures, and solving CAPTCHAs. Artificial Intelligence (AI) can revolutionise web scraping techniques by using machine learning techniques to overcome these challenges. In this paper, we will explore how AI can be utilised for web scraping and effectively solve the most vexing CAPTCHA problem.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eTe7iyuj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-26/75928959-f7ae-4a67-b1f6-708ff78a7674.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eTe7iyuj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.capsolver.com/prod/images/post/2024-03-26/75928959-f7ae-4a67-b1f6-708ff78a7674.png" alt="" width="486" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Limitations of Conventional Web Scraping:
&lt;/h2&gt;

&lt;p&gt;Conventional web scraping is incredibly useful. Without it, you would have to rely on manual and time-consuming practices, such as manually copying and pasting data from the internet. However, despite its usefulness, conventional web scraping also has certain limitations.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inability to Adapt to Dynamic Websites:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Dynamic websites use AJAX to update their content without reloading the entire page. This poses a challenge for conventional web scrapers as they rely on downloading the HTML from an HTTP request, which doesn't capture dynamically updated content. Consequently, scraping dynamic websites becomes difficult without the ability to process JavaScript.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inability to Handle Complex Website Structures or Frequent Changes:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Websites often have complex structures that differ from one another, requiring custom code for each scraping task. Additionally, websites frequently change their structure, rendering existing scrapers ineffective. Even minor changes to a website's structure can break a scraper, necessitating frequent updates.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lower Accuracy in Data Extraction:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Accurate and reliable data is crucial for effective scraping. Conventional web scrapers may struggle to ensure data accuracy due to their dependence on specific website structures. Any changes to the structure can affect data extraction accuracy or break the scraper entirely. Additionally, validating and verifying the reliability of the extracted data can be challenging.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Limited Scalability and Flexibility:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Conventional web scraping is well-suited for small-scale operations. However, when dealing with large amounts of data or multiple websites, scalability becomes an issue. Adapting and managing scrapers for a larger scale can be complex and time-consuming.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ineffectiveness with Advanced Antiscraping Technologies:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Websites employ various antiscraping measures, such as IP blocking, CAPTCHAs, rate limits, and honeypot traps, to prevent unauthorized scraping. Conventional web scraping tools often lack the capabilities to handle these advanced antiscraping technologies effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI-Powered Web Scraping:
&lt;/h2&gt;

&lt;p&gt;AI web scraping utilizes machine learning algorithms to extract data from websites more effectively and accurately. Here's how to leverage AI for web scraping:&lt;/p&gt;

&lt;p&gt;a. Dynamic Content Adaptation:&lt;br&gt;
AI scrapers can analyze the document object model (DOM) of a web page and autonomously identify its structure. By leveraging deep learning models, such as convolutional neural networks, AI scrapers can analyze the visual representation of the web page, enabling them to adapt to dynamic content.&lt;/p&gt;

&lt;p&gt;b. Handling Complex and Changing Website Structures:&lt;br&gt;
AI scrapers excel at handling complex website structures and frequent changes. They can dynamically adjust their scraping logic based on the analyzed DOM, ensuring accurate data extraction even when the structure evolves.&lt;/p&gt;

&lt;p&gt;c. Enhanced Scalability:&lt;br&gt;
AI-powered web scraping enables automation and scalability, making it suitable for large-scale data extraction. ML-driven automation allows for efficient scraping of massive amounts of data from multiple sources or websites, facilitating tasks like training machine learning models.&lt;/p&gt;

&lt;p&gt;d. Overcoming Antiscraping Technologies:&lt;br&gt;
AI scrapers can mimic human behavior by simulating browsing speed, click patterns, and mouse movements. Additionally, proxies can be utilized to rotate IP addresses, bypassing IP blocking and CAPTCHA challenges. Services like Bright Data offer rotating proxies for secure and undetectable scraping.&lt;/p&gt;

&lt;p&gt;e. Efficiency and Speed:&lt;br&gt;
AI accelerates the web scraping process by enabling concurrent extraction from multiple websites. With AI, you can achieve faster and more accurate data collection, boosting efficiency in data analysis and decision-making.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI-Powered Captcha Solving:
&lt;/h2&gt;

&lt;p&gt;Captcha challenges can impede web scraping progress. AI techniques can also be applied to solve captchas effectively. Consider the following approaches:&lt;/p&gt;

&lt;p&gt;a. Machine Learning-based Captcha Solvers:&lt;br&gt;
Train machine learning models, such as deep neural networks, to recognize and solve captchas. This approach requires a labeled dataset of captchas and their corresponding solutions for training.&lt;/p&gt;

&lt;p&gt;b. Third-Party CAPTCHA Solving APIs:&lt;br&gt;
Integrate third-party CAPTCHA solving services like &lt;a href="https://www.capsolver.com/"&gt;CapSolver&lt;/a&gt; into your scraping workflow. Such services employ AI algorithms to automatically solve captchas, providing a seamless experience for web scraping.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices for AI Web Scraping and Captcha Solving:
&lt;/h2&gt;

&lt;p&gt;To ensure successful implementation, consider the following best practices:&lt;/p&gt;

&lt;p&gt;a. Respect Website Policies:&lt;br&gt;
Adhere to website terms of service and scraping policies to maintain ethical and legal practices.&lt;/p&gt;

&lt;p&gt;b. Regularly Update AI Models:&lt;br&gt;
Continuously update and retrain AI models to adapt to evolving website structures and new captcha patterns.&lt;/p&gt;

&lt;p&gt;c. Monitor and Evaluate Results:&lt;br&gt;
Regularly monitor the performance of your AI scraping and captcha solving solutions. Evaluate the accuracy of extracted data and captcha-solving success rates to identify areas for improvement.&lt;/p&gt;

&lt;p&gt;d. Handle Failed Captcha Solving:&lt;br&gt;
Implement fallback mechanisms for cases when captcha-solving fails. These mechanisms may include manual intervention or temporarily pausing scraping until captchas can be solved manually.&lt;/p&gt;

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

&lt;p&gt;By harnessing the power of AI, web scraping becomes more efficient, accurate, and adaptable. AI-powered scrapers can handle dynamic websites, complex structures, and advanced antiscraping technologies, providing a scalable solution for data extraction. Additionally, AI can be utilized to solve captchas, overcoming another obstacle in the web scraping process. Incorporate AI techniques into your web scraping workflow to unlock the full potential of data collection and analysis for improved business insights and decision-making.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>captcha</category>
      <category>webscraping</category>
    </item>
    <item>
      <title>Top 5 Web Scraping Use Cases in 2024</title>
      <dc:creator>Lustove</dc:creator>
      <pubDate>Tue, 26 Mar 2024 08:23:50 +0000</pubDate>
      <link>https://dev.to/lustove/top-5-web-scraping-use-cases-in-2024-192a</link>
      <guid>https://dev.to/lustove/top-5-web-scraping-use-cases-in-2024-192a</guid>
      <description>&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%2Fubc5nwomi6nx7nglk3qi.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%2Fubc5nwomi6nx7nglk3qi.png" alt="Image description" width="486" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Web scraping continues to be a powerful tool for businesses across different industries, providing valuable data and insights that drive informed decision-making. In 2024, web scraping has evolved to address various needs, and here are the top five use cases:&lt;/p&gt;

&lt;h2&gt;
  
  
  Lead Generation and Sales Prospecting:
&lt;/h2&gt;

&lt;p&gt;Web scraping plays a vital role in lead generation and sales prospecting by extracting relevant data from websites, directories, and social media platforms. By automating the data extraction process, businesses can gather contact information, company details, and other relevant data about potential leads. This data can be used to create targeted marketing campaigns, identify qualified leads, and improve sales conversion rates. Web scraping tools enable businesses to streamline their lead generation process and focus their efforts on promising prospects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Competitor Analysis:
&lt;/h2&gt;

&lt;p&gt;Understanding competitor strategies, product offerings, and market positioning is crucial for businesses aiming to gain a competitive edge. Web scraping allows businesses to extract data from competitor websites, social media profiles, and industry-specific platforms. By analyzing this data, businesses can gain insights into competitor pricing, product features, marketing campaigns, and customer engagement strategies. This information helps in benchmarking against competitors, identifying market opportunities, and refining business strategies.&lt;/p&gt;

&lt;h2&gt;
  
  
  E-commerce Price Monitoring and Optimization:
&lt;/h2&gt;

&lt;p&gt;For e-commerce businesses, monitoring product prices across multiple online platforms is critical to staying competitive. Web scraping can automatically collect price data from different websites, including competitors. But it often gets bogged down in the hassle of solving captchas, which can often be the most critical aspect in the daily workflow. So here it is actually recommended that by integrating &lt;a href="https://www.capsolver.com/"&gt;Capsolver&lt;/a&gt;, you can solve the CAPTCHA challenges encountered during price monitoring and ensure uninterrupted data extraction. This data can be used to optimise pricing strategies, identify pricing trends and adjust prices in real time to maximise sales and profits.With a strong price/performance ratio and the lowest prices on the market, Capsolver is a modern CAPTCHA solution service. Users can also earn money back through their referral system. Their API is simple to use and supports multiple CAPTCHA types. A free trial is &lt;a href="https://t.me/capsolver_trial_bot"&gt;currently available&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Training Machine Learning Models**
&lt;/h2&gt;

&lt;p&gt;Amassing a vast corpus of relevant data, whether textual or visual, is crucial for training effective machine learning models. Web scraping presents an opportunity to gather such data from topical websites across various domains, including scientific publications, news outlets, and social media platforms – any source that aligns with your specific requirements.&lt;/p&gt;

&lt;p&gt;If your model focuses on animal image recognition, acquiring a massive collection of pictures becomes imperative. While searching on image search engines like Google Images is an option, it may not provide the scale necessary for robust model training. Web scraping, on the other hand, enables you to aggregate data at a much larger scale. Moreover, you can leverage the descriptive captions or labels often accompanying images to facilitate supervised learning. These captions frequently mention the animals depicted, providing valuable annotated data.&lt;/p&gt;

&lt;p&gt;By scraping multiple sources, you can amass thousands of labeled images, enabling your model to learn from a diverse and comprehensive dataset. Furthermore, the advantages extend beyond the initial data collection. Through periodic scraping, you can establish a continuous stream of up-to-date knowledge. For instance, you could regularly scrape nature magazines to extract new images and captions, continuously expanding and enriching your dataset.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sentiment Analysis and Brand Reputation Management
&lt;/h2&gt;

&lt;p&gt;Building upon the previous point, web scraping can be instrumental in monitoring your brand's reputation or that of your competitors by enabling sentiment analysis on public discourse. This approach can uncover valuable insights from both internal and external perspectives.&lt;/p&gt;

&lt;p&gt;Internally, sentiment analysis on scraped data can reveal customer complaints or issues that may have gone unnoticed by your customer support channels. Often, dissatisfied customers vent their frustrations on social media platforms like Twitter without directly reaching out to your company. By monitoring such conversations, you gain the opportunity to address these concerns proactively, resolve issues, and prevent similar occurrences in the future.&lt;/p&gt;

&lt;p&gt;Externally, monitoring your competitors' brand sentiment can provide you with a strategic advantage. By detecting potential issues or customer dissatisfaction with your competitors' products early on, you can swiftly adapt and position your offering as a superior alternative. Additionally, you can learn from their missteps and preemptively address similar concerns before they manifest in your own products or services.&lt;/p&gt;

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

&lt;p&gt;In conclusion, the top web scraping use cases in 2024 encompass lead generation and sales prospecting, competitor analysis, e-commerce price monitoring and optimization with the help of solutions like Capsolver, training machine learning models, and sentiment analysis for brand reputation management. These applications highlight the importance of web scraping in gathering valuable data, gaining insights, and making informed decisions across various industries. As technology continues to advance, web scraping will continue to play a crucial role in extracting actionable information and driving business success.&lt;/p&gt;

</description>
      <category>web</category>
      <category>webscraping</category>
      <category>scraping</category>
      <category>captcha</category>
    </item>
  </channel>
</rss>
