How to Solve ReCaptcha v3 in Python Using Selenium & CapMonster Cloud
To solve this type of captcha, create a ".env" 文件,其中包含以下值:
CAPMONSTER_API_KEY=YOUR_API_KEY
WEBSITE_KEY=6Le0xVgUAAAAAIt20XEB4rVhYOODgTl00d8juDob
WEBSITE_URL=https://lessons.zennolab.com/captchas/recaptcha/v3.php?level=beta
通过 pip install (请参见 Python ReCaptcha v.2),将它们导入到您的项目中,然后将验证码任务提交到 CapMonster 云服务器:
导入 asyncio
导入 os
from dotenv import load_dotenv
from selenium import webdriver
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV3ProxylessRequest
from selenium.webdriver.common.by import By
load_dotenv()
CAPMONSTER_API_KEY = os.getenv('CAPMONSTER_API_KEY')
WEBSITE_KEY = os.getenv('WEBSITE_KEY')
WEBSITE_URL = os.getenv('WEBSITE_URL')
async def solve_recaptcha():
# 初始化 CapMonster 客户端
client_options = ClientOptions(api_key=CAPMONSTER_API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
# 初始化 Selenium WebDriver
options = webdriver.ChromeOptions()
options.headless = False
browser = webdriver.Chrome(options=options)
print('Browser initialized!')
try:
# 进入指定页面
browser.get(WEBSITE_URL)
print('Browser switched to the page with captcha!')
# 创建解决 reCAPTCHA V3 无验证码类型的请求
recaptcha_request = RecaptchaV3ProxylessRequest(
websiteUrl=WEBSITE_URL、
websiteKey=WEBSITE_KEY、
action='verify'、
min_score=0.7、
)
# 使用 CapMonster 解决重新验证码问题
task_result = await cap_monster_client.solve_captcha(recaptcha_request)
print('reCAPTCHA V3 solved:', task_result)
# 安装用户代理(可选)
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0 Safari/537.36'
browser.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": user_agent})
# 将结果插入页面
script = f'document.querySelector(\'#g-recaptcha-response-100000\').style.display = "block";'
script += f'document.querySelector(\'#g-recaptcha-response-100000\').style.visibility = "visible";'
script += f'document.querySelector(/g-recaptcha-response-100000\').value = "{task_result}";'
browser.execute_script(script)
print('The result is inserted into the page!')
# 点击按钮检查
submit_button = browser.find_element(By.ID, 'v3_submit')
submit_button.click()
print('"Check" button is pressed!')
# 暂停 10 秒
await asyncio.sleep(10)
finally:
# 关闭浏览器
browser.quit()
# 运行异步函数来解决 reCAPTCHA 问题
asyncio.run(solve_recaptcha())
代码说明:
加载环境变量: load_dotenv().加载环境变量:load_dotenv():该函数从 .env 文件中加载环境变量的值,并将其提供给程序使用。
从环境中初始化变量: CAPMONSTER_API_KEY = os.getenv('CAPMONSTER_API_KEY').在此,我们将从环境变量中获取 CAPMONSTER_API_KEY 变量的值。
WEBSITE_KEY = os.getenv('WEBSITE_KEY'): 同样,我们将获得 WEBSITE_KEY 变量的值。
WEBSITE_URL = os.getenv('WEBSITE_URL'): 我们将得到 WEBSITE_URL 变量的值。38;margin-bottom:0pt;margin-top:0pt;" dir="ltr">async def solve_recaptcha(): 声明异步函数 solve_recaptcha。
初始化 CapMonster 客户端和 Selenium WebDriver: client_options = ClientOptions(api_key=CAPMONSTER_API_KEY)。创建一个对象,其中包含用于初始化 CapMonster 客户端的选项。
: 使用选项初始化 CapMonster 客户端。
options = webdriver.ChromeOptions(): 创建选项对象以配置 Chrome Web 驱动程序。
options.headless = False: 设置浏览器可见性模式(False - 可见,True - 不可见)。38;margin-bottom:0pt;margin-top:0pt;" dir="ltr">browser = webdriver.Chrome(options=options): 使用选项初始化 Chrome Web 驱动程序。
Working with a web page: browser.get(WEBSITE_URL).转到指定的网页。
recaptcha_request = RecaptchaV3ProxylessRequest(...)
&bsp;
: 为 reCAPTCHA V3 Proxyless 解决方案创建请求对象。38;margin-bottom:0pt;margin-top:0pt;" dir="ltr">task_result = await cap_monster_client.solve_captcha(recaptcha_request): 使用 CapMonster 解决 reCAPTCHA。
user_agent = '....': 设置用户代理(标识浏览器和平台的字符串)。38;margin-bottom:0pt;margin-top:0pt;" dir="ltr">browser.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": user_agent}): 使用 Chrome DevTools 协议安装用户代理
script = '....':
browser.execute_script(script): 在当前浏览器页面的上下文中执行 JavaScript 代码。
submit_button = browser.find_element(By.ID, 'v3_submit'): 通过页面上的 ID 搜索 HTML 元素。38;margin-bottom:0pt;margin-top:0pt;" dir="ltr">submit_button.click(): 模拟点击找到的按钮。
完成工作: await asyncio.sleep(10).异步暂停 10 秒。
浏览器。quit():关闭网络驱动程序和浏览器窗口。
Running an asynchronous function: asyncio.run(solve_recaptcha()).在异步环境中运行异步 solve_recaptcha 函数。
运行脚本并成功执行:

Note:我们在此提醒您,该产品用于在您自己的网站和您拥有合法访问权限的网站上自动进行测试。