Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

aller remplir des formulaires en python

+1 vote

Je passe une partie de mon boulot à aller remplir des formulaires sur des sites, et à me débrouiller pour les tenir à jour avec les données que j'ai. Le problème, c'est qu'aucun de ces sites n'a d'API, ou de moyen de le faire programmatiquement.

Mais j'ai toutes mes données également sur mon site, django.

Du coup je veux monter un truc qui le ferait tout seul. En me rencardant sur le net, j'ai eu l'impression que Scrapy pourrait faire ce que je veux, et j'ai dans l'idée d'écrire un module de mon site qui lancerait des petites spider pour aller remplir ces formulaires et tout mettre à jour.

Sauf que je me tâte beaucoup pour savoir si c'est une bonne idée d'architecture, s'il y a pas un truc tout simple, ou si je vais arriver sur un truc ingérable, où il faudra que je rajoute un Celery, et plein d'autres machins.

Du coup, comment vous verriez l'architecture d'un machin comme ça ?

demandé 17-Avr par Spoutnik16 (118 points)

Weboob couvre en palanquée de sites si besoin http://weboob.org/
Sinon le soucis de se parser du HTML c'est que si le markup change notre script ne fonctionne plus du tout.

1 Réponse

+1 vote
 
Meilleure réponse

Tu peux y arriver avec requests (j'ai trouvé scrappy trop compliqué pour mon usage)

Voici un exemple (édité) qui montre un login puis ouverture de page sous un site django.

root = 'www.tonsite.com/'

url_login = root+'login'
page-2 = root+'page2/'

client = requests.session()
password = getpass.getpass()

""" login et récupération du csrftoken """
client.get(url_login)
csrftoken = client.cookies['csrftoken']
# ici les champs à remplir dans ton formulaire de login
login_data = {'username':'mon_id', 'password' : 'mon_pass', 'csrfmiddlewaretoken':csrftoken,}
login_request=client.post(url_login,data=login_data)


"""Lets go to page 2"""
csrftoken = client.cookies['csrftoken']
# de nouveau je prépare les champs du formulaire
p_2_req=client.post(page-2, data={
    'nom' : 'Michu',
    'envoyer_emails' : 1,
    'csrfmiddlewaretoken':csrftoken
    })
# ma page peut avoir du texte    
print(p_2_req.text)
# mais aussi des fichiers attachés
attachment_data = p_2_req.content
name = vir_req.headers['Content-Disposition'].split('filename=')[-1]
rep = "/home/alex/Téléchargements/"
with open(rep+name, 'wb') as f:
    f.write(attachment_data)
répondu 18-Avr par alexmic
sélectionné 19-Avr par Spoutnik16
...