GWTを使用して構築され、AJAX呼び出しにGWT RPCメカニズムを使用するWebページをクロールしようとしています。私がクロールしようとしているページは私のものではないので、私はサーバー側を編集できません。私はGWTとその最初の数日間のことから非常に新しくなっています - あなたとあなたのケースのインターフェースを持っていなければ、データをデシリアライズできないと思います。GWTベースのWebページのクロール/削除
正しいですか、データをインテリジェントにクロールする方法はありますか?
GWTを使用して構築され、AJAX呼び出しにGWT RPCメカニズムを使用するWebページをクロールしようとしています。私がクロールしようとしているページは私のものではないので、私はサーバー側を編集できません。私はGWTとその最初の数日間のことから非常に新しくなっています - あなたとあなたのケースのインターフェースを持っていなければ、データをデシリアライズできないと思います。GWTベースのWebページのクロール/削除
正しいですか、データをインテリジェントにクロールする方法はありますか?
あなたがhtmlunitとWebクライアントを使用してそれを行うことができます:あなたはWebクライアントオプションで少し実験が必要になる場合があります
//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));
}
。 - 私はDOMを手に入れる前に、ジャバスクリプトが実行されるように強制的に
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());
私は暮らしのために擦り傷をつけています.GWTは、ほとんど常に私を狂ってしまうフレームワークです。シリアライズされた、人間が読めないパラメタを渡すという事実は、私がサイトにアクセスするロジックを取り除くのを妨げます。
いくつかの単純なGWTでは、私はJavaScriptを解析し、実行中の部分をそのまま解析する作業をしていますが、すべてを動作させることはできません。
おそらく設計通りです。 –
私はhtmlunitを使用してそれを行うことができました。私の場合、これらは、良い仕事をするように見えます。 – gokul