2013-06-27 3 views
4

Я пытаюсь зеркально отразить сайт, который использует сумасшедшее меню JavaScript, созданное на клиенте. Оба wget и httrack не могут загрузить весь сайт, потому что ссылки просто отсутствуют до запуска JS-кода. Что я могу сделать?Как зеркалировать сайт с помощью меню JavaScript?

Я попытался загрузить главную страницу индекса в браузер. Это запускает JS-код, создается меню, и я могу выгрузить полученный DOM в файл HTML & из этого файла. Это загружает больше файлов, поскольку ссылки уже находятся в источнике. Но, очевидно, зеркалирование вскоре ломается на других, недавно загруженных страницах, содержащих неинтерпретированное меню JS.

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

ответ

2

Я использовал HtmlUnit, чтобы добиться больших успехов даже на сайтах, где объекты обфусканы динамическими элементами.

+1

Звучит неплохо, спасибо. Есть ли инструмент зеркалирования на основе HtmlUnit? (В противном случае написать мой собственный с конверсией ссылок à la 'wget' будет примерно такой же работой, как прокси-сервер фильтрации.) – zoul

1

В моем случае это не поможет, но, возможно, это будет полезно кому-то; так выглядит простой прокси-сервер фильтрации в Perl:

#!/usr/bin/env perl 

use HTTP::Proxy; 
use HTTP::Proxy::BodyFilter::simple; 

my $proxy = HTTP::Proxy->new(port => 3128); 
$proxy->push_filter(
    mime => 'text/html', 
    response => HTTP::Proxy::BodyFilter::simple->new(
     sub { ${ $_[1] } =~ s/foo/bar/g } 
    ) 
); 
$proxy->start;