如何使用 Selenium 和 CapMonster Cloud 在 Python 中解决 ReCaptcha v2 问题
如果您想用 Python 编写一个脚本来自动解决不同类型的验证码,那么首先需要从官方网站下载最新版本的 Python。
下一步:
在方便的地方创建一个文件夹,进入 VS 代码并将此文件夹添加到我们的新项目中(文件 - 打开文件夹)。
要添加 Selenium 依赖关系,请访问网站 https://www.selenium.dev/downloads/,选择 python,从上面复制 pip install selenium 这一行,在我们的项目中打开终端(查看 - 终端),粘贴这一行,按 Enter 并等待依赖安装。
现在您需要添加 CapMonster Cloud 库,您可以在此处了解有关该库的所有信息 - https://pypi.org/project/capmonstercloudclient/.复制 pip install capmonstercloudclient 这一行,并以同样的方式通过终端将其添加到项目中。你可以使用 pip list 命令检查所有已安装的依赖项。
- 创建一个名为".env" 并在其中输入以下值:
API_KEY="YOUR_API_KEY"
For example, we take the site google.com/recaptcha/api2/demo,它有一个我们要使用 CapMonster Cloud 解决的验证码,其中有一个 sitekey 标识符。API_KEY 是您从 CapMonster Cloud 获取的 API 密钥,请在相应行中输入并保存到".env "文件中。
Create a "main.py "文件,并从".env" 文件中导入所有必要的模块和环境变量设置(dotenv 应安装在您的依赖项中):
导入 asyncio
from selenium import webdriver
from selenium.webdriver.common.by import By
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
从 dotenv 导入 load_dotenv
导入 os
加载 dotenv()
API_KEY = os.getenv("API_KEY")
WEBSITE_URL = os.getenv("WEBSITE_URL")
WEBSITE_KEY = os.getenv("WEBSITE_URL")WEBSITE_KEY = os.getenv("WEBSITE_KEY")
接下来,我们编写启动浏览器的代码(在我们的示例中,我们使用 webdriver。Chrome,您可能有不同的驱动程序,不要忘记它!),创建一个任务来解决验证码问题,并将结果插入目标网站:
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
async def solve_captcha():
# 创建 reCAPTCHA 解决方案请求类型 V2 Proxyless
recaptcha_request = RecaptchaV2ProxylessRequest(websiteUrl=WEBSITE_URL, websiteKey=WEBSITE_KEY)
result = await cap_monster_client.solve_captcha(recaptcha_request)
return result['gRecaptchaResponse'] 返回结果。
async def main():
try:
# 使用 Selenium 运行 Chrome 浏览器
browser = webdriver.Chrome()
# 打开网站
browser.get(WEBSITE_URL)
print('Page open, waiting for reCAPTCHA to load...')
# 稍候验证码加载(您可以配置持续时间)
await asyncio.sleep(5)
# 使用 CapMonster 的 reCAPTCHA 解决方案
responses = await solve_captcha()
print('CapMonster response:', responses)
# 在页面中插入已解决的再验证码
browser.execute_script(f'document.getElementById("g-recaptcha-response").innerHTML = "{responses}";')
print('The result is inserted into the page!')
# 必要时执行其他操作(例如提交表单)
browser.find_element(By.ID, 'recaptcha-demo-submit').click()
print('Form submitted!')
# 稍候观察变化
await asyncio.sleep(10)
except Exception as e:
print('Error:', e)
finally:
# 关闭浏览器
browser.quit()
# 运行异步事件循环
asyncio.run(main())
完整代码:
导入 asyncio
from selenium import webdriver
from selenium.webdriver.common.by import By
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
从 dotenv 导入 load_dotenv
导入 os
# 从 .env 文件加载环境变量
load_dotenv()
API_KEY = os.getenv("API_KEY")
WEBSITE_URL = os.getenv("WEBSITE_URL")
WEBSITE_KEY = os.getenv("WEBSITE_KEY")
# 设置 CapMonster 客户端
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
async def solve_captcha():
# 创建 reCAPTCHA 解决方案请求类型 V2 Proxyless
recaptcha_request = RecaptchaV2ProxylessRequest(websiteUrl=WEBSITE_URL, websiteKey=WEBSITE_KEY)
result = await cap_monster_client.solve_captcha(recaptcha_request)
return result['gRecaptchaResponse'] 返回结果。
async def main():
try:
# 使用 Selenium 运行 Chrome 浏览器
browser = webdriver.Chrome()
# 打开网站
browser.get(WEBSITE_URL)
print('Page open, waiting for reCAPTCHA to load...')
# 稍候验证码加载(您可以配置持续时间)
await asyncio.sleep(5)
# 使用 CapMonster 的 reCAPTCHA 解决方案
responses = await solve_captcha()
print('CapMonster response:', responses)
# 在页面中插入已解决的再验证码
browser.execute_script(f'document.getElementById("g-recaptcha-response").innerHTML = "{responses}";')
print('The result is inserted into the page!')
# 必要时执行其他操作(例如提交表单)
browser.find_element(By.ID, 'recaptcha-demo-submit').click()
print('Form submitted!')
# 稍候观察变化
await asyncio.sleep(10)
except Exception as e:
print('Error:', e)
finally:
# 关闭浏览器
browser.quit()
# 运行异步事件循环
asyncio.run(main())
代码说明:
load_dotenv() 用于从 .
os.getenv("API_KEY"), os.getenv("WEBSITE_URL"), 和 os.getenv("WEBSITE_KEY") 用于从 .env 文件中获取相应环境变量的值。
ClientOptions(api_key=API_KEY) 使用给定的 CapMonster API 密钥创建 ClientOptions 对象。
CapMonsterClient(options=client_options) 使用给定的选项创建 CapMonster 客户端。
: 此函数使用 CapMonster 创建 reCAPTCHA V2 Proxyless 类型的验证码解决方案请求。
返回代表验证码解决方案的 gRecaptchaResponse 值。
async def main(): 执行主脚本的主异步函数。
使用 Selenium 启动 Chrome 浏览器,打开网站,等待加载 reCAPTCHA。
调用 solve_captcha(),使用 CapMonster 解决验证码问题。
在页面中插入已解决的验证码,执行其他操作(如提交表单),然后等待更改。
如果出错,则捕获并显示错误。
完成所有操作后关闭浏览器。
asyncio.run(main()) 使用 asyncio.run() 运行异步函数 main()。run() 运行异步函数 main(),这允许您运行脚本样式的异步代码。38;margin-bottom:0pt;margin-top:0pt;" dir="ltr"> 让我们运行脚本。如果出现任何错误,请使用 "运行 "和 "调试"。如果一切正常,您应该得到以下结果:

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