@SideWest
Python.Новичок

Я написал функцию, но хороша ли она?

async function img_send(img) {
    return new Promise(solve => {
        request.get({
            url: img
        }, (a, response, body) => {
            data = Buffer.from(body).toString('base64');
            request.post({
                url: `http://anti-captcha.com/in.php`,
                qs: {
                    key: CAPTCHA_KEY,
                    body: data
                },
            }, (a, b, result) => {
                solve(result.toString())
            })
        })
    })
}

async function captcha_handler(img) {
    return new Promise(async (captched) => {
        let captcha_send_counter = 0
        let captcha_sended = await new Promise(solved => {
            let img_sending = setInterval(async () => {
                let request = await img_send(img)
                console.log('В ответ на капчу:', request)
                if (!request.includes('OK')) {
                    captcha_send_counter++;
                    console.log(captcha_send_counter)
                    if (captcha_send_counter > 30) {
                        console.log(colors.red('Обработка капчи отменена из-за слишком долгого ожидания'))
                        CAPTCHA_IN_PROGRESS = false;
                        captched(false)
                        clearInterval(img_sending)
                    }
                } else {
                    solved(request)
                    clearInterval(img_sending)

                }
            }, 1000)
        })


        captcha_sended = captcha_sended.split('|')[1]
        let waiting_limit = 0;

        let answer_waiting = setInterval(() => {
            waiting_limit++;
            if (waiting_limit > 11) {
                CAPTCHA_IN_PROGRESS = false;
                captched(false)
                clearInterval(answer_waiting)
            }
            request.post({
                url: `https://anti-captcha.com/res.php?key=${CAPTCHA_KEY}&action=get&id=${captcha_sended}`,
            }, (a, b, result) => {
                result = result.toString()
                console.log('Результат решения капчи: ', colors.blue(result))
                if (result.includes('OK')) {
                    captched(result.split('|')[1])
                    clearInterval(answer_waiting)
                }
            })
        }, 2000)
    })

}


captcha_handler принимает url картинки и возвращает промис когда капча решена
CAPTCHA_IN_PROGRESS нужно чтобы одновременно на обработку 2 капчи не пошли

Функция для работы с антикапчей
  • Вопрос задан
  • 496 просмотров
Решения вопроса 1
@afanasiyz
Javascript-разработчик
Первый момент - вам не надо возвращать промис из асинковой функции, джаваскрипт сделает это за вас.
А еще, простой совет - вынесите числа все числа в именнованные константы, так вы избавитесь от magic numbers.
Их можно использовать вместо 11, 30, и количества времени, которое вы в setInterval'ы отправляете.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@abberati
frontend-разработчик
Работает? Хороша

Не работает? Не очень
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы