Сканирование / очистка веб-страниц на основе GWT - PullRequest
1 голос
/ 05 декабря 2011

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

Я прав или есть способ разумного сканирования данных?

Ответы [ 2 ]

1 голос
/ 10 января 2012

Вы можете сделать это, используя htmlunit и WebClient:

//real code mixed with pseudo-code:
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3);
Map<String, String> urls = new HashMap<->();
LinkedList<String> urlsToVisit = new LinkedList<->();
urlsToVisit.put("http://some_gwt_app.com/#!home");
while (!urlsToVisit.isEmpty()) {
    String page = urlsToVisit.remove();
    if (urls.containsKey(page)) { 
        continue;
    }
    String rendered = webClient.getPage(page);
    urls.put(page, rendered);
    urlsToVisit.addAll(extractLinks(page));
}

Возможно, вам придется немного поэкспериментировать с параметрами WebClient. В моем случае это похоже на хорошую работу:

webClient.setThrowExceptionOnScriptError(false);
webClient.setRedirectEnabled(true);
webClient.setJavaScriptEnabled(true);
// important! Give the headless browser enough time to execute
// JavaScript. The exact time to wait may depend on your application.
webClient.waitForBackgroundJavaScript(20000);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
1 голос
/ 10 января 2012

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

На некоторых простых GWT я получил царапины, чтобы разобрать JavaScript и запустить части как есть,но я не могу заставить всех работать.

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