2010-07-15 16 views
7

Je ne peux pas, pour la vie de moi, plate-forme HtmlUnit pour attraper ce site:Site impossible pour HtmlUnit?

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

Je suis sûr qu'il a à voir avec les grandes quantités de scripts en cours d'exécution en arrière-plan. Peut-être que ces scripts n'ont pas assez de temps pour être complètement chargés?

J'ai aussi essayé simplement de saisir bing.com/travel, et pas de succès non plus. Il casse la fonction getPage du nouveau client HtmlPage.

La sortie donne une pléthore de runtimeErrors (« les données nécessaires pour terminer cette opération ne sont pas encore disponibles »), tous pour la même sourceName (« http://www.bing.com/travel/jsxc.vjs?a=common&v=5.5.0-1278007084280 »)

Puis une exception couple jeté un manque « ("dans un ensemble de scripts sur bing.com.

ensuite, il appelle javascript, puis se termine brusquement.

Je sais que cela pourrait être une poignée de problèmes que d'autres pourraient ne pas être en mesure de voir, et donc s'il y a pas de suggestions, quelqu'un aurait l'esprit de pompage de ces deux sites à travers un test de mise en œuvre de leur propre Ht mlUnit utiliser et voir si elles peuvent obtenir la sortie de base des résultats XML ou texte? Je n'essaie pas de faire quelque chose de fantaisie ici, juste obtenir un texte de base ou une sortie XML des résultats.

Il serait utile de savoir si la mise en œuvre de quelqu'un d'autre fonctionne afin que je puisse continuer à truquer le mien à la fin.

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); 

} 

} 

Merci!

Répondre

3

Essayez d'ajouter ceci:

client.setThrowExceptionOnScriptError(false) ; 

Il prend beaucoup de temps à courir, et le garçon, il ne crachent ... l'exploitation forestière, mais finalement une page est sorti:

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

fils bien d'une arme à feu ... merci! donc est-il la peine d'aller jusqu'à Corrigez les erreurs et les avertissements - tant que je reçois une page, peut-être que cela n'en vaut pas la peine ... –

+0

D'après ce dont je me souviens, c'était juste une information de journalisation, c'est typique de mes tests HtmlUnit, la console crache comme un fou Si la page sort, ne vous inquiétez pas à ce sujet –

+0

Je veux juste confirmer que l'ajout de cette ligne ci-dessus fonctionne vraiment. J'ai eu le même problème aussi - obtenir une erreur qui dit que je charge un contenu JS obsolète pendant le chargement de la page. Puis finalement, lors de la soumission automatique de formulaire, l'erreur est que le contenu JS n'est pas encore disponible. Les mêmes journaux apparaissent toujours, mais au moins le RuntimeException qui est levé et arrête l'exécution entière est parti. Cependant, je pense que c'est seulement parce que le JS qui était en train d'être chargé n'est pas nécessaire pour moi de compléter la saisie et la soumission du formulaire en premier lieu. –

2

navigateurs ont une grande tolérance pour ce qu'ils pourraient détecter les erreurs (en Javascript, mais aussi HTML, css, etc.). C'est en partie à cause de diverses "normes" contradictoires :) de la façon dont Javascript a été implémenté. Quelque chose qui semble OK sur un navigateur obtient des problèmes sur un autre. Donc, quand tous ces messages sont rendus visibles, cela devrait être un peu déconcertant. Pour mettre cela en perspective - dans Internet Explorer allez dans vos paramètres et cochez les "Paramètres avancés" pour "Afficher une notification à propos de chaque erreur de script", puis parcourir les mêmes sites. Vous pourriez être surpris par la quantité de code obtenue par IE en ignorant ce qu'il pourrait détecter comme des problèmes. L'utilisation de HtmlUnit sous différents navigateurs met en lumière certains de ces conflits.

Dire à HtmlUnit de faire quelque chose comme "Ignorer ...Dans ce cas, j'apporte des données d'un site qui vérifie que tous les utilisateurs utilisent Internet Explorer (Non, je ne sais pas pourquoi ils font ça), donc je peux « t procéder sans ignorer les erreurs javascript. Fait intéressant, le site fonctionne très bien, même si IE pense y êtes beaucoup d'erreurs Javascript.