2010-03-11 3 views
3

J'écris un programme perl qui fait une simple commande get pour récupérer les résultats et les traiter. Mais le site a été mis à jour et a maintenant un composant Java qui gère les résultats (donc les données réelles ne sont plus dans le code source).Comment Perl peut-il interagir avec une forme ajax?

Ceci est le site: http://wro.westchesterclerk.com/legalsearch.aspx

Essayez de mettre à:
Index: 11103
Année: 2009

Je veux être en mesure de pro entrer grammaticalement le "numéro d'index" et " année "au bas du formulaire où il est dit" recherche par numéro "et récupère ensuite les résultats listés à côté.

J'ai écrit de nombreux programmes en Perl qui transmettent simplement des variables via l'URL et les résultats sont listés dans le code source, donc c'est facile à analyser. (L'utilisation LWP: Simple)

Comme:

$html = get("http://www.url.com?id=$somenum&year=$someyear") 

Mais cela est tout à fait nouveau pour moi et je ne sais pas par où commencer. Je connais un peu le LWP: UserAgent et Mechanize.

J'apprécierais vraiment toute aide.

Merci!

+0

Voulez-vous dire Java ou Javascript? http://www.sislands.com/coin70/week1/javajs.htm Indice: le J dans AJAX ne signifie pas Java. – daotoad

+0

Bonne question! Je suis un peu gêné (surtout depuis que j'ai un diplôme en CS) mais je ne le sais pas vraiment. J'ai fait une supposition (probablement idiote) qu'il doit être ajax parce qu'il est en train de redessiner seulement une partie de la page sans recharger la page entière. Au moins, je sais que le A est synonyme d'asynchrone! – Jeff

Répondre

2

Il est peut-être plus logique d'utiliser l'un des modules qui gère un navigateur. Quelque chose comme Mozilla::Mechanize ou les outils de sélénium.

Un navigateur sait mieux comment interagir avec le serveur en utilisant AJAX et rendre le DOM et ainsi de suite, donc construisez votre script en plus de cette capacité.

0

Ce que vous demandez de faire dans ce cas est difficile. Pas impossible mais difficile.

méthode A: Vous pouvez passer au crible leur code javascript. Qu'est-ce que leur "ajax" fait est de faire une demande get/post à une autre page Web et de charger dynamiquement les résultats. Si vous pouvez déchiffrer ce que ce lien est et les arguments appropriés, vous pouvez continuer à utiliser get. Je recommanderais Obtenir le plugin firebug et tout autre outil qui vous aidera à désobstruer leur javascript.

Si votre programme pouvait accéder à un navigateur Web (avec support javascript url comme firefox). Vous pouvez programmer, aller à ces adresses, puis attendez un moment et obtenir vos données.

http://wro.westchesterclerk.com/legalsearch.aspx 
javascript: function go() { document.getElementById('ctl00_tbSearchArea__ctl1_cphLegalSearch_splMain_tmpl0_tbLegalSearchType__ctl0_txtInde xNo').value=11109; document.getElementById('ctl00_tbSearchArea__ctl1_cphLegalSearch_splMain_tmpl0_tbLegalSearchType__ctl0_txtYear').value='09';searchClick();} go(); 

C'est une méthode que nous avons utilisé avec mozembed pour obtenir ce genre de choses autour programatically. Récemment, nous sommes passés à Web Kit. Et pour le supprimer de prendre un écran vidéo, nous avons utilisé Xvfb/Xvnc pour créer un bureau virtuel pour charger le navigateur.


Ce sont les méthodes que je suis venu avec jusqu'à présent. Faites-moi savoir si vous venez avec un autre. Aussi j'espère que j'ai aidé.

3

Ce genre de question se pose beaucoup. La réponse standard est Wireshark.Je l'utilisais simplement sur ce site Web avec les données de test que vous avez données et j'ai extrait une seule requête POST responsable. Cela vous permet de contourner Javascript tout à fait.

+0

Nice. Je vais devoir essayer ça. –

+1

http://stackoverflow.com/questions/2118415 Exécutez une capture, filtrez par HTTP, sélectionnez la requête, choisissez Suivre le flux TCP depuis le menu contextuel. – daxim

Questions connexes