Imperva (Incapsula)

-
执行此任务时,请使用 您自己的代理。
-
如果代理按 IP 授权,请将地址 65.21.190.34 加入白名单。
-
完成验证后,您将获得 特殊的Cookie,需要添加到浏览器中。
请求参数
重要提示:某些参数的值是动态的 — 它们会在每次渲染包含 Imperva 的页面时发生变化。
请在创建任务前立即提取这些参数,以避免在解决过程中出现错误。
自动提取参数的示例请参见章节 如何查找任务创建所需的所有参数。
type<string>requiredCustomTask
class<string>requiredImperva
websiteURL<string>requiredIncapsula 所在的主页面地址。
incapsulaScriptUrl(在 metadata 中)<string>required"incapsulaScriptUrl": "_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3" - Incapsula JS 文件的名称。
incapsulaCookies(在 metadata 中)<string>required你从 Incapsula 获取的 cookies。可以通过在页面中使用 document.cookie 获取,或者在请求头中通过 Set-Cookie: "incap_sess_=...; visid_incap_=..." 获取(参见 /createTask 请求示例)。

proxyType<string>requiredhttp - 普通的 http/https 代理;
https - 仅在 "http" 不起作用时尝试(某些自定义代理服务器要求);
socks4 - socks4 代理;
socks5 - socks5 代理。
proxyAddress<string>required代理 IP 地址 IPv4/IPv6。不允许:
- 使用透明代理(其中客户端 IP 可见);
- 使用来自本地网络的代理。
proxyPort<integer>required代理端口。
proxyLogin<string>required代理登录。
proxyPassword<string>required代理密码。
reese84UrlEndpoint(在 metadata 中)<string>optionalreese84 指纹发送的端点名称可以在请求中找到,并以 ?d=site.com 结尾。

userAgent<string>optional浏览器的 User-Agent。
请仅传递当前 Windows 系统下的有效 UA。当前推荐值为:userAgentPlaceholder
创建任务方法
https://api.capmonster.cloud/createTask
请求
{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "Imperva",
"websiteURL": "https://example.com",
"userAgent": "userAgentPlaceholder",
"metadata": {
"incapsulaScriptUrl": "_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3",
"incapsulaCookies": "incap_ses_1166_2930313=br7iX33ZNCtf3HlpEXcuEDzz72cAAAAA0suDnBGrq/iA0J4oERYzjQ==; visid_incap_2930313=P3hgPVm9S8Oond1L0sXhZqfK72cAAAAAQUIPAAAAAABoMSY9xZ34RvRseJRiY6s+;",
"reese84UrlEndpoint": "Built-with-the-For-hopence-Hurleysurfecting-the-"
},
"proxyType": "http",
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}
响应
{
"errorId": 0,
"taskId": 407533072
}
获取任务结果方法
使用方法 getTaskResult 来获取 Imperva 解决方案。
https://api.capmonster.cloud/getTaskResult
要求
{
"clientKey":"API_KEY",
"taskId": 407533072
}
回应
{
"errorId":0,
"status":"ready",
"solution": {
"domains": {
"https://example.com": {
"cookies": {
"___utmvc": "NMB+nRa4inxXNeXuhPl9w4opzdo...E4OTU2OGEwNzI2ODlkODc4MWIwNmU3MQ==; Max-Age=31536000; Domain=.site.com; Path=/; Secure; SameSite=Lax"
}
}
}
}
}
Access denied
Error 16 - 此错误与使用不符合要求地理位置的代理服务器有关。
如何查找任务创建所需的所有参数
自动方法
为了自动化获取所需参数,可以通过 浏览器(普通模式或 headless 模式,例如使用 Playwright)进行提取,或直接从 HTTP 请求中获取。由于动态参数的有效时间较短,建议在获取后尽快使用。
所提供的代码片段仅作为获取必要参数的基础示例。具体实现方式取决于包含验证码的网站、本身的页面结构,以及所使用的 HTML 元素和选择器。
- JavaScript
- Python
- C#
显示代码 (Node.js)
import { chromium } from "playwright";
(async () => {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
await page.goto("https://www.example.com/");
// 提取 id 为 main-iframe 的 iframe 的 src 属性
const iframeSrc = await page.$eval("#main-iframe", (iframe) =>
iframe.getAttribute("src")
);
console.log("iframe src:", iframeSrc);
// 获取所有 cookies
const cookies = await page.context().cookies();
// 过滤出以 visid_incap_ 或 incap_ses_ 开头的 cookies
const filteredCookies = cookies.filter(
(cookie) =>
cookie.name.startsWith("visid_incap_") ||
cookie.name.startsWith("incap_ses_")
);
filteredCookies.forEach((cookie) => {
console.log(`${cookie.name}=${cookie.value}`);
});
await browser.close();
})();
显示代码
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
await page.goto("https://www.example.com/")
# 提取 id 为 main-iframe 的 iframe 的 src 属性
iframe_src = await page.locator("#main-iframe").get_attribute("src")
print("iframe src:", iframe_src) # 输出 src 值
# 获取所有 cookies
cookies = await page.context.cookies()
# 过滤出以 visid_incap_ 或 incap_ses_ 开头的 cookies
filtered_cookies = [
cookie for cookie in cookies
if cookie["name"].startswith("visid_incap_") or cookie["name"].startswith("incap_ses_")
]
for cookie in filtered_cookies:
print(f"{cookie['name']}={cookie['value']}")
await browser.close()
asyncio.run(main())
显示代码
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Playwright;
class Program
{
public static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });
var page = await browser.NewPageAsync();
await page.GotoAsync("https://www.example.com/");
// 提取 id 为 main-iframe 的 iframe 的 src 属性
var iframeSrc = await page.GetAttributeAsync("#main-iframe", "src");
Console.WriteLine("iframe src: " + iframeSrc); // 输出 src 值
// 获取所有 cookies
var cookies = await page.Context.CookiesAsync();
// 过滤出以 visid_incap_ 或 incap_ses_ 开头的 cookies
var filteredCookies = cookies.Where(cookie =>
cookie.Name.StartsWith("visid_incap_") || cookie.Name.StartsWith("incap_ses_"));
foreach (var cookie in filteredCookies)
{
Console.WriteLine($"{cookie.Name}={cookie.Value}");
}
await browser.CloseAsync();
}
}
使用 SDK 库
- JavaScript
- Python
显示代码(用于浏览器)
// https://github.com/ZennoLab/capmonstercloud-client-js
import { CapMonsterCloudClientFactory, ClientOptions, ImpervaRequest } from '@zennolab_com/capmonstercloud-client';
const API_KEY = "YOUR_API_KEY"; // 输入您的 CapMonster Cloud API 密钥
document.addEventListener("DOMContentLoaded", async () => {
const cmcClient = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// 如有必要,可以检查余额
const balance = await cmcClient.getBalance();
console.log("Balance:", balance);
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};
// Imperva(Incapsula)任务配置
const impervaRequest = new ImpervaRequest({
websiteURL: "https://example.com/", // 受 Imperva 保护的页面 URL
metadata: {
incapsulaScriptUrl: "_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3",
incapsulaCookies: "incap_ses_1166_2930313=br7iX33ZNCtf3HlpEXcuEDzz72cAAAAA0suDnBGrq/iA0J4oERYzjQ==; visid_incap_2930313=P3hgPVm9S8Oond1L0sXhZqfK72cAAAAAQUIPAAAAAABoMSY9xZ34RvRseJRiY6s+;"
},
proxy
});
const result = await cmcClient.Solve(impervaRequest);
console.log("Solution:", result.solution);
});
显示代码 (Node.js)
// https://github.com/ZennoLab/capmonstercloud-client-js
import { CapMonsterCloudClientFactory, ClientOptions, ImpervaRequest } from '@zennolab_com/capmonstercloud-client';
async function main() {
const cmcClient = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: 'YOUR_API_KEY' }) // 输入您的 CapMonster Cloud API 密钥
);
// 如有必要,可以检查余额
const balance = await cmcClient.getBalance();
console.log('Balance:', balance);
const proxy = {
proxyType: "http",
proxyAddress: '123.45.67.89',
proxyPort: 8080,
proxyLogin: 'username',
proxyPassword: 'password'
};
// Imperva(Incapsula)任务配置
const impervaRequest = new ImpervaRequest({
websiteURL: 'https://example.com/', // 受 Imperva 保护的页面 URL
metadata: {
incapsulaScriptUrl: '_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3',
incapsulaCookies: 'incap_ses_1166_2930313=br7iX33ZNCtf3HlpEXcuEDzz72cAAAAA0suDnBGrq/iA0J4oERYzjQ==; visid_incap_2930313=P3hgPVm9S8Oond1L0sXhZqfK72cAAAAAQUIPAAAAAABoMSY9xZ34RvRseJRiY6s+;',
},
proxy,
});
const result = await cmcClient.Solve(impervaRequest);
console.log('Solution:', result.solution);
}
main().catch(console.error);
显示代码
# https://github.com/ZennoLab/capmonstercloud-client-python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import ImpervaCustomTaskRequest
from capmonstercloudclient.requests.baseRequestWithProxy import ProxyInfo
API_KEY = "YOUR_API_KEY" # 输入您的 CapMonster Cloud API 密钥
async def solve_imperva_captcha():
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
# 配置您自己的代理
proxy = ProxyInfo(
proxyType="http",
proxyAddress="123.45.67.89",
proxyPort=8080,
proxyLogin="username",
proxyPassword="password"
)
# Imperva(Incapsula)任务配置
imperva_request = ImpervaCustomTaskRequest(
websiteUrl="https://example.com",
metadata={
"incapsulaScriptUrl": "_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3",
"incapsulaCookie": "incap_ses_1166_2930313=br7iX33ZNCtf3HlpEXcuEDzz72cAAAAA0suDnBGrq/iA0J4oERYzjQ==; visid_incap_2930313=P3hgPVm9S8Oond1L0sXhZqfK72cAAAAAQUIPAAAAAABoMSY9xZ34RvRseJRiY6s+;",
"reese84UrlEndpoint": "Built-with-the-For-hopence-Hurleysurfecting-the-"
},
proxy=proxy
)
# 如有必要,可以检查余额
balance = await cap_monster_client.get_balance()
print("Balance:", balance)
result = await cap_monster_client.solve_captcha(imperva_request)
print("Solution:", result)
asyncio.run(solve_imperva_captcha())
