supposons que je doive exécuter un ensemble de procédures sur un site Web particulier Remplir des formulaires, cliquer sur le bouton Envoyer, renvoyer les données au serveur, recevoir la réponse, refaire quelque chose en fonction de la réponse et renvoyer les données. sur le serveur du site Web ... Je sais qu'il existe un module de navigateur Web en python, mais je souhaite le faire sans faire appel à un navigateur Web. Il faut être un script pur.
Existe-t-il un module disponible en python, qui peut m'aider à le faire?
Merci
Vous pouvez également consulter mécaniser . Il est destiné à gérer "la navigation Web programmée avec état" (selon leur site).
Selenium fera exactement ce que vous voulez et gère javascript
Toutes les réponses sont anciennes, je recommande et je suis un grand fan de demandes
De la page d'accueil:
Le module urllib2 standard de Python fournit la plupart du HTTP fonctionnalités dont vous avez besoin, mais l'API est complètement cassé. Il a été construit pour un temps différent - et un web différent. Cela nécessite un énorme La quantité de travail (même les substitutions de méthode) pour effectuer le plus simple de les tâches.
Les choses ne devraient pas être comme ça. Pas en Python.
Je pense que la meilleure solution est la combinaison de requêtes et BeautifulSoup , je voulais juste mettre à jour la question afin qu'elle puisse être mise à jour.
Selenium http://www.seleniumhq.org/ est la meilleure solution pour moi. vous pouvez le coder facilement avec python, Java ou tout autre langage de programmation. et une simulation facile qui convertit en programme.
Ne pas oublier zope.testbrowser qui est enveloppant autour de mécaniser .
zope.testbrowser fournit un navigateur Web programmable facile à utiliser avec un accent particulier sur les tests.
Il existe de nombreux modules Python intégrés qui pourraient vous aider. Par exemple urllib et htmllib .
Le problème sera plus simple si vous modifiez votre approche. Vous dites que vous voulez "remplir des formulaires, cliquer sur le bouton d'envoi, renvoyer les données au serveur, recevoir la réponse", ce qui ressemble à un processus en quatre étapes.
En fait, vous devez publier des données sur un serveur Web et obtenir une réponse.
C'est aussi simple que:
>>> import urllib
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params)
>>> print f.read()
(exemple tiré de la documentation urllib).
Ce que vous faites avec la réponse dépend de la complexité du code HTML et de ce que vous voulez en faire. Vous pouvez l’analyser avec une expression régulière ou deux, ou bien utiliser la classe htmllib.HTMLParser, ou peut-être un analyseur plus souple de niveau supérieur, tel que Beautiful Soup .
Selenium2 inclut webdriver, qui a python bindings et permet d’utiliser le pilote htmlUnit sans tête, ou de passer à Firefox ou à Chrome pour le débogage graphique.
HTMLUNIT est le package si vous êtes un développeur Java . http://htmlunit.sourceforge.net/apidocs/index.html
J'ai trouvé que le plugin iMacros Firefox (qui est gratuit) fonctionne très bien.
Il peut être automatisé avec Python à l'aide d'interfaces d'objet Windows COM. Voici un exemple de code provenant de http://wiki.imacros.net/Python . Il nécessite Extensions Windows Python :
import win32com.client
def Hello():
w=win32com.client.Dispatch("imacros")
w.iimInit("", 1)
w.iimPlay("Demo\\FillForm")
if __name__=='__main__':
Hello()
La meilleure solution que j'ai trouvée (et en train d'implémenter) est la suivante: - scripts en python utilisant Selenium webdriver - navigateur sans tête PhantomJS (si Firefox est utilisé, vous aurez une interface graphique et serez plus lent)
Internet Explorer spécifique, mais plutôt bon:
L'avantage par rapport à urllib/BeautifulSoup est qu'il exécute également le Javascript car il utilise IE.
Vous voulez probablement urllib2 . Il peut gérer des tâches telles que HTTPS, les cookies et l’authentification. Vous voudrez probablement aussi BeautifulSoup pour vous aider à analyser les pages HTML.
Vous pouvez consulter ces diapositives du last italien italien pycon (pdf): L’auteur a énuméré la plupart des bibliothèques pour faire du scraping et de la navigation automatique en python. alors vous pouvez y jeter un coup d'oeil.
J'aime beaucoup twill (ce qui a déjà été suggéré), qui a été développé par l’un des auteurs de nose et qui vise spécifiquement à tester des sites Web.
httplib2 + beautifulsoup
Utilisez firefox + firebug + httpreplay pour voir ce que le javascript transmet au navigateur depuis le site Web. En utilisant httplib2, vous pouvez essentiellement faire de même via post et obtenir
Pour l'automatisation, vous voudrez certainement vérifier
webbot
Il est basé sur Selenium et offre beaucoup plus de fonctionnalités avec très peu de code, comme la recherche automatique d’éléments pour effectuer des actions telles que click, type en fonction de vos paramètres.
Cela fonctionne même pour les sites avec des noms de classe et des identifiants changeant de manière dynamique.
Voici la doc: https://webbot.readthedocs.io/