Wie lade ich Ajax mit HtmlUnit?

8
%Vor%

Dieser Code funktioniert, aber ich möchte nur Youtube-Clips zum Beispiel nach Upload-Datum sortieren. Wie macht man das mit HtmlUnit? Ich muss auf Filter klicken, dies sollte Inhalte durch Ajax-Anfrage laden, und dann sollte ich auf den Link "Datum hochladen" klicken. Ich kenne diesen ersten Schritt einfach nicht, um Ajax-Inhalte zu laden. Ist das mit HtmlUnit möglich?

    
Иван Бишевац 22.07.2011, 22:35
quelle

4 Antworten

3

Hier ist ein Weg, es zu tun:

  1. Durchsuchen Sie die Seite wie in Ihrer vorherigen Frage .
  2. Wählen Sie search-lego-refinements block by id.
  3. aus
  4. Verwenden Sie XPath, um zur URL zu navigieren ( //ul/li/a , wenn Sie mit der vorherigen ID beginnen).
  5. Klicken Sie auf den ausgewählten Link.

Das folgende Codebeispiel zeigt, wie es gemacht werden könnte:

%Vor%

Sie könnten auch die korrekte Abfrage-URL ( http://www.youtube.com/results?search_type=videos&search_query=nyan+cat&search_sort=video_date_uploaded ) durchsuchen.

Aber dann müssten Sie Ihre Suchparameter verschlüsseln (ersetzen Sie Leerzeichen zum Beispiel durch + ).

    
Jasper 23.07.2011, 10:35
quelle
3

Das hat für mich funktioniert. Stellen Sie dies ein

%Vor%

Dies würde dazu führen, dass alle Ajax-Aufrufe synchron sind.

So richte ich mein WebClient-Objekt ein

%Vor%     
Varun Tulsian 18.07.2014 09:55
quelle
1

Ich habe früher mit HTMLUnit für ähnliche Zwecke gespielt.

Tatsächlich finden Sie hier alle Informationen, die Sie hier benötigen. HTMLUnit hat die AJAX-Unterstützung standardmäßig aktiviert. Wenn Sie also das Objekt newPage im Code erhalten, können Sie auf der Seite Klickereignisse auslösen (indem Sie das spezifische Element suchen und es als click() -Funktion aufrufen). Der schwierigste Teil ist, dass AJAX asynchron ist, also müssen Sie wait() oder sleep() aufrufen, nachdem Sie einen virtuellen Klick ausgeführt haben, damit der JavaScript-Code auf der Site die Aktionen verarbeiten kann. Dies ist nicht der beste Ansatz, da die Netzwerknutzung sleep() unzuverlässig macht. Sie können etwas auf der Seite finden, das sich ändert, wenn Sie ein Ereignis ausführen, das AJAX-Aufrufe macht (z. B. einen Titel ändert), so dass Sie regelmäßig überprüfen können, ob diese Änderung bereits der Site passiert ist oder nicht. (Ich sollte erwähnen, dass es einen Event Resynchronizer eingebaut in HTMLUnit gibt, aber ich konnte es nicht schaffen, es zu arbeiten wie ich es erwartet habe.) Ich benutze Firebug oder Chrome Entwickler-Toolbar zum Untersuchen der Website. Sie können den DOM-Baum vor und nach AJAX-Aufrufen auschecken und auf diese Weise wissen Sie, wie Sie auf bestimmte Steuerelemente (wie Links und Dropdown-Menüs) auf der Seite verweisen.

Ich würde XPath verwenden, um bestimmte Elemente zu erhalten, z. Sie können dies tun (aus den Beispielen von HTML Unit):

%Vor%

YouTube verwendet AJAX tatsächlich nicht, um auf das Ergebnis zurückzugreifen. Wenn Sie auf das Sortierungsdropdown auf der Ergebnisseite klicken (dies ist ein dekoriertes <button> ), wird ein absolut positioniertes <ul> angezeigt (dies emuliert den Drop-Down-Teil des Combos), der <li> -Elemente für jeden Menüeintrag enthält. <li> -Elemente enthalten ein spezielles <span> -Element mit einem angefügten href -Attribut. Wenn Sie auf das <span> -Element klicken, navigiert JavaScript den Browser zu diesem href -Wert.

Für z. In meinem Fall sieht die Sortierung nach Relevanz <span> element wie folgt aus:

%Vor%

Sie können die Liste dieser Bereiche relativ einfach abrufen, da das Hosting <ul> das einzige untergeordnete Element von <body> ist. Obwohl Sie zuerst auf den Dropdown-Button klicken müssen, wird das <ul> -Element mit allen oben beschriebenen Childs mit Javascript erstellt. Sie können die Sortierung nach Button mit diesem XPath bekommen:

%Vor%

Sie können Ihre XPath-Abfragen testen, z. direkt in Chrome, wenn Sie die Developer Tools und die JavaScript Developer Console über die Symbolleiste öffnen. Dann kannst du so testen:

%Vor%

Ich hoffe, das bringt Sie in die richtige Richtung.

    
NagyI 23.07.2011 07:40
quelle
1
dementiev 20.10.2011 14:00
quelle

Tags und Links