Как мне получить проверочный код текстовой формы при автоматическом доступе к сайту в Perl?

StackOverflow https://stackoverflow.com/questions/2331956

Вопрос

Я играю с Win32:: IE:Mechanize, чтобы попытаться автоматически получить доступ к некоторым сайтам, требующим аутентификации.Пока я добился умеренного успеха, например, я могу автоматически входить в свой почтовый ящик yahoo.Но я обнаружил, что многие сайты используют какой-то механизм проверки изображений, который, возможно, называется CAPTCHA.Я ничего не могу им сделать.Но один из сайтов, к которым я пытаюсь получить автоматический доступ, использует обычный текстовый проверочный код.Он состоит из четырех цифр, выбираемых и копируемых.Но их нет в исходном файле, который можно извлечь с помощью

$mech->content;

Я искал ключевое слово, которое появляется на веб-странице, но не в исходном файле, по всем файлам во временных файлах Интернета, но все еще не могу его найти.

Есть какие-нибудь идеи, что происходит?Я подозревал, что проверочный код был каким-то образом скрыт в каком-то файле cookie, но, похоже, я не могу его найти: (

Ниже приведен код, который выполняет все требования к полям, за исключением кода подтверждения:

use warnings;
use Win32::IE::Mechanize;

my $url = "http://www.zjsmap.com/smap/smap_login.jsp";
my $eccode = "myeccode";
my $username = "myaccountname";
my $password = "mypassword";
my $verify = "I can't figure out how to let the script get the code yet"

my $mech = Win32::IE::Mechanize->new(visible=>1);
$mech->get($url);
sleep(1); #avoids undefined value error
$mech->form_name("BaseForm");
$mech->field(ECCODE => $eccode);
$mech->field(MEMBERACCOUNT => $username);
$mech->field(PASSWORD => $password);
$mech->field(verify => $verify);
$mech->click();

Как всегда, мы будем очень признательны за любые предложения / комментарии :)

Обновить

Я придумал не очень умный способ решить эту проблему.Пожалуйста, прокомментируйте мой собственный ответ, опубликованный ниже.Спасибо, как всегда :)

Это было полезно?

Решение 4

Спасибо james2vegas, зоулу и Шобану.

Я, наконец, самостоятельно придумал не очень умный, но, по крайней мере, работоспособный способ решения проблемы, которую я описал здесь.Я хотел бы поделиться этим здесь.Я думаю, что подход, предложенный @james2vegas, вероятно, намного лучше...но в любом случае я учусь на этом пути.

Мой подход заключается в следующем:

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

Для этого я использую функции sendkeys в модуле Win32::Guitest, чтобы выполнить "Выбрать все" и "Скопировать" на страницу входа в систему.

Затем я использую Win32: Clipboard для получения содержимого буфера обмена, а затем регулярное выражение для извлечения кода.Что- то вроде этого:

$verify = Win32::Clipboard::GetText();
$verify =~ s/.* (\d{4}).*/$1/msg;

Несколько мыслей:

Случайное число генерируется чем-то вроде этого в Perl мой $random_number = int (rand(8999)) + 1000;#var random_number = ранд (1000,10000);И затем он проверяет, является ли $verify == $random_number .Я не знаю, как определить значение $ random_number только для одного сеанса.Я думаю, что это хранится где-то в памяти.Если бы я мог зафиксировать значение напрямую, то у меня не было бы столько проблем с использованием того или иного дополнительного модуля.

Другие советы

Это причина, по которой они существуют.Чтобы остановить программу, подобную вашей, чтобы делать автоматизированные вещи ;-)

КАПЧА или Captcha - это тип теста "запрос-ответ", используемого в вычислениях для гарантии того, что ответ не генерируется компьютером.

Это, по-видимому, неуместное число.Страница использует его в 3 местах:генерируя его;отображение его в форме рядом с полем ввода для него;и проверка того, что входное значение равно выбранному случайным образом числу.То есть это проверка только для клиента.Тем не менее, если вы отключите javascript, я предполагаю, что, похоже, важные файлы cookie не будут установлены.Если вы можете выполнить JavaScript в контексте страницы (вы должны быть в состоянии сделать это с помощью вызова метода get и URI javascript), вы могли бы изменить значение random_number на f.e.42 и заполните это в форме.

Код вставляется с помощью JavaScript – отключите JS, перезагрузите страницу и увидите, как она исчезнет.Вам нужно порыться в JS-коде, чтобы получить представление о том, откуда он взят и как его воспроизвести.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top