0

我要直奔主题了。我正在尝试使用 2captcha 的 API 绕过 Twitch 的登录功能。一切正常:我的机器人与 2captcha 通信的速度足够快,验证码不会超时,并且我的机器人接收到验证验证码和登录所需的令牌,除了没有提交按钮来实际登录。据我所知,我浏览了所有关于此问题的 Github 帖子、每个 stackoverflow 帖子,我能找到的最佳解决方案是查看 devtools 中的 Google Network 选项卡以查找手动调用的函数将模拟一个按钮并让您通过验证码。由于我有限的编码能力,我能够找到一个引用 ArkoseEnforcement 和“回调”这个词的函数,我相信这是我想要找到的。在尝试清除源选项卡和网络选项卡后,我能找到的最好的是:

我能找到的最好的

我一直在尝试实现这个功能一个小时但没有成功,我还尝试查看“回调”和“ArkoseEnforment.funcaptcha_events”等。 在此处输入图像描述 我真的不知道如何将它们实现到我的代码中,我将不胜感激关于从哪里开始的任何帮助。

//require packages
require('dotenv').config(); const fs = require('fs'); const puppeteer = require('puppeteer'); const https = require('https');

//define varibles 
var usernames = []; var pkValue; var surl = process.env.SURL ; var pk = process.env.PUBLICKEY ; var api = process.env.APIKEY;
const readFile = fs.readFileSync("accounts.txt").toString().split("\n");

//read accounts
console.log(`Reading ${readFile.length} lines.`);
for(i in readFile) {
    (readFile[i].toLowerCase().startsWith("u") ? usernames.push(readFile[i].slice(10).replace("\r", "")) : null);
}

//get captcha

//retreive stream keys
async function getKey(username) {

    const browser = await puppeteer.launch({headless:false}); const page = await browser.newPage(); const navigationPromise = page.waitForNavigation()

    //get captcha
    function getCaptcha(captchaID) {
        https.get(`https://2captcha.com/res.php?key=${api}&action=get&id=${captchaID.slice(3)}`, (response) => {
            var dataRes = '';
            response.on('data', (chunk) => {
            dataRes += chunk;
            })
        
            response.on('end', () => {
                if (dataRes.toLowerCase()==="capcha_not_ready") {
                    setTimeout(() => {getCaptcha(captchaID)}, 5000)
                }
                else {
                    pkValue = dataRes.slice(3)
                    console.log(pkValue);
                    page.evaluate((pkValue) => {
                        //add token to val
                        document.querySelector('#FunCaptcha-Token').value = pkValue;
                        //submit form
                        //somehow need to submit the form here.
                    }, pkValue)
                }
            })
        })
    
    }

    await page.goto(`https://dashboard.twitch.tv/u/${username}/settings/stream`, { waitUntil: ['networkidle2'] })
    
    await page.setViewport({ width: 1920, height: 880 })
    
    await page.waitForSelector('.sc-AxjAm #login-username')
    await page.click('.sc-AxjAm #login-username')
    await page.type('.sc-AxjAm #login-username', username)
    
    await page.waitForSelector('.sc-AxjAm #password-input')
    await page.click('.sc-AxjAm #password-input')
    await page.type('.sc-AxjAm #password-input', process.env.PASSWORD)
    
    await page.waitForSelector('.sc-AxjAm > .sc-AxjAm:nth-child(3) > .ScCoreButton-sc-1qn4ixc-0 > .ScCoreButtonLabel-lh1yxp-0 > .sc-AxjAm', {visible:true})
    await page.click('.sc-AxjAm > .sc-AxjAm:nth-child(3) > .ScCoreButton-sc-1qn4ixc-0 > .ScCoreButtonLabel-lh1yxp-0 > .sc-AxjAm')

    await page.waitForSelector('#FunCaptcha-Token')

    //request 2captcha funcaptcha
    await https.get(`https://2captcha.com/in.php?key=${api}&method=funcaptcha&publickey=${pk}&surl=${surl}&pageurl=https://dashboard.twitch.tv/u/${username}/settings/stream`, (response) => {
        var data = '';
        response.on('data', (chunk) => {
            data += chunk;
        })

        response.on('end', () => {
            setTimeout(() => {getCaptcha(data)}, 20000)
        })
    })
    .on('error', (e) => {
        console.log(e);
    })

    await page.waitForSelector('.sc-AxjAm:nth-child(2) > .sc-AxjAm > .ScCoreButton-sc-1qn4ixc-0 > .ScCoreButtonLabel-lh1yxp-0 > .sc-AxjAm', {visible:true,timeout:0})
    var streamkey = await page.evaluate(() => document.querySelector('.sc-AxjAm:nth-child(2) > .sc-AxjAm > .ScCoreButton-sc-1qn4ixc-0 > .ScCoreButtonLabel-lh1yxp-0 > .sc-AxjAm').innerHTML);
    
    await navigationPromise

    await fs.appendFile('userkeys.txt', `${username}:${streamkey}`, e => console.log(`error: ${e}`))
  }

console.log(`Getting keys.`);

(async () => {
    for(i in usernames) {
        await getKey(usernames[i]);
    }
})();

//https://dashboard.twitch.tv/u/stokeshester/settings/stream trying to login as soon as I enter this link

这是我的代码记录 funcaptcha 的“tc-token”值的示例:

在此处输入图像描述

这是验证码界面的样子(无按钮):

在此处输入图像描述

4

0 回答 0