Node.js
显示代码// https://github.com/CapMonsterCloud/capmonstercloud-client-js
// 导入必要依赖
import { Builder } from "selenium-webdriver";
import { Options } from "selenium-webdriver/chrome.js";
import {
CapMonsterCloudClientFactory,
ClientOptions,
AmazonRequest,
} from "@zennolab_com/capmonstercloud-client";
(async function run() {
// Chrome 设置
const options = new Options();
// options.addArguments("--headless=new");
// 创建并启动 ChromeDriver
const driver = await new Builder()
.forBrowser("chrome")
.setChromeOptions(options)
.build();
const pageUrl =
"https://www.example.com/amazon-captcha-page"; // 替换为 Amazon 验证码页面 URL
try {
// ===== 1. 打开页面 =====
await driver.get(pageUrl);
// ===== 2. 获取 AWS WAF 验证码参数 =====
const captchaParams = await driver.executeScript(() => {
const gokuProps = window.gokuProps || {};
const scripts = [...document.querySelectorAll("script")];
return {
websiteKey: gokuProps.key || null,
context: gokuProps.context || null,
iv: gokuProps.iv || null,
challengeScriptUrl:
scripts.find((s) => s.src.includes("challenge.js"))?.src || null,
captchaScriptUrl:
scripts.find((s) => s.src.includes("captcha.js"))?.src || null,
};
});
console.log("验证码参数:");
console.dir(captchaParams, { depth: null });
// ===== 3. 创建 CapMonster Cloud 客户端 =====
const cmcClient = CapMonsterCloudClientFactory.Create(
new ClientOptions({
clientKey: "YOUR_CAPMONSTER_API_KEY", // 替换为你的 CapMonster API 密钥
}),
);
// ===== 4. 创建 AWS WAF 验证码解决请求 =====
const request = new AmazonRequest({
websiteURL: pageUrl,
challengeScript: captchaParams.challengeScriptUrl,
captchaScript: captchaParams.captchaScriptUrl,
websiteKey: captchaParams.websiteKey,
context: captchaParams.context,
iv: captchaParams.iv,
cookieSolution: true,
});
// ===== 5. 发送请求到 CapMonster Cloud =====
const response = await cmcClient.Solve(request);
console.log("完整响应:");
console.dir(response, { depth: null });
if (!response?.solution) {
throw new Error("CapMonster Cloud 返回空解");
}
const solution = response.solution;
const wafToken = solution.cookies?.["aws-waf-token"];
if (!wafToken) {
throw new Error(
`未找到 AWS WAF Token:\n${JSON.stringify(solution, null, 2)}`,
);
}
console.log("AWS WAF Token:");
console.log(wafToken);
// ==========================
// 设置 COOKIE
// ==========================
await driver.manage().deleteCookie("aws-waf-token");
await driver.manage().addCookie({
name: "aws-waf-token",
value: wafToken,
path: "/",
secure: true,
});
const cookies = await driver.manage().getCookies();
console.log("设置后的 Cookies:");
console.dir(cookies, { depth: null });
// ===== 6. 刷新页面 =====
console.log("正在刷新页面...");
await driver.navigate().refresh();
// 等待页面加载完成
await driver.sleep(3000);
console.log("当前 URL:");
console.log(await driver.getCurrentUrl());
} catch (err) {
console.error("错误:");
console.error(err);
} finally {
// await driver.quit();
}
})()
.then(() => {
console.log("完成");
process.exit(0);
})
.catch((err) => {
console.error(err);
process.exit(1);
});Python
显示代码# https://github.com/CapMonsterCloud/capmonsterclient-python
# 导入必要依赖
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import AmazonWafRequest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
CAPTCHA_URL = "https://www.example.com" # 指定目标 URL
# ===== CHROMEDRIVER 配置 =====
chrome_options = Options()
# chrome_options.add_argument('--headless') # 取消注释以启用后台运行
driver = webdriver.Chrome(options=chrome_options)
# ===== 获取验证码参数函数 =====
def get_captcha_params():
driver.get(CAPTCHA_URL)
captcha_params = driver.execute_script("""
const gokuProps = window.gokuProps || {};
const scripts = Array.from(document.querySelectorAll('script'));
return {
websiteKey: gokuProps.key || "Not found",
context: gokuProps.context || "Not found",
iv: gokuProps.iv || "Not found",
challengeScriptUrl: scripts.find(script => script.src.includes('challenge.js'))?.src || "Not found",
captchaScriptUrl: scripts.find(script => script.src.includes('captcha.js'))?.src || "Not found"
};
""")
return captcha_params
# ===== CAPMONSTER CLOUD 配置 =====
client_options = ClientOptions(api_key="YOUR_API_KEY") # 替换为你的 API 密钥
cap_monster_client = CapMonsterClient(options=client_options)
async def solve_captcha(captcha_params):
# ===== 创建 CapMonsterCloud 请求并发送验证码求解 =====
amazon_waf_request = AmazonWafRequest(
websiteUrl=CAPTCHA_URL,
challengeScript=captcha_params["challengeScriptUrl"],
captchaScript=captcha_params["captchaScriptUrl"],
websiteKey=captcha_params["websiteKey"],
context=captcha_params["context"],
iv=captcha_params["iv"],
cookieSolution=True
)
return await cap_monster_client.solve_captcha(amazon_waf_request)
async def main():
try:
# ===== 1. 获取 AWS WAF 验证码参数 =====
captcha_params = get_captcha_params()
print("验证码参数:", captcha_params)
# ===== 2. 发送请求到 CapMonster Cloud =====
response = await solve_captcha(captcha_params)
print("验证码求解结果:", response)
if not response or "cookies" not in response:
raise Exception("CapMonster 返回空结果")
solution = response
waf_token = solution["cookies"].get("aws-waf-token")
if not waf_token:
raise Exception(f"未找到 AWS WAF token:\n{solution}")
print("AWS WAF token:")
print(waf_token)
# ==========================
# 设置 COOKIE
# ==========================
# 删除旧 cookie
driver.delete_cookie("aws-waf-token")
# 添加新 cookie
driver.add_cookie({
"name": "aws-waf-token",
"value": waf_token,
"path": "/",
"secure": True
})
# 检查 cookies
cookies = driver.get_cookies()
print("插入后的 Cookies:")
print(cookies)
# ===== 3. 刷新页面 =====
print("正在刷新页面...")
driver.refresh()
# 等待加载
await asyncio.sleep(3)
print("当前 URL:")
print(driver.current_url)
except Exception as e:
print("发生错误:", e)
finally:
driver.quit()
asyncio.run(main())C#
显示代码// https://github.com/CapMonsterCloud/capmonstercloud-client-dotnet
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using Zennolab.CapMonsterCloud;
using Zennolab.CapMonsterCloud.Requests;
class Program
{
static async System.Threading.Tasks.Task Main(string[] args)
{
const string CAPTCHA_URL = "https://www.example.com"; // 验证码页面 URL
// ===== CHROMEDRIVER 配置 =====
var chromeOptions = new ChromeOptions();
// chromeOptions.AddArgument("--headless"); // 如有需要可启用
using var driver = new ChromeDriver(chromeOptions);
try
{
// ===== 1. 获取 AWS WAF 验证码参数 =====
var captchaParams = GetCaptchaParams(driver, CAPTCHA_URL);
// ===== 2. 创建 CAPMONSTER CLOUD 客户端 =====
var clientOptions = new ClientOptions
{
ClientKey = "YOUR_API_KEY" // 替换为你的 API Key
};
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
// ===== 3. 创建 AWS WAF 验证码请求 =====
var amazonWafRequest = new AmazonWafRequest
{
WebsiteUrl = CAPTCHA_URL,
ChallengeScript = captchaParams["challengeScriptUrl"],
CaptchaScript = captchaParams["captchaScriptUrl"],
WebsiteKey = captchaParams["websiteKey"],
Context = captchaParams["context"],
Iv = captchaParams["iv"],
CookieSolution = true
};
// ===== 4. 发送请求到 CAPMONSTER CLOUD =====
var solveResult = await cmCloudClient.SolveAsync(amazonWafRequest);
Console.WriteLine("完整响应:");
Console.WriteLine(solveResult);
if (solveResult?.Solution?.Cookies == null)
throw new Exception("CapMonster 返回空结果");
var wafToken = solveResult.Solution.Cookies.ContainsKey("aws-waf-token")
? solveResult.Solution.Cookies["aws-waf-token"]
: null;
if (string.IsNullOrEmpty(wafToken))
throw new Exception("未找到 AWS WAF token");
Console.WriteLine("AWS WAF token:");
Console.WriteLine(wafToken);
// ==========================
// 设置 COOKIE
// ==========================
// 删除旧 cookie
try
{
driver.Manage().Cookies.DeleteCookieNamed("aws-waf-token");
}
catch { }
// 获取域名
var uri = new Uri(CAPTCHA_URL);
var domain = uri.Host;
// 添加新 cookie
driver.Manage().Cookies.AddCookie(new Cookie(
"aws-waf-token",
wafToken,
domain,
"/",
DateTime.Now.AddDays(1)
));
// 检查 cookies
var cookies = driver.Manage().Cookies.AllCookies;
Console.WriteLine("插入后的 Cookies:");
foreach (var cookie in cookies)
{
Console.WriteLine($"{cookie.Name} = {cookie.Value}");
}
// ===== 5. 刷新页面 =====
Console.WriteLine("正在刷新页面...");
driver.Navigate().Refresh();
Thread.Sleep(3000);
Console.WriteLine("当前 URL:");
Console.WriteLine(driver.Url);
}
catch (Exception ex)
{
Console.WriteLine("错误:");
Console.WriteLine(ex);
}
finally
{
driver.Quit();
}
}
private static Dictionary
{
driver.Navigate().GoToUrl(url);
var jsExecutor = (IJavaScriptExecutor)driver;
var result = jsExecutor.ExecuteScript(@"
const gokuProps = window.gokuProps || {};
const scripts = Array.from(document.querySelectorAll('script'));
return {
websiteKey: gokuProps.key || 'Not found',
context: gokuProps.context || 'Not found',
iv: gokuProps.iv || 'Not found',
challengeScriptUrl: scripts.find(s => s.src.includes('challenge.js'))?.src || 'Not found',
captchaScriptUrl: scripts.find(s => s.src.includes('captcha.js'))?.src || 'Not found'
};
") as IDictionary
return result.ToDictionary(
k => k.Key,
v => v.Value?.ToString() ?? "Not found"
);
}
}