极验滑块验证协议逆向

import requests
import time
import execjs
import json
from datetime import datetime, timezone, timedelta

jscode = ''
with open("demo.js", "r", encoding="utf-8") as f:
    jscode = f.read()
jscode = execjs.compile(jscode)

challenge = jscode.call("uuid")

headers = {
    "Accept": "*/*",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Cache-Control": "no-cache",
    "Connection": "keep-alive",
    "Pragma": "no-cache",
    "Referer": "https://gt4.geetest.com/",
    "Sec-Fetch-Dest": "script",
    "Sec-Fetch-Mode": "no-cors",
    "Sec-Fetch-Site": "same-site",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36",
    "sec-ch-ua": "\"Not;A=Brand\";v=\"99\", \"Google Chrome\";v=\"139\", \"Chromium\";v=\"139\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\""
}
cookies = {
    "captcha_v4_user": "011a9cb06bdd4689975694733321d078",
    "sensorsdata2015jssdkcross": "%7B%22distinct_id%22%3A%221984a8102985cf-0b16af714940d38-26011151-2073600-1984a810299111c%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%7D%2C%22%24device_id%22%3A%221984a8102985cf-0b16af714940d38-26011151-2073600-1984a810299111c%22%7D",
    "Hm_lvt_25b04a5e7a64668b9b88e2711fb5f0c4": "1753596626,1753862889",
    "_uetvid": "635904806ab011f0ba3ed52cdc6e75e1"
}
captchaid = "99b142aaece96330d0f3ffb565ffb3ef"
url = "https://gcaptcha4.geetest.com/load"
params = {
    "captcha_id": captchaid,
    "challenge": challenge,
    "client_type": "web",
    "lang": "zho",
    "callback": f"geetest_{int(time.time()*1000)}"
}
response = requests.get(url, headers=headers, cookies=cookies, params=params)
data = json.loads(response.text[response.text.find('{'):-1])

lot_number = data["data"]["lot_number"]
payload = data["data"]["payload"]
process_token = data["data"]["process_token"]
static_path = data["data"]["static_path"]
# 创建当前时间(带有时区信息)
now = datetime.now(timezone(timedelta(hours=8)))  # +08:00 时区

# 格式化为指定格式
formatted_time = str(now.isoformat())

url = "https://gcaptcha4.geetest.com/verify"

w = jscode.call("getW", lot_number, captchaid, formatted_time, static_path, payload, process_token)
params = {
    "callback": f"geetest_{int(time.time()*1000)}",
    "captcha_id": captchaid,
    "client_type": "web",
    "lot_number": lot_number,
    "payload": payload,
    "process_token": process_token,
    "payload_protocol": "1",
    "pt": "1",
    "w": w
}
response = requests.get(url, headers=headers, cookies=cookies, params=params)
data = json.loads(response.text[response.text.find('{'):-1])
gen_time = data['data']['seccode']['gen_time']
captcha_output = data['data']['seccode']['captcha_output']
pass_token = data['data']['seccode']['pass_token']

url = "https://gt4.geetest.com/demov4/demo/login"
params = {
    "captcha_id": captchaid,
    "lot_number": lot_number,
    "pass_token": pass_token,
    "gen_time": gen_time,
    "captcha_output": captcha_output
}
response = requests.get(url, headers=headers, params=params)
print(response.json())