简介
PerimeterX 是一种常见的网络安全验证系统,用于保护网站免受自动化攻击和恶意爬虫。当您在网页浏览过程中看到 cookies 中包含 _px2
、_px3
时,表明该网站正在使用 PerimeterX 验证。本文将详细介绍如何有效处理 PerimeterX 验证。
详情请见:解决验证码 recaptcha、cloudflare、incapsula
验证模式说明
PerimeterX 验证主要有以下几种情况:
- 无感模式:用户无需交互,系统在后台完成验证
- 按压模式:需要用户完成交互式验证
- 混合模式:根据风险评估可能先尝试无感模式,失败后转为按压模式
注意事项:
- 无感模式与按压模式的触发通常取决于您使用的代理质量
- 按压模式返回的 cookies 通常需要几秒钟才能正常使用
- 建议先测试目标页面的状态码:403 表示触发按压模式,200/302 表示无感模式可能有效
技术参数详解
请求参数说明
请求 PerimeterX 验证解决方案时,需要提供以下关键参数:
参数名 | 类型 | 说明 | 必须 |
---|---|---|---|
href | String | 触发验证的页面地址 | 是 |
tag | String | 版本号,从验证脚本中获取 | 否* |
app_id | String | 应用ID,通常以PX开头 | 否* |
captcha | Object | 验证码参数(按压模式必传) | 否 |
proxy | String | 代理服务器地址 | 否 |
user_agent | String | 自定义用户代理 | 否 |
*注:
tag
和app_id
至少需要提供一个
响应数据结构
成功处理验证后,系统将返回以下数据:
{
"status": 1,
"msg": "验证成功",
"id": "639e056b-49bd-4895-94ab-68d59e00873e",
"cost": "2635.12ms",
"data": {
"cookies": {
"_px3": "eb9fb4aab8cbd8d9c7018d0928bdccd972ef2a879383dec6b8999bca90ef4fdd:0r5KU/5t6VOMgwq7DnwmGd246hJVZbhPeI72OXfd8QSyRuK1hBRSBog3nrfQah8dLHd5X7cJZJnydq09AginIw==:1000:7eMdz1/BzkA4xQ8/rxujv5jsju6W1PbCAAp+gNDX8fox23jXH2mvzBzg0IwYLDX576aAHr3TeWqHFWvutnqxAKgTSIyR8cutzM7CG6zHQSV0N8piaWjjXlozbaWh77V3BGC7EZ/e3Rj3cbhl9Z4bufg6/87I91c7vv3Ka4ewGi+9EkKABRSCjAs4wEJYu6SneH1ZiiQAWVRW/EAULvFKJpxC07/qpxYuCblvaPljf14=",
"_pxde": "9a14782e5832ac4ba515c98e3e9f6b6e7b2e3d8ecb36320e659f85bb4f7359ac:eyJ0aW1lc3RhbXAiOjE3MTE2ODA3MDcyNzd9",
"pxcts": "48247186-ed77-11ee-8c23-8bccbc7b0e91",
"_pxvid": "bcc357c3-ed78-11ee-aaf0-a24906ed7b54"
}
}
}
使用场景示例
仅无感模式
适用于高质量代理或风险较低的情况:
{
"app_id": "PXu6b0qd2S",
"href": "https://www.example.com/",
"proxy": "user:pass@ip:port"
}
无感+按压模式
适用于直接弹出按压验证码的情况:
{
"tag": "v8.6.6",
"href": "https://www.example.com/",
"proxy": "user:pass@ip:port"
}
XHR接口返回的按压验证码
当接口直接返回JSON格式的验证码数据时:
{
"app_id": "PXaOtQIWNf",
"href": "https://www.example.com/auth",
"captcha": {
"appId": "PXaOtQIWNf",
"jsClientSrc": "/aOtQIWNf/init.js",
"firstPartyEnabled": true,
"uuid": "bd2deef7-0b95-11ef-8c49-cb4c98cbe205",
"hostUrl": "/aOtQIWNf/xhr",
"blockScript": "/aOtQIWNf/captcha/captcha.js?a=c&u=bd2deef7-0b95-11ef-8c49-cb4c98cbe205&v=&m=0"
},
"did": "无感模式返回的did值",
"proxy": "user:pass@ip:port"
}
代码实现示例
以下是使用Python处理PerimeterX验证的示例:
from pynocaptcha import PerimeterxUniversalCracker
# 创建验证解决器实例
cracker = PerimeterxUniversalCracker(
user_token="您的用户令牌",
app_id="PXu6b0qd2S",
href="https://www.example.com/",
captcha={
"redirectUrl": "/blocked?url=Lw==&uuid=40f6c510-eb71-11ee-9952-619a9b96c881&vid=418e19e7-eb71-11ee-8541-88227401c984&g=b",
"appId": "PXu6b0qd2S",
"jsClientSrc": "/px/PXu6b0qd2S/init.js",
"firstPartyEnabled": True,
"vid": "418e19e7-eb71-11ee-8541-88227401c984",
"uuid": "40f6c510-eb71-11ee-9952-619a9b96c881",
"hostUrl": "/px/PXu6b0qd2S/xhr",
"blockScript": "/px/PXu6b0qd2S/captcha/captcha.js?a=c&m=0&u=40f6c510-eb71-11ee-9952-619a9b96c881&v=418e19e7-eb71-11ee-8541-88227401c984&g=b",
},
proxy="user:pass@ip:port",
debug=True,
)
# 执行验证破解
result = cracker.crack()
print(result)
最佳实践建议
- 代理选择:使用高质量的海外代理可以降低触发按压验证的概率
- 参数获取:通过浏览器开发者工具分析网页请求,准确获取
app_id
和tag
等关键参数 - 验证流程:先测试目标页面响应状态,根据结果选择适合的验证模式
- Cookie管理:获取验证通过的cookies后,建议等待几秒再使用,以确保有效性
通过以上方法,您可以有效处理各种PerimeterX验证场景,提高自动化访问的成功率。