IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

automatiser une reservation sur un site avec identification


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Par défaut automatiser une reservation sur un site avec identification
    Bonjour
    Voila je me lance enfin dans le bain pour mon premier script python... et il est indispensable pour mon taf sii je veux esperer gagner mes sous...

    Voila je dois effectuer une reservation sur un site https necessitant loggin et password a une heure fixe toute les semaine...
    J arrive a obtenir le code html ... dans cette page je dois cliquer sur un lien qui ouvre une fenetre de confirmation...
    Sur la page il y a une liste de lieux ... (ex arrondissement) et pour chaque lieu est affiche une liste de crenaux horraire (materialise par un cadre ou l on peu cliquer dessus)
    Voila comment je procede... si la logique n est pas bonne n hesitez pas.. .

    avec les outils firefox developpeur.. .je repere le code html de l objet sur lequel je dois cliquer. (08:00 14:00) il y a 2 "branches"
    1°) <div data-category-id="80392" class="col-sm-12 category-name category-name-id" style="border-bottom: 1px solid #749ec1"> <span class="ccc-category-color" style="background-color:#749ec1;">&nbsp;</span> <span>12ème arrondissement</span> </div>

    je voie le 12eme arondissement dans le tag <span> ( le data-category-id doit etre surement important et utile pour la suite)

    2°) <div style="width:14.285714285714286%;" data-category-id="80392" data-date="2016-11-14" class="text-center ccc-events-date-wrapper col-sm-day"> </div><div style="width:14.285714285714286%;" data-category-id="80392" data-date="2016-11-15" class="text-center ccc-events-date-wrapper col-sm-day"> </div><div style="width:14.285714285714286%;" data-category-id="80392" data-date="2016-11-16" class="text-center ccc-events-date-wrapper col-sm-day"> <a aria-disabled="false" href="javascript:void(0);" class="ccc-event shift shift-id-11238824 shorthanded shift-past droppable-target event-id-11238824 ui-droppable" style="background-color:;border-color:;" data-event-id="11238824"> <span style="color:;background-color:;" class="ccc-event-header"><i class="fa fa-user"></i><i class="fa fa-question-circle"></i><i class="fa fa-check-circle-o"></i><i class="canceld-icon fa fa-retweet"></i><span data-event-parent-type="Shift" data-event-parent-id="11238824" data-event-ids="" class=" events-container event-parent-id-11238824 event-parent-type-Shift label label-danger hidden"></span>08:00 - 14:00</span> <span style="color:;" class="ccc-event-body"></span> </a><a aria-disabled="false" href="javascript:void(0);" class="ccc-event shift shift-id-11239293 shorthanded shift-past droppable-target event-id-11239293 ui-droppable" style="background-color:;border-color:;" data-event-id="11239293"> <span style="color:;background-color:;" class="ccc-event-header"><i class="fa fa-user"></i><i class="fa fa-question-circle"></i><i class="fa fa-check-circle-o"></i><i class="canceld-icon fa fa-retweet"></i><span data-event-parent-type="Shift" data-event-parent-id="11239293" data-event-ids="" class=" events-container event-parent-id-11239293 event-parent-type-Shift label label-danger hidden"></span>11:15 - 14:00</span> <span style="color:;" class="ccc-event-body"></span> </a></div><div style="width:14.285714285714286%;" data-category-id="80392" data-date="2016-11-17" class="text-center ccc-events-date-wrapper col-sm-day"> </div><div style="width:14.285714285714286%;" data-category-id="80392" data-date="2016-11-18" class="text-center ccc-events-date-wrapper col-sm-day"> <a aria-disabled="false" href="javascript:void(0);" class="ccc-event shift shift-id-11239295 shorthanded droppable-target event-id-11239295 ui-droppable" style="background-color:;border-color:;" data-event-id="11239295"> <span style="color:;background-color:;" class="ccc-event-header"><i class="fa fa-user"></i><i class="fa fa-question-circle"></i><i class="fa fa-check-circle-o"></i><i class="canceld-icon fa fa-retweet"></i><span data-event-parent-type="Shift" data-event-parent-id="11239295" data-event-ids="" class=" events-container event-parent-id-11239295 event-parent-type-Shift label label-danger hidden"></span>11:15 - 14:00</span> <span style="color:;" class="ccc-event-body"></span> </a><a aria-disabled="false" href="javascript:void(0);" class="ccc-event shift shift-id-11239593 shorthanded droppable-target event-id-11239593 ui-droppable" style="background-color:;border-color:;" data-event-id="11239593"> <span style="color:;background-color:;" class="ccc-event-header"><i class="fa fa-user"></i><i class="fa fa-question-circle"></i><i class="fa fa-check-circle-o"></i><i class="canceld-icon fa fa-retweet"></i><span data-event-parent-type="Shift" data-event-parent-id="11239593" data-event-ids="" class=" events-container event-parent-id-11239593 event-parent-type-Shift label label-danger hidden"></span>18:45 - 21:45</span> <span style="color:;" class="ccc-event-body"></span> </a></div><div style="width:14.285714285714286%;" data-category-id="80392" data-date="2016-11-19" class="text-center ccc-events-date-wrapper col-sm-day"> </div><div style="width:14.285714285714286%;" data-category-id="80392" data-date="2016-11-20" class="text-center ccc-events-date-wrapper col-sm-day"> </div>

    dans tout ce foutoir .. je repere celui qui m interesse
    <i class="fa fa-user"></i><i class="fa fa-question-circle"></i><i class="fa fa-check-circle-o"></i><i class="canceld-icon fa fa-retweet"></i><span data-event-parent-type="Shift" data-event-parent-id="11238824" data-event-ids="" class=" events-container event-parent-id-11238824 event-parent-type-Shift label label-danger hidden"></span>08:00 - 14:00

    c est le 8h 14h qui m interesse... data-event-parent-type="Shift" data-event-parent-id="11238824"

    et la fenetre de confirmation ressemble a ca
    <button data-action="assign" class="btn btn-default action-assign">Register bindingly </button>

    sans vouloir me faire macher le travail.. .quelle logique adopte?.. .c est mon premier script, apres les alias du .bashrc ... j aimerai un peu d aide ...voir des liens en francais sur l utilisation de python pour jouer avec les pages web...
    j ai lu sur urllib et beautifulsoup... mais je c pas par ou commencer.

    voila ce que j ai fais c pas grand chose ... mais ca me connecte au site et retourne le code html c pas mal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/usr/bin/env python
     
    import BeautifulSoup
    from requests import session
    from urllib2 import Request, urlopen
    import time
     
    url = ('https://XXXXXXXX/login')
    req = Request(url)
    try:
        handle = urlopen(req)
    except IOError, e:
        if hasattr(e, 'reason'):
            print 'Nous avons echoue a joindre le serveur'
            print 'Raison: ', e.reason
        elif hasattr(e, 'code'):
            print 'Le serveur n a pu satisfaire la demande.'
            print 'Code d erreur : ', e.code
    else:
    	payload = {
    		'action': 'login',
    		'username': 'XXXXXXXXXXXX',
    		'password': 'XXXXXXXXXXXX'
    	}
     
    	with session() as c:
    		c.post('https://XXXXXXXXXXX?view=list&scale=week&filter=shorthanded&date=2016-11-14', data=payload)
    		response = c.get(<a href="https://&#39;XXXXXXXXXXX?view=list&scale=week&filter=shorthanded&date=2016-11-14" target="_blank">https://'XXXXXXXXXXX?view=list&scale...ate=2016-11-14</a>')
    		print(response.headers)
    		time.sleep(5)
    		print(response.text)
    voila ca fait pas grand chose pour l instant... j editerai ce message au fur et a mesur de mon avancement...
    A+

    edit: je trouve pas de balises pour formater le code dans le message

  2. #2
    Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Par défaut
    Salut, me revoila,
    Bon je me rend compte a quel point je manquais de connaissance sur le sujet... pas etonnant de pas avoir eu de reponse sur les forum
    Je pense pas que ce soit lié a ma mauvaise grammaire de python (quoi que) mais plus a ma logique de progression pour resoudre ce probleme... les cours du zero html et python n ont pas suffit.

    Partagez une video qui a change votre facon de jongler avec le web ... ouai c ca que je recherche avant meme d avoir la solution a ce script
    car c vraiment saisir la facon de proceder pour parler au serveurs en CLI qui m interesse.

    voila une autre approche j essaye avec la methode requests... j ai laisse des commentaire qui etait destine a mon pote a l origine
    j ai essaye de le rendre le plus verbeux possible...
    Je suis bloque au retour du serveur 404 cannot POST /login ...... quezako?
    Il y a t il un moyen de savoir pourquoi cannot POST ?? ou c a moi de le deviner (par quel moyen?) est ce que mes headers sont pas bon ? il manque des cookies? comment savoir ca?

    je dois passe a cote de qqchose d important...
    pour cookieJar et opener je me suis embrouille... en plus request est censé gerer tout seul les cookie non? j ai donc laisse commenté
    dans login_data ===> la ligne 'action' est peut etre en trop ? j ai pas bien saisi a quoi ca sert / correspond

    Si qqn a des pistes a me faire explorer...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    #!/usr/bin/env python
     
    import urllib
    import urllib2
    from bs4 import BeautifulSoup
    import requests
    import time
    import sys
     
    import urllib
    import urllib2
    import cookielib
     
    my_user = 'xxxx'
    my_pass = 'xxxx'
    login_url = 'https://stuart.staffomaticapp.com/login'
    shedule_url = 'https://stuart.staffomaticapp.com/locations/16381/schedules/256986?view=list&scale=week&filter=shorthanded'
     
    #cj = cookielib.CookieJar()
    #opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    login_data = {
        'action': 'login-form',
        'user_email': 'my_user',
        'user_password': 'my_pass'
    }
     
    headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0'
    }
    # j ai essaye avec plusieur login_data avec ou sans 'action' ... et sans cookie, ... je le fais mal vu que j ai rien capte)
    # je me suis embrouille entre les differentes methode de urllib(2) entre
    # sessionns opener et request... c ca qui ma mis dans le mal ... je
    # reprend a zero que avec requests
     
     
    with requests.session() as c:
     
        # recuperation des info  de la page de login ( ca permettra de tester si  la page est accessible mais la c plutot pour decomposer au maximum)
        login_page = c.get('https://stuart.staffomaticapp.com/login')
        print login_page.headers
        time.sleep(1)
        print login_page.status_code
        time.sleep(1)
        print login_page.text
        # ya d autre chose a recup fix ?
        time.sleep(1)
     
        # envoie du formulaire
        login_formulaire = c.post(login_url, login_data, headers)
        print login_formulaire.headers
        time.sleep(1)
        print ""
        print login_formulaire.request.headers
        time.sleep(1)
        print login_formulaire.status_code
        # j ai un 404  je me dit que c a cause de urlencode mais ca fais pareil
        # (cf j ai essaye 2 variable login_data)
        time.sleep(1)
        # le revoila mon canot POST  que puis je mettre pour avoir la raison de ce
        # refus !!! IMPORTANT !!!
        print login_formulaire.text
        # quel methode permet de connaitre les entrees du formulaire ?? ... moi j
        # ai regarde dans l inspecteur
        time.sleep(1)
        print login_formulaire.content
        # arrive a ce niveau la que devrais me renvoyer le serveur a la place de
        # canot POST ?
        time.sleep(1)
        # qqchose comme successfull ou bien m affiche la meme chose que firefox. c
        # a dire la page d acceuil de mon compte
     
        # recuperation des info de la page protegee par login
     
        shedule_page = c.get(shedule_url)
        # c la ou j ai pas tout capte... vu que je suis deja authentifier, dois je remettre les data et headers, vu qu il concerne la page login ,
        # ici devrait plutot se trouver les info type ?view=xxx&location=xxx ...
        # etc ... mais bon faudrais deja que ca marche au dessus
        print shedule_page.headers
        time.sleep(1)
        print shedule_page.status_code
        time.sleep(1)
        print shedule_page.content
        # la j ai l impression qu il me rnvoie le meme DOM qu avec la page de login ? non ..
        # par contre le code 200 c surement parceque je suis dja authentifier sur le serveur depuis firefox
        #  mais alors si je suis deja autentifier  et  q uil me rnvoie un 2OO pourquoi je n ai pas le meme code source que dans l inspecteur
        # lorsque je suis sur la page shedule.... ca me rend perplexe
     
        # bon je m arrete la y a d autre partie du code a cote mais tant que ca
        # tourne pas... ya pas d interet
     
        # tu vois d autres appel de fonction a lancer pour etre plus verbeux ... 
        # je trouve pas la methode pour afficher le payload que j envoie. (avec urllib.get.data je l avais)
     
        # dis moi sinon si ma logique d approche avec get et post est bonne ?
        # hormis le fait que je n ai aucun traitement des erreur, ni imbriquer tt
        # ca dans des boucles.
    merci d avance

  3. #3
    Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Par défaut
    je me lien du topic similaire je viendrais poster les avancée ici aussi en tout cas...
    j ai compris qq concept entre temps
    https://forum.ubuntu-fr.org/viewtopi...2802#p21632802
    a+
    each one teach one

Discussions similaires

  1. Avoir un lien avec une image sur mon site
    Par PoppyGuy dans le forum Services Web
    Réponses: 1
    Dernier message: 13/09/2016, 11h45
  2. Réponses: 1
    Dernier message: 16/04/2016, 10h07
  3. Partager une image sur les site sociaux avec html
    Par tariq.elgbouri dans le forum Débuter
    Réponses: 5
    Dernier message: 04/09/2012, 11h35
  4. Automatiser une requête sur un site tiers
    Par Loïc B. dans le forum Langage
    Réponses: 1
    Dernier message: 25/02/2011, 00h09
  5. Réponses: 4
    Dernier message: 07/06/2006, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo