Остановить скрипт для ввода капчи, затем - продолжить...

bugargen

Местный житель
Регистрация
24 Апр 2008
Сообщения
234
Реакции
20
Скрипт PHP парсит какую-то инфу и, в итоге, нарывается на капчу, после ввода которой скрипт должен продолжить парсить ещё неспарсенное.

Как этот ввод капчи лучше организовать?

ЗЫ: Интересует не получение капчи, а сама схема ввода инфы с капчи и последующего продолжения работы скрипта.
 
Пускай он поместит в какое-то общее хранилище капчу, и будет опрашивать это хранилище на предмет значения капчи, в цикле с задержкой.

В это время другой скрипт в браузере оператора, упскай опрашивает хранилище на предмет капчи, и показывает оператору.
после того как оператор введет капчу, пускай остылает данные в общее хранилище.


Обще хранилище может быть базой, или файлами
 
Пускай он поместит в какое-то общее хранилище капчу, и будет опрашивать это хранилище на предмет значения капчи, в цикле с задержкой.

В это время другой скрипт в браузере оператора, упскай опрашивает хранилище на предмет капчи, и показывает оператору.
после того как оператор введет капчу, пускай остылает данные в общее хранилище.


Обще хранилище может быть базой, или файлами
Капча как правило завязана с сессией, и если помещать капчу в хранилище, а потом другим скриптом опрашивать, актуальность ее теряется. Тут необходимо делать все в одном скрипте. Лично я бы еще набросал простенький html-интерфейс и ajax-запросы на парсинг и получения капчи для ввода.
 
Лично я пока пришёл к выводу, что проще всего будет выводить капчу и форму для её ввода яваскриптом window.open в новой вкладке из текущего PHP-скрипта. Этот PHP-скрипт будет ждать, пока в определённом файле не появятся данные. Эти данные будут записаны в файл путём ввода в форму из той самой новой вкладки.

ЗЫ: Лучше конечно не в новой вкладке это сделать, а в диалоговом всплывающем (или как его там) окне, но я не знаю как сиё осуществить, не нашёл, только текст нашёл как там вывести (через prompt(text)).
 
Логически: сохраняем в переменную последние пару строк спарсенного, после ввода капчи ищем "переменную" на странице.
 
1. В начале каждого цикла парсинга проверям флаг
2. Если все ок, то парсим дальше
3. Если неок, то выводим любым способом формочку, куда надо вбить капчу
4. Возвращаемся к пункту 1
Дергаешь курлом, парсишь регуляркой. Только не забудь подхватывать сессию.
Надеюсь алгоритм понятен
 
Сохраняю данные формы в сессию, каптчу кладу в темп под именем captcha.gif, и выдаю в браузер каптчу и форму с вводом кода (скрипт естесна полностью останавливается), затем получив из браузера каптчу в скрипте из сессии вытягиваю данные для формы, добавляю каптчу и постю. Это однопоточная авторегистрация с ручным вводом каптчи.

Еще вариант использовать антикаптчу (там есть примеры на PHP:( когда нужно ввести каптчу, отправляешь ее на сервер антикаптчи и входишь в while цикл где дергаешь каждые 5 секунд сервер антикаптчи: "ну чо там? разгадал?".
 
Сохраняю данные формы в сессию, каптчу кладу в темп под именем captcha.gif, и выдаю в браузер каптчу и форму с вводом кода (скрипт естесна полностью останавливается), затем получив из браузера каптчу в скрипте из сессии вытягиваю данные для формы, добавляю каптчу и постю. Это однопоточная авторегистрация.
Так при многопоточности ничего не меняется. Просто из-за недальновидности разработчиков php приходится юзать костыли вроде этого:
 
Так при многопоточности ничего не меняется. Просто из-за недальновидности разработчиков php приходится юзать костыли вроде этого:
*** скрытое содержание ***
Для многопоточности с ручным вводом каптчи думал такую схему:
- запрос ввода каптчи сохраняется в стек (таблица в БД, или просто файлы в папке)
- в браузере загружена страничке, где по таймауту аяксом идут обращения к скрипту, который вытягивает из стека все запросы ввода каптчи и отдает их в браузер
- скрипт себе работает и пополняет стек, потому имеет смысл настраивать скорость, чтобы оператор успевал вводить каптчи, а также возможность приостановить скрипт (пауза) или вовсе остановить
- в браузере в представлении матрицы появляются запросы ввода каптчи по мере их появления в стеке на сервере и убираются после ввода оператором
- когда оператор вводит каптчу, то ответ отправляется аяксом на сервер и скрипт на сервере (будет работать паралельно) восстанавливает работу и заканчивает регистрацию

ЗЫ: Лучше конечно не в новой вкладке это сделать, а в диалоговом всплывающем (или как его там) окне, но я не знаю как сиё осуществить, не нашёл, только текст нашёл как там вывести (через prompt(text)).
Посмотрите на jQuery UI Dialog
 
1) Для многопоточности с ручным вводом каптчи думал такую схему:
- запрос ввода каптчи сохраняется в стек (таблица в БД, или просто файлы в папке)
- в браузере загружена страничке, где по таймауту аяксом идут обращения к скрипту, который вытягивает из стека все запросы ввода каптчи и отдает их в браузер
- скрипт себе работает и пополняет стек, потому имеет смысл настраивать скорость, чтобы оператор успевал вводить каптчи, а также возможность приостановить скрипт (пауза) или вовсе остановить
- в браузере в представлении матрицы появляются запросы ввода каптчи по мере их появления в стеке на сервере и убираются после ввода оператором
- когда оператор вводит каптчу, то ответ отправляется аяксом на сервер и скрипт на сервере (будет работать паралельно) восстанавливает работу и заканчивает регистрацию
2) По ссылке дан ответ: "No article"
Вцелом разумно если капчи лезут непрерывно. У автора, насколько я понял, после ввода капча пропадает на время, так что можно обойтись меньшими ухищрениями.
Прошу прощения, линк побился, вот правильный:
 
Назад
Сверху