Question

La compagnie de bus que j'utilise gère un site Web épouvantable (hébreu,Anglais) qui fait d'une simple requête « Horaire de A à B aujourd'hui » un cauchemar.Je soupçonne qu'ils essaient d'encourager l'utilisation du coûteux système de requête par SMS.

J'essaie de récolter l'intégralité du calendrier du site, en soumettant la requête pour chaque point possible à chaque point possible, ce qui totaliserait environ 10 000 requêtes.Le résultat de la requête apparaît dans une fenêtre contextuelle.Je suis assez nouveau dans la programmation Web, mais je connais les aspects de base de Python.

  1. Quelle est la manière la plus élégante d'analyser la page, de sélectionner une valeur dans un menu déroulant et d'appuyer sur « soumettre » à l'aide d'un script ?
  2. Comment puis-je donner au programme le contenu de la nouvelle fenêtre contextuelle en entrée ?

Merci!

Était-ce utile?

La solution

Twill est un langage de script simple pour la navigation Web. Il arrive au sport un python api .

  

sergé est essentiellement une coque mince autour du paquet de mécaniser. Toutes les commandes sont mis en oeuvre en sergé dans le fichier commands.py et pyparsing fait le travail de l'analyse de l'entrée et le convertir en commandes de python (voir parse.py). Travaux de support interactif et readline est mis en oeuvre par l'intermédiaire du module de cmd (à partir de la bibliothèque standard Python).

Un exemple de « pression » de la soumettre doc lien ci-dessus:

from twill.commands import go, showforms, formclear, fv, submit

go('http://issola.caltech.edu/~t/qwsgi/qwsgi-demo.cgi/')
go('./widgets')
showforms()

formclear('1')
fv("1", "name", "test")
fv("1", "password", "testpass")
fv("1", "confirm", "yes")
showforms()

submit('0')

Autres conseils

Je vous suggère d'utiliser mécaniser. Voici un extrait de code de leur page qui montre comment soumettre un formulaire:


import re
from mechanize import Browser

br = Browser()
br.open("http://www.example.com/")
# follow second link with element text matching regular expression
response1 = br.follow_link(text_regex=r"cheese\s*shop", nr=1)
assert br.viewing_html()
print br.title()
print response1.geturl()
print response1.info()  # headers
print response1.read()  # body
response1.close()  # (shown for clarity; in fact Browser does this for you)

br.select_form(name="order")
# Browser passes through unknown attributes (including methods)
# to the selected HTMLForm (from ClientForm).
br["cheeses"] = ["mozzarella", "caerphilly"]  # (the method here is __setitem__)
response2 = br.submit()  # submit current form

# print currently selected form (don't call .submit() on this, use br.submit())
print br.form

Vous souhaitez très rarement "appuyer sur le bouton de soumission", plutôt que de faire des requêtes GET ou POST directement à la ressource du gestionnaire.Regardez le HTML où se trouve le formulaire et voyez quels paramètres il est soumis à quelle URL, et s'il s'agit d'une méthode GET ou POST.Vous pouvez former ces requêtes avec urllib(2) assez facilement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top