2010-05-20 12 views
0

Je veux créer un script de ligne de commande pour Cygwin/Bash qui se connecte à un site, navigue vers une page spécifique et la compare avec les résultats de la dernière exécution . Jusqu'à présent, je l'ai travailler avec Lynx comme ceci:La bonne façon de scripter périodiquement une page à partir d'un site https

----snpipped, just setting variables---- 
echo "# Command logfile created by Lynx 2.8.5rel.5 (29 Oct 2005) 
----snipped the recorded keystrokes------- 
key Right Arrow 
key p 
key Right Arrow 
key ^U" >> $tmp1 #p, right arrow initiate the page saving 

#"type" the filename inside the "where to save" dialog 
for i in $(seq 0 $((${#tmp2} - 1))) 
do 
    echo "key ${tmp2:$i:1}" >> $tmp1 
done 

#hit enter and quit 
echo "key ^J 
key y 
key q 
key y 
" >> $tmp1 

lynx -accept_all_cookies -cmd_script=$tmp1 https://thewebpage.com/login 

diff $tmp2 $oldComp 
mv $tmp2 $oldComp 

Il ne se sent pas vraiment « droit »: le cmd_script consiste en des actions de l'utilisateur par rapport au lieu de spécifier les noms de lien exact et actions. Donc, si quelque chose sur le site change, change de place, ou qu'un nouveau lien est ajouté - je vais devoir recréer les actions.

Aussi, je ne peux pas vérifier toutes les erreurs, donc je ne peux pas abandonner le script si quelque chose se passe mal (échec de la connexion, etc.)

Une autre alternative que je cherchais à Mechanize est avec Ruby (comme note - J'ai 0 expérience avec Ruby).

Quelle serait la meilleure façon d'améliorer ou de réécrire cela?

Répondre

0

Je pense que le lynx est un excellent outil pour des tâches simples d'automatisation web, mais bien sûr, il a ses limites. Si vous avez besoin d'une vérification d'erreur, vous devriez utiliser l'un des modules de mécanisation pour Perl, Python ou Ruby (si vous ne connaissez aucune de ces langues, Python peut être le plus facile à apprendre). Pour rendre votre script Lynx un peu plus robuste, vous pouvez utiliser la fonction de recherche pour sélectionner des liens. Sur certaines pages en utilisant la liste de liens (l) peut aider. À la fin, j'ajouterais quelques vérifications de santé mentale pour voir si les fichiers téléchargés sont vraiment ceux que vous voulez.

0

Est-ce que wget peut être utile ici?

Il s'agit d'un utilitaire de ligne de commande de téléchargement http, https et ftd. C'est un logiciel libre (GNU). Il dispose de nombreuses options telles que l'authentification et l'horodatage (ne téléchargez un fichier que s'il a été modifié depuis la dernière fois).

http://www.gnu.org/software/wget/

+0

La connexion se fait via un formulaire (qui redirige ensuite vers une interface web), est-ce que wget/curl peut gérer cela? – DarthShader

+0

Je ne suis pas sûr, mais je suppose que vous pouvez encoder les paramètres de connexion dans l'URL (? Username = myname & password = 1234). Dans votre script, vous devez d'abord appeler l'URL de connexion, puis la page qui vous intéresse ... –