Chris


返回首页 上一页 下一页

Datadome

说明

Request URL(POST):

版本 接口地址
通用版(universal) http://api.nocaptcha.io/api/wanda/datadome/universal

Request Headers:

参数名 说明 必须
User-Token 用户密钥, 主页获取
Content-Type application/json
Developer-Id 开发者 ID, 开发者用户使用, 用户主页邀请链接的字符串(如 xxx/register?c=abcdef, 则 abcdef 为开发者 ID)

POST Data(JSON):

参数名 类型 说明 必须
href String 触发 datadome 验证的页面地址
proxy String 无需保持代理一致, 若传代理请使用海外代理, 格式请传 ip:port 或 usr:pwd@ip:port (如果有问题联系管理员)
js_url String js 模式下需要传该参数, /js/ 结尾的返回 datadome cookie 的接口, 如: https://dwt.soundcloud.com/js/
js_key String js 模式下需要传该参数, f12 搜索 ddjskey 值, 如: E6EAF460AA2A8322D66B42C85B62F9
captcha_url String post(xhr) 接口触发的 "url": "/captcha?initCid=xxx"
interstitial Boolean 是否会触发 interstitial 设备验证模式, 默认 false
user_agent String 自定义 user_agent, 必须保持 user-agent 一致
did String js 模式返回的指纹 id(存在 extra 属性中), 后续 xhr 接口出现的滑块验证码请传该参数
cookies String 当前页面的 cookies
timeout Integer 验证超时时间

Response Data(JSON):

提交验证(submit=true)

参数名 类型 说明
status Integer 调用是否成功, 1 成功, 0 失败, 请使用该值判断
msg String 调用结果中文说明
id String 该次请求 id(唯一, 可用作后续记录查询)
data.datadome String 验证通过返回的可用的 datadome cookie, 可用于后续验证接口
cost String 验证耗时(毫秒)
{
  "status": 1,
  "msg": "验证成功",
  "id": "639e056b-49bd-4895-94ab-68d59e00873e",
  "cost": "4635.12ms",
  "data": {
    "datadome": "HYvnTVSxppxMMrSk_Z_MOHoSKkQRd2ppQr~pOeo2nDlL7Lg7QBwb2ew5OYQxSSSH1CR9NzO78A25KHM7kLV6OydtvwvJZ773Jil1mPC7ZoFSQQDrDYVeHZtjq_BWUai6"
  }
}

调用示例

python

pip install -U pynocaptcha -i https://pypi.python.org/simple

import re
from utils import USER_TOKEN, get_idea_proxy
from pynocaptcha import magneto, crack_datadome


def checkbalance(session: magneto.Session, extra):
    """
    后续需要进行的目标接口请求
    """
    data = {
        'language': 'en-ca',
        'csrfmiddlewaretoken': extra['csrfmiddlewaretoken'],
        'card_number': '98082560015032626594919',
        'pin': '4632',
        'g-recaptcha-response': 'true',
    }
    
    headers = {
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        'accept-language': extra['accept-language'],
        'content-type': 'application/x-www-form-urlencoded',
        'origin': 'https://homedepot-ca.cashstar.com',
        'priority': 'u=0, i',
        'referer': 'https://homedepot-ca.cashstar.com/reload/',
        'sec-ch-ua': extra['sec-ch-ua'],
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': extra['sec-ch-ua-platform'],
        'sec-fetch-dest': 'document',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-site': 'same-origin',
        'sec-fetch-user': '?1',
        'upgrade-insecure-requests': '1',
        'user-agent': extra['user-agent']
    }
    return session.post(
        'https://homedepot-ca.cashstar.com/reload/',
        headers=headers,
        data=data, 
    )


def parse_index(resp, extra):
    """
    需要解析 href 首页响应源码中获取的数据
    """
    token = re.search(r'name="csrfmiddlewaretoken" value="(.*?)"', resp.text)[1]
    extra['csrfmiddlewaretoken'] = token


session, resp, extra = crack_datadome(
    user_token=USER_TOKEN,
    href='https://homedepot-ca.cashstar.com/reload/',
    verifiers=[
        checkbalance
    ],
    parse_index=parse_index,
    proxy=get_idea_proxy("hk"),
    debug=True
)

print(resp.text)