{"id":3069,"date":"2026-05-31T20:09:02","date_gmt":"2026-05-31T20:09:02","guid":{"rendered":"https:\/\/deathbycaptcha.com\/blog\/?p=3069"},"modified":"2026-05-31T20:17:18","modified_gmt":"2026-05-31T20:17:18","slug":"how-to-solve-recaptcha-v2-invisible-with-node-js-and-death-by-captcha","status":"publish","type":"post","link":"https:\/\/deathbycaptcha.com\/blog\/usage-best-practices\/how-to-solve-recaptcha-v2-invisible-with-node-js-and-death-by-captcha","title":{"rendered":"How to solve reCAPTCHA v2 (invisible) with Node.js and Death By Captcha"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">CAPTCHAs, while effective against bots, can unintentionally exclude people with disabilities, technical limitations, making web access less equitable.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">ReCAPTCHA v2 invisible:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Invisible reCAPTCHA v2 is a version of Google&#8217;s reCAPTCHA that helps websites distinguish humans from bots without always showing the traditional &#8220;I&#8217;m not a robot&#8221; checkbox.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Key characteristics:<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>No visible checkbox by default<\/strong> unlike standard reCAPTCHA v2.<\/li>\n\n\n\n<li>Displays a small reCAPTCHA badge on the page indicating protection by Google.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Why people may want to bypass it:<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Accessibility challenges<\/strong>\n<ul class=\"wp-block-list\">\n<li>Some users with visual, cognitive, or motor impairments may find CAPTCHA challenges difficult to complete. Although it is designed to reduce user interaction, it can still create accessibility challenges in some situations.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Automated testing<\/strong>\n<ul class=\"wp-block-list\">\n<li>Developers testing websites or applications often need to automate form submissions and may want to avoid CAPTCHA interruptions in test environments.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Internal business automation<\/strong>\n<ul class=\"wp-block-list\">\n<li>Organizations may automate workflows (such as processing forms or syncing data) on systems they own and need a way to avoid triggering anti-bot checks.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>False positives<\/strong>\n<ul class=\"wp-block-list\">\n<li>Legitimate users may repeatedly receive challenges because they use VPNs, privacy tools, unusual network configurations, or shared IP addresses.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">We encourage our users to always use Death By Captcha ethically.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Why Node.js?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js was selected for the examples in this guide due to its accessibility, ease of setup, and widespread adoption within the developer community. The examples presented throughout this documentation are intended to be easy to understand, quick to implement, and readily adaptable to other programming languages if required.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Typical Integration Flow<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Make request to solve the captcha.<\/li>\n\n\n\n<li>API returns the captcha ID.<\/li>\n\n\n\n<li>Poll API with the captcha ID every ~5 seconds for the token.<\/li>\n\n\n\n<li>API returns an object (URL encoded) with the token.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Security Considerations<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">DBC uses the username and password for API authentication. However, you can use <code>authtoken<\/code> (2FA) as well if preferred rather than the username and password combination.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Environment setup<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">Creating the app:<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Run <code><mark style=\"background-color:#000000\" class=\"has-inline-color has-white-color\">npm init -y<\/mark><\/code> in the folder where your project will live or <mark style=\"background-color:#000000\" class=\"has-inline-color has-white-color\">npm init<\/mark> if you desire to add additional information about the project, just make sure to have <code>index.js<\/code> as your app entry point and <code>module<\/code> as your type.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And since we are touching on this matter, we can as well add the run script to the package.json:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#abb2bf33\" stroke=\"#abb2bf4d\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#abb2bf33\" stroke=\"#abb2bf4d\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#abb2bf33\" stroke=\"#abb2bf4d\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #98C379\">&quot;scripts&quot;<\/span><span style=\"color: #ABB2BF\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E06C75\">&quot;start&quot;<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;node index.js&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282c34;color:#9da5b4;font-size:12px;line-height:1;position:relative\">JSON<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Setting up .env:<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h5 class=\"wp-block-heading\">a) Required lib:<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Install <code>dotenv<\/code> in your project.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#282c34;display:none;background-color:#abb2bf\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>npm install dotenv<\/textarea><\/pre><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #61AFEF\">npm<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">install<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">dotenv<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282c34;color:#9da5b4;font-size:12px;line-height:1;position:relative\">Bash<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h6 class=\"wp-block-heading\">b) Create .env file:<\/h6>\n\n\n\n<p class=\"wp-block-paragraph\">Create your <code>.env<\/code> file to protect your secrets. In this guide we will store authentication\/proxy values only in <code>.env<\/code>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Note:<\/strong> With Death By Captcha you can either use username and password to authenticate or authtoken, NOT BOTH.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#282c34;display:none;background-color:#abb2bf\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># ---------------------\n# DBC AUTHENTICATION\n# ---------------------\nDBC_USERNAME=your_username\nDBC_PASSWORD=your_password\n# DBC_AUTHTOKEN=your_authtoken\n\n\n# ---------------------\n# PROXY\n# ---------------------\nPROXY_URL=http:\/\/user:password@127.0.0.1:3128<\/textarea><\/pre><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># ---------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># DBC AUTHENTICATION<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># ---------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E06C75\">DBC_USERNAME<\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #98C379\">your_username<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E06C75\">DBC_PASSWORD<\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #98C379\">your_password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># DBC_AUTHTOKEN=your_authtoken<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># ---------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># PROXY<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># ---------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E06C75\">PROXY_URL<\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #98C379\">http:\/\/user:password@127.0.0.1:3128<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282c34;color:#9da5b4;font-size:12px;line-height:1;position:relative\">Bash<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h6 class=\"wp-block-heading\">c) Create <code>index.js<\/code> file:<\/h6>\n\n\n\n<p class=\"wp-block-paragraph\">Create your <code>index.js<\/code> file and initiate `dotenv.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#282c34;display:none;background-color:#abb2bf\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import dotenv from \"dotenv\";\n\ndotenv.config();<\/textarea><\/pre><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">dotenv<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">from<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;dotenv&quot;<\/span><span style=\"color: #ABB2BF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E5C07B\">dotenv<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">config<\/span><span style=\"color: #ABB2BF\">();<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282c34;color:#9da5b4;font-size:12px;line-height:1;position:relative\">JavaScript<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The implementation logic<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">We will keep all the code in <code>index.js<\/code> for simplicity purposes. <\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Stage 1: Set up request\/payload data<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Here we define and initialize the necessary variables for the fetch operation.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#282c34;display:none;background-color:#abb2bf\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>const API_URL = \"http:\/\/api.dbcapi.me\/api\/captcha\";\nconst CAPTCHA_PARAMS = {\n  proxy: \"process.env.PROXY_URL\", \/\/ leave empty if no proxy\n  proxytype: \"HTTP\",              \/\/ leave empty if no proxy\n  googlekey: \"6LcmDCcUAAAAAL5QmnMvDFnfPTP4iCUYRk2MwC0-\",\n  pageurl: \"https:\/\/recaptcha-demo.appspot.com\/recaptcha-v2-invisible.php\",\n};\nconst TYPE = 4;<\/textarea><\/pre><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">API_URL<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;http:\/\/api.dbcapi.me\/api\/captcha&quot;<\/span><span style=\"color: #ABB2BF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CAPTCHA_PARAMS<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E06C75\">proxy<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;process.env.PROXY_URL&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ leave empty if no proxy<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E06C75\">proxytype<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;HTTP&quot;<\/span><span style=\"color: #ABB2BF\">,              <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ leave empty if no proxy<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E06C75\">googlekey<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;6LcmDCcUAAAAAL5QmnMvDFnfPTP4iCUYRk2MwC0-&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E06C75\">pageurl<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;https:\/\/recaptcha-demo.appspot.com\/recaptcha-v2-invisible.php&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">TYPE<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">;<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282c34;color:#9da5b4;font-size:12px;line-height:1;position:relative\">JavaScript<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Stage 2: Submit captcha to DBC<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">The function <code>submitCaptcha()<\/code> is in charge of making the initial fetch request to get the captcha solved and retrieve the captcha ID which will be required on the next step to poll the token. Here we append all parameters (including the credentials stored in the <code>.env<\/code> file) to the <code>formData<\/code> object which will be used as the body of the request. If the operation succeeds then we extract the ID from the API returned response and finally return it.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#282c34;display:none;background-color:#abb2bf\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>const submitCaptcha = async () => {\n  const formData = new FormData();\n\n  formData.append(\"username\", process.env.DBC_USERNAME);\n  formData.append(\"password\", process.env.DBC_PASSWORD);\n  \/\/ formData.append(\"authtoken\", process.env.DBC_AUTHTOKEN);\n  formData.append(\"type\", TYPE);\n  formData.append(\"token_params\", JSON.stringify(CAPTCHA_PARAMS));\n\n  const response = await fetch(API_URL, {\n    method: \"POST\",\n    body: formData,\n  });\n\n  if (!response.ok) {\n    throw new Error(`Submit failed: ${response.status}`);\n  }\n  const text = await response.text();\n  const params = new URLSearchParams(text);\n\n  return params.get(\"captcha\");\n};<\/textarea><\/pre><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">submitCaptcha<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> () <\/span><span style=\"color: #C678DD\">=&gt;<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">formData<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">new<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">FormData<\/span><span style=\"color: #ABB2BF\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E5C07B\">formData<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">append<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;username&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">process<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E5C07B\">env<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">DBC_USERNAME<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E5C07B\">formData<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">append<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;password&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">process<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E5C07B\">env<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">DBC_PASSWORD<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ formData.append(&quot;authtoken&quot;, process.env.DBC_AUTHTOKEN);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E5C07B\">formData<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">append<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;type&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">TYPE<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E5C07B\">formData<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">append<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;token_params&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">JSON<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">stringify<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E5C07B\">CAPTCHA_PARAMS<\/span><span style=\"color: #ABB2BF\">));<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetch<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E5C07B\">API_URL<\/span><span style=\"color: #ABB2BF\">, {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E06C75\">method<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;POST&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E06C75\">body<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E06C75\">formData<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  });<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #56B6C2\">!<\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">ok<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">new<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Error<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">`Submit failed: <\/span><span style=\"color: #C678DD\">${<\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">status<\/span><span style=\"color: #C678DD\">}<\/span><span style=\"color: #98C379\">`<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">text<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">text<\/span><span style=\"color: #ABB2BF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">params<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">new<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">URLSearchParams<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E06C75\">text<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">params<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">get<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;captcha&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">};<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282c34;color:#9da5b4;font-size:12px;line-height:1;position:relative\">JavaScript<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Stage 3: Fetch for the token<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Since Death By Captcha API needs a few seconds to solve the captcha we need to hit the API more than once. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here we introduce two helpers, the first one is a helper function which will request the response which contains the token:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#282c34;display:none;background-color:#abb2bf\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>const getToken = async (captchaId) => {\n  const response = await fetch(`${API_URL}\/${captchaId}`);\n\n  if (!response.ok) {\n    throw new Error(`Fetch failed: ${response.status}`);\n  }\n\n  return await response.text();\n};<\/textarea><\/pre><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">getToken<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #E06C75; font-style: italic\">captchaId<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">=&gt;<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetch<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">`<\/span><span style=\"color: #C678DD\">${<\/span><span style=\"color: #E5C07B\">API_URL<\/span><span style=\"color: #C678DD\">}<\/span><span style=\"color: #98C379\">\/<\/span><span style=\"color: #C678DD\">${<\/span><span style=\"color: #E06C75\">captchaId<\/span><span style=\"color: #C678DD\">}<\/span><span style=\"color: #98C379\">`<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #56B6C2\">!<\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">ok<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">new<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Error<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">`Fetch failed: <\/span><span style=\"color: #C678DD\">${<\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">status<\/span><span style=\"color: #C678DD\">}<\/span><span style=\"color: #98C379\">`<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">text<\/span><span style=\"color: #ABB2BF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">};<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282c34;color:#9da5b4;font-size:12px;line-height:1;position:relative\">JavaScript<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And second a <code>delay<\/code> variable which you can later reuse in your own implementation if you need to delay something:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#282c34;display:none;background-color:#abb2bf\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));<\/textarea><\/pre><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">delay<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #E06C75; font-style: italic\">ms<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">=&gt;<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">new<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Promise<\/span><span style=\"color: #ABB2BF\">((<\/span><span style=\"color: #E06C75; font-style: italic\">resolve<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">=&gt;<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">setTimeout<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E06C75\">resolve<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">ms<\/span><span style=\"color: #ABB2BF\">));<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282c34;color:#9da5b4;font-size:12px;line-height:1;position:relative\">JavaScript<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Stage 4: Orchestrate captcha solution<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">The function <code>solveCaptcha<\/code>() is in charge of orchestrating the whole solution, calling <code>submitCaptcha()<\/code> and <code>getToken()<\/code>, we submit the captcha once and attempt to get the token every 5 seconds until the final response is received, then we proceed to extract the token and console log it. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#282c34;display:none;background-color:#abb2bf\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>const solveCaptcha = async () => {\n  try {\n    console.log(\"Submitting captcha...\");\n    const captchaId = await submitCaptcha();\n\n    console.log(\"Solving captcha...\");\n    console.log(\"Captcha ID:\", captchaId);\n\n    const maxAttempts = 24; \/\/ 120 seconds timeout\n\n    for (let attempt = 1; attempt &lt;= maxAttempts; attempt++) {\n      console.log(`Waiting 5 seconds before attempt ${attempt}...`);\n      await delay(5000);\n\n      console.log(`Checking result... Attempt ${attempt}`);\n\n      const result = await getToken(captchaId);\n      const params = new URLSearchParams(result);\n      const token = params.get(\"text\");\n\n      if (token.length > 1) return console.log(\"Final response:\", token);\n      else if (token === \"?\") return console.log(\"Empty response.\");\n      console.log(\"Result not ready yet.\");\n    }\n    console.log(\"Timed out waiting for resolution.\");\n  } catch (error) {\n    console.log(error);\n  }\n};<\/textarea><\/pre><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">solveCaptcha<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> () <\/span><span style=\"color: #C678DD\">=&gt;<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Submitting captcha...&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">captchaId<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">submitCaptcha<\/span><span style=\"color: #ABB2BF\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Solving captcha...&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Captcha ID:&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">captchaId<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">maxAttempts<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">24<\/span><span style=\"color: #ABB2BF\">; <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ 120 seconds timeout<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">for<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">attempt<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">; <\/span><span style=\"color: #E06C75\">attempt<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">&lt;=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">maxAttempts<\/span><span style=\"color: #ABB2BF\">; <\/span><span style=\"color: #E06C75\">attempt<\/span><span style=\"color: #56B6C2\">++<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">`Waiting 5 seconds before attempt <\/span><span style=\"color: #C678DD\">${<\/span><span style=\"color: #E06C75\">attempt<\/span><span style=\"color: #C678DD\">}<\/span><span style=\"color: #98C379\">...`<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">delay<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">5000<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">`Checking result... Attempt <\/span><span style=\"color: #C678DD\">${<\/span><span style=\"color: #E06C75\">attempt<\/span><span style=\"color: #C678DD\">}<\/span><span style=\"color: #98C379\">`<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">result<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">getToken<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E06C75\">captchaId<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">params<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">new<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">URLSearchParams<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E06C75\">result<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">token<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">params<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">get<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;text&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #E5C07B\">token<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">length<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">&gt;<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Final response:&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">token<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #E06C75\">token<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">===<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;?&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Empty response.&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Result not ready yet.&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Timed out waiting for resolution.&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  } <\/span><span style=\"color: #C678DD\">catch<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #E06C75\">error<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E06C75\">error<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">};<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282c34;color:#9da5b4;font-size:12px;line-height:1;position:relative\">JavaScript<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finally call the function:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#282c34;display:none;background-color:#abb2bf\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>solveCaptcha();<\/textarea><\/pre><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #61AFEF\">solveCaptcha<\/span><span style=\"color: #ABB2BF\">();<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282c34;color:#9da5b4;font-size:12px;line-height:1;position:relative\">JavaScript<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s it, you have successfully solved reCaptcha v2 automatically. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Article complete code:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>.env<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#282c34;display:none;background-color:#abb2bf\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># ---------------------\n# DBC AUTHENTICATION\n# ---------------------\nDBC_USERNAME=your_username\nDBC_PASSWORD=your_password\n# DBC_AUTHTOKEN=your_authtoken\n\n\n# ---------------------\n# PROXY\n# ---------------------\nPROXY_URL=http:\/\/user:password@127.0.0.1:3128<\/textarea><\/pre><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># ---------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># DBC AUTHENTICATION<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># ---------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E06C75\">DBC_USERNAME<\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #98C379\">your_username<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E06C75\">DBC_PASSWORD<\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #98C379\">your_password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># DBC_AUTHTOKEN=your_authtoken<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># ---------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># PROXY<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\"># ---------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E06C75\">PROXY_URL<\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #98C379\">http:\/\/user:password@127.0.0.1:3128<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282c34;color:#9da5b4;font-size:12px;line-height:1;position:relative\">Bash<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>.index.js<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#282c34;display:none;background-color:#abb2bf\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import dotenv from \"dotenv\";\n\ndotenv.config();\n\nconst USERNAME = process.env.DBC_USERNAME;\nconst PASSWORD = process.env.DBC_PASSWORD;\n\nconst API_URL = \"http:\/\/api.dbcapi.me\/api\/captcha\";\nconst CAPTCHA_PARAMS = {\n  proxy: \"process.env.PROXY_URL\", \/\/ leave empty if no proxy\n  proxytype: \"HTTP\",              \/\/ leave empty if no proxy\n  googlekey: \"6LcmDCcUAAAAAL5QmnMvDFnfPTP4iCUYRk2MwC0-\",\n  pageurl: \"https:\/\/recaptcha-demo.appspot.com\/recaptcha-v2-invisible.php\",\n};\nconst TYPE = 4;\n\nconst submitCaptcha = async () => {\n  const formData = new FormData();\n\n  formData.append(\"username\", USERNAME);\n  formData.append(\"password\", PASSWORD);\n  formData.append(\"type\", TYPE);\n  formData.append(\"token_params\", JSON.stringify(CAPTCHA_PARAMS));\n\n  const response = await fetch(API_URL, {\n    method: \"POST\",\n    body: formData,\n  });\n\n  if (!response.ok) {\n    throw new Error(`Submit failed: ${response.status}`);\n  }\n  const text = await response.text();\n  const params = new URLSearchParams(text);\n\n  return params.get(\"captcha\");\n};\n\nconst getToken = async (captchaId) => {\n  const response = await fetch(`${API_URL}\/${captchaId}`);\n\n  if (!response.ok) {\n    throw new Error(`Fetch failed: ${response.status}`);\n  }\n\n  return await response.text();\n};\n\n\/\/ Sleep helper\nconst delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst solveCaptcha = async () => {\n  try {\n    console.log(\"Submitting captcha...\");\n    const captchaId = await submitCaptcha();\n\n    console.log(\"Solving captcha...\");\n    console.log(\"Captcha ID:\", captchaId);\n\n    const maxAttempts = 24; \/\/ 120 seconds timeout\n\n    for (let attempt = 1; attempt &lt;= maxAttempts; attempt++) {\n      console.log(`Waiting 5 seconds before attempt ${attempt}...`);\n      await delay(5000);\n\n      console.log(`Checking result... Attempt ${attempt}`);\n\n      const result = await getToken(captchaId);\n      const params = new URLSearchParams(result);\n      const token = params.get(\"text\");\n\n      if (token.length > 1) return console.log(\"Final response:\", token);\n      else if (token === \"?\") return console.log(\"Empty response.\");\n      console.log(\"Result not ready yet.\");\n    }\n    console.log(\"Timed out waiting for resolution.\");\n  } catch (error) {\n    console.log(error);\n  }\n};\n\nsolveCaptcha();<\/textarea><\/pre><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">dotenv<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">from<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;dotenv&quot;<\/span><span style=\"color: #ABB2BF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E5C07B\">dotenv<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">config<\/span><span style=\"color: #ABB2BF\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">USERNAME<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">process<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E5C07B\">env<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">DBC_USERNAME<\/span><span style=\"color: #ABB2BF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">PASSWORD<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">process<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E5C07B\">env<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">DBC_PASSWORD<\/span><span style=\"color: #ABB2BF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">API_URL<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;http:\/\/api.dbcapi.me\/api\/captcha&quot;<\/span><span style=\"color: #ABB2BF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CAPTCHA_PARAMS<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E06C75\">proxy<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;process.env.PROXY_URL&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ leave empty if no proxy<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E06C75\">proxytype<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;HTTP&quot;<\/span><span style=\"color: #ABB2BF\">,              <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ leave empty if no proxy<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E06C75\">googlekey<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;6LcmDCcUAAAAAL5QmnMvDFnfPTP4iCUYRk2MwC0-&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E06C75\">pageurl<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;https:\/\/recaptcha-demo.appspot.com\/recaptcha-v2-invisible.php&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">TYPE<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">submitCaptcha<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> () <\/span><span style=\"color: #C678DD\">=&gt;<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">formData<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">new<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">FormData<\/span><span style=\"color: #ABB2BF\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E5C07B\">formData<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">append<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;username&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">USERNAME<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E5C07B\">formData<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">append<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;password&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">PASSWORD<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E5C07B\">formData<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">append<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;type&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">TYPE<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #E5C07B\">formData<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">append<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;token_params&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">JSON<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">stringify<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E5C07B\">CAPTCHA_PARAMS<\/span><span style=\"color: #ABB2BF\">));<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetch<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E5C07B\">API_URL<\/span><span style=\"color: #ABB2BF\">, {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E06C75\">method<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;POST&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E06C75\">body<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E06C75\">formData<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  });<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #56B6C2\">!<\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">ok<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">new<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Error<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">`Submit failed: <\/span><span style=\"color: #C678DD\">${<\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">status<\/span><span style=\"color: #C678DD\">}<\/span><span style=\"color: #98C379\">`<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">text<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">text<\/span><span style=\"color: #ABB2BF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">params<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">new<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">URLSearchParams<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E06C75\">text<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">params<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">get<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;captcha&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">getToken<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #E06C75; font-style: italic\">captchaId<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">=&gt;<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetch<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">`<\/span><span style=\"color: #C678DD\">${<\/span><span style=\"color: #E5C07B\">API_URL<\/span><span style=\"color: #C678DD\">}<\/span><span style=\"color: #98C379\">\/<\/span><span style=\"color: #C678DD\">${<\/span><span style=\"color: #E06C75\">captchaId<\/span><span style=\"color: #C678DD\">}<\/span><span style=\"color: #98C379\">`<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #56B6C2\">!<\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">ok<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">new<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Error<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">`Fetch failed: <\/span><span style=\"color: #C678DD\">${<\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">status<\/span><span style=\"color: #C678DD\">}<\/span><span style=\"color: #98C379\">`<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">response<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">text<\/span><span style=\"color: #ABB2BF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\">\/\/ Sleep helper<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">delay<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #E06C75; font-style: italic\">ms<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">=&gt;<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">new<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Promise<\/span><span style=\"color: #ABB2BF\">((<\/span><span style=\"color: #E06C75; font-style: italic\">resolve<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">=&gt;<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">setTimeout<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E06C75\">resolve<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">ms<\/span><span style=\"color: #ABB2BF\">));<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">solveCaptcha<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> () <\/span><span style=\"color: #C678DD\">=&gt;<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Submitting captcha...&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">captchaId<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">submitCaptcha<\/span><span style=\"color: #ABB2BF\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Solving captcha...&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Captcha ID:&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">captchaId<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">maxAttempts<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">24<\/span><span style=\"color: #ABB2BF\">; <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ 120 seconds timeout<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">for<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">attempt<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">; <\/span><span style=\"color: #E06C75\">attempt<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">&lt;=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">maxAttempts<\/span><span style=\"color: #ABB2BF\">; <\/span><span style=\"color: #E06C75\">attempt<\/span><span style=\"color: #56B6C2\">++<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">`Waiting 5 seconds before attempt <\/span><span style=\"color: #C678DD\">${<\/span><span style=\"color: #E06C75\">attempt<\/span><span style=\"color: #C678DD\">}<\/span><span style=\"color: #98C379\">...`<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">delay<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">5000<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">`Checking result... Attempt <\/span><span style=\"color: #C678DD\">${<\/span><span style=\"color: #E06C75\">attempt<\/span><span style=\"color: #C678DD\">}<\/span><span style=\"color: #98C379\">`<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">result<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">getToken<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E06C75\">captchaId<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">params<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">new<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">URLSearchParams<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E06C75\">result<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">const<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">token<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">params<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">get<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;text&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #E5C07B\">token<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">length<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">&gt;<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Final response:&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">token<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #E06C75\">token<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">===<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;?&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Empty response.&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Result not ready yet.&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Timed out waiting for resolution.&quot;<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  } <\/span><span style=\"color: #C678DD\">catch<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #E06C75\">error<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #E5C07B\">console<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">log<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E06C75\">error<\/span><span style=\"color: #ABB2BF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #61AFEF\">solveCaptcha<\/span><span style=\"color: #ABB2BF\">();<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282c34;color:#9da5b4;font-size:12px;line-height:1;position:relative\">JavaScript<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Expected output:<\/h4>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"992\" style=\"aspect-ratio: 1908 \/ 992;\" width=\"1908\" controls src=\"https:\/\/deathbycaptcha.com\/blog\/wp-content\/uploads\/2026\/05\/recaptcha-solver-grls.mp4\"><\/video><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>CAPTCHAs, while effective against bots, can unintentionally exclude people with disabilities, technical limitations, making web access less equitable. ReCAPTCHA v2 invisible: Invisible reCAPTCHA v2 is a version of Google&#8217;s reCAPTCHA that helps websites distinguish humans from bots without always showing the traditional &#8220;I&#8217;m not a robot&#8221; checkbox. Key characteristics: Why people may want to bypass [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3072,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[59,52],"tags":[],"class_list":["post-3069","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-useful-articles","category-usage-best-practices"],"_links":{"self":[{"href":"https:\/\/deathbycaptcha.com\/blog\/wp-json\/wp\/v2\/posts\/3069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/deathbycaptcha.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/deathbycaptcha.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/deathbycaptcha.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/deathbycaptcha.com\/blog\/wp-json\/wp\/v2\/comments?post=3069"}],"version-history":[{"count":4,"href":"https:\/\/deathbycaptcha.com\/blog\/wp-json\/wp\/v2\/posts\/3069\/revisions"}],"predecessor-version":[{"id":3079,"href":"https:\/\/deathbycaptcha.com\/blog\/wp-json\/wp\/v2\/posts\/3069\/revisions\/3079"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/deathbycaptcha.com\/blog\/wp-json\/wp\/v2\/media\/3072"}],"wp:attachment":[{"href":"https:\/\/deathbycaptcha.com\/blog\/wp-json\/wp\/v2\/media?parent=3069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/deathbycaptcha.com\/blog\/wp-json\/wp\/v2\/categories?post=3069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/deathbycaptcha.com\/blog\/wp-json\/wp\/v2\/tags?post=3069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}