How to Solve hCaptcha in JavaScript Using Selenium&CapMonster Cloud
- When creating a new JavaScript project, you should install all the dependencies (see JavaScript ReCaptcha v.2). In the “.env” file we create the following values:
CAPMONSTER_API_KEY=YOUR_API_KEY
WEBSITE_KEY=a5f74b19-9e45-40e0-b45d-47ff91b7a6c2
WEBSITE_URL=https://accounts.hcaptcha.com/demo
- We import the dependencies, create a task to solve the captcha, send it to the server and insert the token into the form:
require('dotenv').config();
const { Builder, By, until } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const { CapMonsterCloudClientFactory, ClientOptions, HCaptchaProxylessRequest } = require('@zennolab_com/capmonstercloud-client');
const CAPMONSTER_API_KEY = process.env.CAPMONSTER_API_KEY;
const WEBSITE_KEY = process.env.WEBSITE_KEY;
const WEBSITE_URL = process.env.WEBSITE_URL;
async function solvehCaptcha() {
const options = new chrome.Options();
options.addArguments('--no-sandbox', '--disable-dev-shm-usage');
const driver = await new Builder().forBrowser('chrome').setChromeOptions(options).build();
// Initializing the CapMonster client
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
try {
await driver.get(WEBSITE_URL);
console.log('Page open, hCaptcha solving...');
const hCaptchaTaskRequest = new HCaptchaProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
fallbackToActualUA: true,
});
// Getting a captcha solution from CapMonster
const solutionObject = await cmcClient.Solve(hCaptchaTaskRequest);
console.log('Solution from CapMonster:', solutionObject);
const token = solutionObject.solution.token || solutionObject.solution.gRecaptchaResponse;
console.log('Extracted token:', token);
// Inserting a token into a textarea
await driver.executeScript((extractedToken) => {
const textarea = document.querySelector('textarea[name="h-captcha-response"]');
if (textarea) {
textarea.value = extractedToken;
}
}, token);
await Promise.all([
driver.wait(until.elementIsVisible(driver.findElement(By.id('hcaptcha-demo-submit')))),
driver.findElement(By.id('hcaptcha-demo-submit')).click()
]);
await driver.sleep(5000);
} catch (error) {
console.error('Error:', error);
} finally {
await driver.quit();
}
}
solvehCaptcha();
What happens when this code runs:
Loading environment variables: dotenv is used to load environment variables from the .env file such as CAPMONSTER_API_KEY, WEBSITE_KEY and WEBSITE_URL.
solvehCaptcha function:
Creates an instance of the Chrome driver using Selenium WebDriver and configures browser options.
Initializes the CapMonster client using the loaded CAPMONSTER_API_KEY.
Goes to a website with hCaptcha.
Creates a request for an hCaptcha solution, specifying parameters such as fallbackToActualUA.
Solves hCaptcha using CapMonster and gets a solution.
Outputs information about the solution and the extracted token to the console.
Inserts the resulting token into a textarea element on a web page using JavaScript.
Waits for the element with id 'hcaptcha-demo-submit' to be visible and then clicks on it.
Waits 5 seconds after clicking.
try-catch-finally block:
The try block contains the main automation execution code.
The catch block handles any exceptions and prints an error message.
The finally block ensures that the driver will be closed even if an error occurs.
Calling solvehCaptcha() function: runs the solvehCaptcha() function to solve hCaptcha when the script is executed.
Running the code and the result of the program execution:
Note: We'd like to remind you that the product is used to automate testing on your own websites and on websites to which you have legal access.