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 :

Selenium - Naviguer dans une page [Python 2.X]


Sujet :

Réseau/Web Python

  1. #1
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut Selenium - Naviguer dans une page
    Salut.

    J'essaye de récupérer des données depuis un site de façon automatique en utilisant le module selenium. Le site en question est euronext.com où l'on peut trouver le cours actuel de différents unités de compte, mais aussi (et c'est ce qui m'intéresse) des données historiques. Jusqu'à présent je télécharge manuellement les données qui m'intéressent. Mais c'est assez fastidieux. Euronext ne propose pas d'API pour cela au contraire de Yahoo Finance ou Google Finance, mais certains produits qui m'intéressent ne sont pas tous sur ces sites.

    Voilà pour la petite histoire.

    Prenons un cas concret: Produit

    Sur cette page, il y a une frame nommé "Price Chart" où comme son nom l'indique on peut voir un graph. Dans cette fenêtre il y a deux onglets "View Chart" et "View Data". Je souhaite "cliquer" sur cet onglet. Cette fois-ci on a un aperçu d'un tableau. Ici je souhaite "cliquer" sur "Historical", puis changer la plage de date, puis rafraîchir et enfin télécharger en cliquant sur "Download"...

    En tout un petite dizaine d'étapes.

    Jusqu'ici je n'ai pas réussi grand chose:

    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
    #! python2
    # -*- coding:Utf-8 -*-
     
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
     
    WIEW_DATA = '//*[@id="pcContainer_da"]'
    HISTORICAL = '//*[@id="tablesNavigation_hi"]'
    DATE_PICKER_1 = '//*[@id="historicalDatePicker1"]'
    DATE_PICKER_2 = '//*[@id="historicalDatePicker2"]'
    REFRESH = '//*[@id="refreshHistoricalPC"]'
    DOWNLOAD = '//*[@id="downloadPCTable"]'
    GO_BUTTON = '/html/body/div[8]/div[3]/button[2]'
     
     
    webpage = r'https://www.euronext.com/en/products/etfs/FR0010411439-XPAR'
     
    driver = webdriver.Chrome()
    driver.get(webpage)
     
    # Find "Wiew Data button"
    button = driver.find_element_by_xpath(WIEW_DATA)
    print button.get_attribute("class")
    button.click()
    print button.get_attribute("class")
    #driver.close()
    Je parviens à charger la page dans Chrome. En inspectant le code html (je ne pige que dalle en html), j'ai récupéré le XPATH des différents boutons sur lequel j'ai besoin de cliquer. Mais mon premier essai n'est pas concluant. Je trouve bien le premier élément par son XPATH, je peux voir sont attribut, mais l'appel à la méthode click() ne change rien et n'affiche rien dans la console non plus.

    Peut-être que cet élément n'est pas un bouton, mais bon là ça dépasse mes compétences. Je suis allé faire un tour ici sans succès: http://selenium-python.readthedocs.org/navigating.html et dans les cours Python.

    Ju

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut,

    Bon finalement après avoir galéré un bon moment j'ai changé d'approche. Donc j'ai résolu mon problème mais sans pour autant répondre à ma problématique avec sélenium. Je poste quand même ma solution, sait-on jamais.

    Je cherchais à télécharger depuis le site Euronext.com des données historiques d'un produit (prix à l'ouverture, à la clôture, etc...). La solution pour cela était de constituer l'URL permettant de télécharger le fichier csv voulu, puis d'utiliser le module requests pour charger le fichier en mémoire avant de le traiter (dans mon cas un dataframe pandas).

    Donc:
    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
    #! python2
    # -*- coding:Utf-8 -*-
     
    import io
    import datetime
    import requests
    import pandas as pd
     
    def unix_time_ms(dt):
        ref = datetime.datetime.utcfromtimestamp(0)
        return int((dt - ref).total_seconds() * 1000)
     
    def get_hist_data_euronext(isin, from_date, to_date):
        """ """
     
        # Build url of the product to download
        from_date, to_date = unix_time_ms(from_date), unix_time_ms(to_date)
        template = 'https://www.euronext.com/nyx_eu_listings/price_chart/' \
                   'download_historical?typefile=csv&layout=vertical&' \
                   'typedate=dmy&separator=pointt&mic=XPAR&isin={0}&' \
                   'namefile=Price_Data_Historical&from={1}&to={2}' \
                   '&adjusted=1&base=0'
        url = template.format(isin, from_date, to_date)
     
        # Download csv file from Euronext
        response = requests.get(url).content
     
        # Build Pandas DataFrame of OHLC
        df = pd.read_csv(io.StringIO(response.decode('utf-8')), skiprows=3,
                         usecols=['Date', 'Open', 'High', 'Low', 'Close'])
        df.index = pd.to_datetime(df['Date'].values, format='%d/%m/%Y')
        del(df['Date'])
     
        return  df                      
     
     
    if __name__ == '__main__':
     
        isin = 'FR0010168773'
        from_date = datetime.datetime(2001, 12, 16, 0, 0)
        to_date = datetime.datetime(2015, 12, 16, 0, 0)
     
        ohlc = get_hist_data_euronext(isin, from_date, to_date)
     
        print ohlc
    Ciao ciao

    Ju

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Naviguer dans une page web
    Par eldiable2005 dans le forum C#
    Réponses: 1
    Dernier message: 22/10/2011, 23h16
  2. Naviguer vers une page dans (D:\)
    Par kika10 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/02/2011, 11h24
  3. Réponses: 1
    Dernier message: 08/03/2004, 11h35
  4. Verrouiller un lien dans une page
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 5
    Dernier message: 25/02/2003, 16h56
  5. comment integer une animation swf dans une page
    Par naili dans le forum Intégration
    Réponses: 7
    Dernier message: 18/09/2002, 18h54

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