2010-07-15 7 views
7

Ich kann für das Leben von mir nicht, Htmlunit rig dieser Seite zu greifen nach oben:Unmögliche Site für HtmlUnit?

im Hintergrund laufen

http://www.bing.com/travel/flight/flightSearch?form=FORMTRVLGENERIC&q=flights+from+SLC+to+BKK+leave+07%2F30%2F2010+return+08%2F11%2F2010+adults%3A1+class%3ACOACH&stoc=0&vo1=Salt+Lake+City%2C+UT+%28SLC%29+-+Salt+Lake+City+International+Airport&o=SLC&ve1=Bangkok%2C+Thailand+%28BKK%29+-+Suvarnabhumi+International&e=BKK&d1=07%2F30%2F2010&r1=08%2F11%2F2010&p=1&b=COACH&baf=true

Ich bin sicher, dass es mit den riesigen Mengen von Skripten zu tun hat. Vielleicht erhalten diese Skripte nicht genug Zeit, um vollständig geladen zu werden?

Ich habe auch versucht, einfach bing.com/travel zu greifen, und auch keinen Erfolg. Es bricht die getPage-Funktion des neuen HtmlPage-Clients.

Der Ausgang gibt eine Fülle von runtimeErrors („Daten notwendig, diesen Vorgang abzuschließen sind noch nicht verfügbar“), die alle für den gleichen Quellnamen („http://www.bing.com/travel/jsxc.vjs?a=common&v=5.5.0-1278007084280“)

dann ein paar Ausnahmen für einen fehlenden „geworfen ("in ein paar Skripte auf bing.com.

dann Javascript es nennt, dann endet abrupt.

ich weiß, das eine Handvoll Probleme sein könnte, die andere vielleicht nicht sehen können, und so, wenn es keine Vorschläge, würde jemand etwas dagegen tun, diese beiden Seiten durch eine Test-Implementierung ihrer eigenen Ht mlUnit verwenden und sehen, ob sie grundlegende Ausgabe der XML-oder Text-Ergebnisse erhalten können? Ich versuche hier nichts Besonderes zu machen, ich möchte nur einen einfachen Text oder eine XML-Ausgabe der Ergebnisse erhalten.

Es wäre praktisch zu wissen, ob die Implementierung von jemand anderem funktioniert, damit ich die mysteriöse Verwicklung von Geschworenen bis zur Fertigstellung aufrechterhalten kann.

Code:

import com.gargoylesoftware.htmlunit.html.HtmlPage; 
import com.gargoylesoftware.htmlunit.WebClient; 

public class test { 

public static void main(String[] args) throws Exception { 

     WebClient client = new WebClient(); 
     System.out.println("webclient loaded"); 

     HtmlPage currentPage = client.getPage("http://www.bing.com/travel/flight/flightSearch?form=FORMTRVLGENERIC&q=flights+from+SLC+to+BKK+leave+07%2F30%2F2010+return+08%2F11%2F2010+adults%3A1+class%3ACOACH&stoc=0&vo1=Salt+Lake+City%2C+UT+%28SLC%29+-+Salt+Lake+City+International+Airport&o=SLC&ve1=Bangkok%2C+Thailand+%28BKK%29+-+Suvarnabhumi+International&e=BKK&d1=07%2F30%2F2010&r1=08%2F11%2F2010&p=1&b=COACH&baf=true"); 
     client.waitForBackgroundJavaScript(10000); 
     System.out.println("htmlpage init'd"); 

     //System.out.println(currentPage.getTitleText()); 
     String textSource = currentPage.asXml(); 
     System.out.println(textSource); 

} 

} 

Dank!

Antwort

3

Versuchen Hinzufügen dieses:

client.setThrowExceptionOnScriptError(false) ; 

Es dauert eine lange Zeit zu laufen, und der Junge es aus Holzeinschlag nicht spucken ... aber schließlich eine Seite aus:

htmlpage init'd 
<?xml version="1.0" encoding="utf-8"?> 
<html id=""> 
    <head> 
    ... 
+0

gut Sohn einer Pistole ... dank! so ist es lohnenswert durch behebt die Fehler und Warnungen? Solange ich eine Seite heraus bekomme, ist es vielleicht nicht die Mühe wert ... –

+0

Soweit ich mich erinnere, war es nur Logging-Info. Das ist typisch für meine HtmlUnit Tests, die Konsole spuckt wie verrückt Wenn die Seite ausgegeben wird, machen Sie sich keine Sorgen darüber –

+0

Ich möchte nur bestätigen, dass das Hinzufügen der obigen Zeile wirklich funktioniert. Ich habe auch das gleiche Problem - einen Fehler bekommen, der besagt, dass ich einen veralteten JS-Inhalt während des Ladens der Seite geladen habe. Bei der automatischen Übermittlung von Formularen tritt schließlich der Fehler auf, dass der JS-Inhalt noch nicht verfügbar ist. Dieselben Protokolle werden weiterhin angezeigt, aber mindestens die RuntimeException, die ausgelöst wird und die gesamte Ausführung stoppt, ist verschwunden. Ich denke jedoch, dass dies nur deshalb der Fall ist, weil das JS, das geladen wurde, für mich nicht notwendig ist, um Formeingabe und -einreichung überhaupt durchzuführen. –

2

Browser haben eine hohe Toleranz für das, was sie als Fehler erkennen könnten (in Javascript, aber auch HTML, CSS und so weiter). Dies liegt teilweise an verschiedenen widersprüchlichen "Standards" :) wie Javascript implementiert wurde. Etwas, das in einem Browser als OK angezeigt wird, führt zu Problemen auf einem anderen. Wenn also alle diese Nachrichten sichtbar gemacht werden, sollte es ein wenig beunruhigend sein.

Um dies zu relativieren - in Internet Explorer gehen Sie in Ihre Einstellungen und überprüfen Sie die "Erweiterte Einstellungen" für "Eine Benachrichtigung über jeden Skript Fehler anzeigen" und durchsuchen Sie dann die gleichen Websites. Sie könnten überrascht sein, wie viel Code IE bekommt, indem Sie einfach ignorieren, was es als Probleme erkennt.

Mit HtmlUnit unter verschiedenen Browsern bringt nur einige dieser Konflikte ans Licht.

HtmlUnit sagen, etwas wie "Ignoriere ...für diesen Browser "ist eine vollkommen gültige Praxis. In meinem Fall bringe ich Daten von einer Website ein, die überprüft, dass alle Benutzer Internet Explorer verwenden (Nein, ich habe keine gute Idee, warum sie das tun), also kann ich ‚t gehen, ohne dass die JavaScript-Fehler zu ignorieren. Interessanterweise funktioniert die Website auch in Ordnung, obwohl IE Im moment gibt es viele Javascript-Fehler denkt.