Отправка данных на сервер при защите с помощью простой капчи

Интерес чисто академический и касается он только простой капчи «кликните на домик|ключик|жука» (SimpleCapcha). Распознавать картинку не нужно, даже считать ничего не нужно. Нужно в одной сессии сграбить страницу, получить желаемый код-ответ, и отправить этот ответ вместе с данными методом POST. Такое вообще возможно?

Я попробовал реализовать. Сначала взял питон и селениум, но так и не смог завести последний + он требует что бы браузер стоял на сервере и иксы (можно заменить xfvb).

Потом наткнулся на phantomjs. Вот тут уже получилось сграбить код-ответ, но вот отправлять его не получается.

var page = require('webpage').create();
var url = 'http://localhost.dev/registration'; 
var capcha_result = '';
page.onResourceReceived = function() {
    // Этот метод срабатывает во время загрузки страницы.  
    // Загрузка обычно идёт чанками поэтому нужно проверять на null
    page.evaluate(function(){
        var capcha_name = document.querySelector('span.captchaText'); // получили текст того на что нужно кликнуть, например "жука"
        if(capcha_name!=null) {
            if(capcha_name.innerText) {
                var capcha = document.querySelector('img[title='+capcha_name.innerText+']'); // определили хэш ответа, то бишь то что нужно отправить на сервер
                capcha_result = capcha.id;
                console.log('capcha_answer='+capcha_result);
            }
        }
    });
};

page.onLoadStarted = function() {
    console.log("load started");
};

page.onLoadFinished = function() {
    console.log("load finished");
};

var data = 'nickname=phantom&pass=123456789&pass2=123456789&email=asdasdf@sadasd.ru&do=register&save=Регистрация&login=phantom&code='+capcha_result;

page.open(url, 'post', data, function (status) {
           
    if (status !== 'success') {
        console.log('Unable to post!');
    } else {
        console.log('Data posted!');
    }
    
});



И вот казалось бы всё готово, но page.evaluate запускается в «песочнице» и он не может влиять на переменные скрипта. Или я ошибаюсь и можно из page.evaluate записать глобальную переменную?
  • Вопрос задан
  • 3912 просмотров
Пригласить эксперта
Ответы на вопрос 2
nazarpc
@nazarpc
Open Source enthusiast
Можно с помощью window.
window['var_name'] = 5;
Ответ написан
JetMaster
@JetMaster Автор вопроса
В принципе, решил задачу. В page.evaluate() внедряем jquery и после того как сграбили капчу отправляем данные на сервер через $.ajax().
Вывод: не используйте подобные капчи, так как на написание спамерки не нужны большие ресурсы и знания (я в яваскрипте так себе но за день решил)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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