How to Solve hCaptcha in Python using Selenium&CapMonster Cloud
- You should install all the libraries and modules in your project (see Python ReCaptcha v.2), set the parameters in the “.env” file:
API_KEY = 'YOUR_API_KEY'
WEBSITE_KEY = 'a5f74b19-9e45-40e0-b45d-47ff91b7a6c2'
WEBSITE_URL = 'https://accounts.hcaptcha.com/demo'
- And we write down the actions in the main file:
import os
import asyncio
from selenium import webdriver
from selenium.webdriver.common.by import By
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import HcaptchaProxylessRequest
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.getenv("API_KEY")
WEBSITE_URL = os.getenv("WEBSITE_URL")
WEBSITE_KEY = os.getenv("WEBSITE_KEY")
async def solve_hcaptcha():
try:
# Running Chrome Browser with Selenium
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
browser = webdriver.Chrome(options=options)
print("Browser initialized!")
# Going to a website with hCaptcha
browser.get(WEBSITE_URL)
print("Switching the browser to the page with the captcha!")
# Initializing the CapMonster client
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
print("CapMonster client initialized!")
# Creating a request for hCaptcha solution
hcaptcha_request = HcaptchaProxylessRequest(
websiteUrl=WEBSITE_URL,
websiteKey=WEBSITE_KEY,
fallbackToActualUA=True
)
# hCaptcha solving using CapMonster
task_result = await cap_monster_client.solve_captcha(hcaptcha_request)
solution = task_result.get('gRecaptchaResponse')
print("hCaptcha solved!")
# Inserting a solution into the form
element = browser.find_element(By.NAME, 'h-captcha-response')
browser.execute_script('arguments[0].style.display = "block"; arguments[0].style.visibility = "visible";', element)
browser.execute_script(f'arguments[0].value = "{solution}";', element)
print("The result is inserted into the page!")
# Clicking the submit button
submit_button = browser.find_element(By.ID, 'hcaptcha-demo-submit')
submit_button.click()
print("The button 'hcaptcha-demo-submit' is pressed!")
# Pause for 10 seconds
await asyncio.sleep(10)
except Exception as e:
print(f"An error has occurred: {e}")
finally:
# Closing the browser
browser.quit()
# Running an asynchronous function to solve hCaptcha
asyncio.run(solve_hcaptcha())
Code explanation:
Importing libraries and loading variables from an .env file. Importing the necessary libraries: os, asyncio, webdriver from selenium, CapMonsterClient, ClientOptions, HcaptchaProxylessRequest from capmonstercloudclient, and load_dotenv from dotenv.
The API_KEY, WEBSITE_URL and WEBSITE_KEY variables are loaded from the .env file.
solve_hcaptcha function:
Initializes the Chrome browser via Selenium and informs about it.
Goes to the website with hCaptcha and informs about it.
Initializes the CapMonster client using the loaded API_KEY and informs about it.
Creates a request to solve an hCaptcha with options including website address, hCaptcha key, and fallbackToActualUA (return to the browser's real User-Agent).
Solves hCaptcha using CapMonster and gets a solution.
Inserts a solution into a form on a web page using JavaScript to control DOM elements.
Clicks the submit form button.
Waits 10 seconds.
try-except-finally block:
Places code in a try block to handle possible exceptions.
If an error occurs, it displays an error message.
The finally block contains closing the browser (even if an error occurred, the browser will be closed).
Running an asynchronous function: uses asyncio.run() to run the asynchronous solve_hcaptcha() function.
Let's run the code and look at the result:
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.