Perl - отправить действие Javascript на хост - PullRequest
0 голосов
/ 17 марта 2011

Я строю Spider в Perl и у меня проблема:

Сайт, на котором я хочу разместить паука, использует JavaScript для проверки возраста, и я не знаю, как преодолеть это в Perl ...?

Сценарий выглядит так:

<script type = "text/javascript">

function set_age_verified(){

    new Request({

        method: "post",

        url: "/user/set_age_verified"

    }).send();

    $('age_verification').setStyles({visibility: 'hidden', display: 'none'});

    $('page_after_verification').setStyles({visibility: 'visible', display: 'block'});

    return false;

}

</script>

А вот событие OnClick:

<a href="#" onclick="return set_age_verified();"><img src="http://example.com/age-verification-enter.gif" alt="ENTER"></a>

Ответы [ 4 ]

2 голосов
/ 17 марта 2011

Функция имеет два эффекта.Один из них - отправить запрос по URL-адресу "/ user / set_age_verified", а другой - изменить видимость отображения некоторого HTML-кода.

Ваш паук может легко игнорировать второй эффект, но, вероятно, первый эффект,идя на сервер, устанавливает некоторые cookie или переменные сервера, которые потребуются серверу.

Вам фактически не нужно запускать javascript , пока сервервидит те же данные POST.

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

Любые возвращенные файлы cookie или аналогичные файлы должны быть записаны вами - хотя об этом может позаботиться ваша HTTP-библиотека.

1 голос
/ 17 марта 2011

Кроме того, в Firefox HTTPHeaders - ваш лучший друг.

Включите его, вручную выберите все, что вам нужно для запуска Javascript и отправки на сервер, затем вернитесь в окно HTTPHeaders.,Он покажет вам, что именно это событие Javascript отправляет на сервер (GET или POST + данные, даже если это HTTPS), а также ответ сервера.

1 голос
/ 17 марта 2011

Посмотрите на модуль WWW :: Mechanize :: Firefox . Это позволяет вам обрабатывать некоторые JavaScript.

1 голос
/ 17 марта 2011

Какие модули Perl вы используете? WWW :: Mechanize имеет плагин AJAX , хотя он давно не обновлялся. Я думаю, вы также можете посмотреть что-то вроде WWW :: Selenium .

Но могу поспорить, что в запросе AJAX будет введен какой-то HTML-код, который требует от пользователя ввода некоторых данных, а затем отправки формы. Довольно сложно охватить все основания для этого общего случая ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...