Как получить код проверки текстовой формы при автоматическом доступе к сайту в Perl? - PullRequest
1 голос
/ 25 февраля 2010

Я играю с Win32 :: IE: Механизировать, чтобы попытаться автоматически получить доступ к некоторым сайтам, требующим аутентификации.Пока я достиг умеренного успеха, например, я могу автоматически войти в свой почтовый ящик 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 ]

3 голосов
/ 25 февраля 2010

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

CAPTCHA или Captcha - это тип тест ответ-вызов, используемый в вычисления, чтобы гарантировать, что ответ не генерируется компьютером.

2 голосов
/ 25 февраля 2010

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

0 голосов
/ 26 февраля 2010

Благодаря james2vegas, zoul и Shoban.

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

Мой подход такой:

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

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

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

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

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

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

0 голосов
/ 25 февраля 2010

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

...