动态验证码参数:它们是什么,如何识别和提取。利用动态数据成功解决验证码问题

动态验证码参数:它们是什么,如何识别和提取。利用动态数据成功解决验证码问题

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 GetCaptchaParams(IWebDriver driver, string url)

{

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"

);

}

}

相关

普通小孩怎么当明星 当童星的基本条件
365bet中文官网

普通小孩怎么当明星 当童星的基本条件

📅 09-24 👁️ 2022
碟刹好还是鼓刹好?今天从技术角度来详细分析
365bet中文官网

碟刹好还是鼓刹好?今天从技术角度来详细分析

📅 10-31 👁️ 3393
怎么格式化win7系统本地磁盘 格式化win7系统本地磁盘方法【教程】