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

Python Discussion :

Autoriser la copie dans le presse-papier dans un script python selenium [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Septembre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Septembre 2016
    Messages : 28
    Par défaut Autoriser la copie dans le presse-papier dans un script python selenium
    Bonjour,

    Je découvre le module selenium pour tester une interface web via chrome.

    J'ai pu faire pas mal de choses afin de ma connecter un site type sharepoint, naviguer dans les documents partagés, télécharger des documents.

    Nom : BaseSharepoint.PNG
Affichages : 358
Taille : 6,5 Ko

    Maintenant, j'aurais voulu copier les liens vers des documents dans le presse papier pour les inclure dans mails générés automatiquement.
    Par contre, je veux à un moment récupérer le lien vers un élément des "shared document". Mais je n'arrive pas à passer au delà du pop-up ci-dessous.
    Nom : PopUp1.PNG
Affichages : 374
Taille : 6,9 Ko

    J'ai essayé pas mal de chose, comme:
    - autoriser le presse papier dans chrome
    - activer la fenêtre d'alerte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    driver.switch_to.alert().accept()
    mais je ne suis pas sur que ce soit une alerte à proprement parler
    - changer l'élément actif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    driver.switch_to.active_element()
    J'ai suivi quelques conseils que j'ai pu faire sur le net :
    https://stackoverflow.com/questions/...bdriver-python
    https://stackoverflow.com/questions/...active#tab-top

    Malheureusement, je n'arrive pas à trouver de solution viable pour passer sur cette fenêtre et appuyer sur le bouton "Autoriser".

    Ci-dessous les deux codes qui me semblent le plus proche d'aboutir à la solution voulue :
    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
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.select import Select
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import NoSuchElementException
    from zipfile import ZipFile
     
    from SecurityConfClass import *
    from ApplicableConf import *
     
    import pyperclip
    import time
    import os
    import tarfile
     
     
    Link_to_sharepoint_base_url = "https://perso.xxx.com/:f:/r/sites/toto/Shared%20Documents/ExcelFiles=1&web=1&e=RZF9R3"
    StoragePath = os.path.abspath("C:\Perso\Eclipse\Check_ExcelFiles\storage")
    Version_Id = "1.0.0"
    Fct = "DFG"
     
    startTime = time.time()
    print(startTime)
     
    options = webdriver.ChromeOptions()
    prefs = {"download.default_directory" : "C:\\Perso\\Eclipse\\Check_ExcelFiles\\storage"}
    options.add_experimental_option("prefs", prefs)
     
    driver = webdriver.Chrome(options=options) 
    driver.maximize_window()
    driver.get(Link_to_sharepoint_base_url)
     
    CyberPackFold = driver.find_element(By.XPATH,"//*[text()='"+Version_Id+"']");
    CyberPackFold.click()
    EqtFolder = driver.find_element(By.XPATH,"//*[text()='"+Fct+"']");
    EqtFolder.click()
     
     
    youpi2 = driver.find_element(By.XPATH, "//*[text()='Copier le lien']")
    youpi2.click()
    input("taper une touche lorsque la page est ouverte dans le navigateur chrome ... ")
     
    alert = driver.switch_to.alert().accept()
     
    AutorizeCopy = driver.find_element(By.ID, "id__11")
    AutorizeCopy.click()
    print(pyperclip.paste())
    print("end")
    Un autre essai m'a amené au code suivant:
    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
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.select import Select
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import NoSuchElementException
    from zipfile import ZipFile
     
    from SecurityConfClass import *
    from ApplicableConf import *
     
    import pyperclip
    import time
    import os
    import tarfile
     
     
    Link_to_sharepoint_base_url = "https://perso.xxx.com/:f:/r/sites/toto/Shared%20Documents/ExcelFiles=1&web=1&e=RZF9R3"
    StoragePath = os.path.abspath("C:\Perso\Eclipse\Check_ExcelFiles\storage")
    Version_Id = "1.0.0"
    Fct = "DFG"
     
    startTime = time.time()
    print(startTime)
     
    options = webdriver.ChromeOptions()
    prefs = {"download.default_directory" : "C:\\Perso\\Eclipse\\Check_ExcelFiles\\storage"}
    options.add_experimental_option("prefs", prefs)
     
    driver = webdriver.Chrome(options=options) 
    driver.maximize_window()
    driver.get(Link_to_sharepoint_base_url)
     
    # wait for webpage opened
    input("taper une touche lorsque la page est ouverte dans le navigateur chrome ... ")
     
     
    CyberPackFold = driver.find_element(By.XPATH,"//*[text()='"+Version_Id+"']");
    CyberPackFold.click()
    EqtFolder = driver.find_element(By.XPATH,"//*[text()='"+Fct+"']");
    EqtFolder.click()
     
     
    youpi2 = driver.find_element(By.XPATH, "//*[text()='Copier le lien']")
    youpi2.click()
    input("taper une touche lorsque la page est ouverte dans le navigateur chrome ... ")
     
     
     
    driver.wait_for_pop_up("Lien créé", "30000")
     
     
    driver.switch_to.active_element()
    sel.type("id__11", "Lien créé")
    sel.click("id__11")
    sel.select_window("null")
     
     
     
    sam = driver.find_element(By.XPATH, "//div[@id='share-dialog-container']")
    sam.click()
    AutorizeCopy = driver.find_element(By.ID, "id__11")
    AutorizeCopy.click()
    print(pyperclip.paste())
    print("end")
    Est-ce que quelqu'un pourrait m'aider à comprendre comment passer sur cette fenêtre pour autoriser la copie et revenir à la page du sharepoint avec le lien vers le fichier présent dans le presse papier ?

    Merci
    Images attachées Images attachées  

  2. #2
    Membre averti
    Homme Profil pro
    Python powaaaaa
    Inscrit en
    Décembre 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Python powaaaaa
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 25
    Par défaut
    Salut, comment se présentent les liens à copier ? Tu peux faire un screen ?

    Il n'y a que l'option du bouton "copier le lien" pour l'obtenir ?

    C'est difficile de tenter de résoudre ton problème sans y voir clair....

    Ou alors changer de navigateur :

    https://stackoverflow.com/questions/...d-chromedriver

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Septembre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Septembre 2016
    Messages : 28
    Par défaut captures d'écran
    Bonjour,

    Désolé, j'avais extrait les fenêtres qui me semblent à l'origine du blocage.

    Voici la fenêtre chrome:
    Nom : im4.PNG
Affichages : 324
Taille : 38,6 Ko

    Et voici, le code dans lequel je retrouve le bouton "Copier" pour copier le lien:
    Nom : im6.PNG
Affichages : 327
Taille : 51,5 Ko

    Lorsque j'essai d'activer le bouton "copier" par son id, cela ne fonctionne pas comme si je n'étais pas sur la bonne fenêtre. Nom : im007.PNG
Affichages : 315
Taille : 6,8 Ko

    Sur la fenêtre : Nom : im1.PNG
Affichages : 326
Taille : 6,9 Ko, si j'appuie manuellement sur le bouton autoriser, je récupère bien le lien dans le presse papier. Mais je n'arrive pas non plus à réaliser cette action dans mon script.

    Les scripts sont en début de post.

    J'ai essayé d'ajouter les options :
    option.add_argument('--disable-infobar')
    option.add_argument('--disable-extensions')
    option.add_argument('--disable_notifications')


    Mais cela ne change rien au problème. J'ai toujours ces deux fenêtres qui m'empêche de récupérer le lien...

    Auriez-vous des idées de comment contourner ce problème ?

    Merci de votre aide.

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 211
    Par défaut
    Hello,
    Les fenêtres contextuelles Sharepoint sont basées sur le Web et on devrait également pouvoir y effectuer des automatisations.
    Pour ce faire, il faut aller à la nouvelle fenêtre contextuelle. Par exemple utiliser la méthode ci-dessous :
    Récupérer le handle de la nouvelle fenêtre contextuelle à l'aide de la méthode driver.getWindowHandles(). Cette méthode répertorie tous les handles de fenêtre de navigateur ouverts.
    Utiliser la méthode driver.switchTo(windowHandle) pour basculer le contrôle du pilote vers la fenêtre contextuelle. Une fois cela fait, on peut effectuer la prochaine étape d'exécution.
    Ami calmant, J.P

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Septembre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Septembre 2016
    Messages : 28
    Par défaut
    Bonjour,

    J'ai essayé d'accéder à la liste des fenêtres disponibles en utilisant le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    handles=driver.window_handles
    for t in handles:
         driver.switch_to.window(t)
         print("title : ",driver.title, " indice : ", t)
         time.sleep(5)
    Je vois bien qu'une seule page référencée dans "handles" qui est ma page principale.
    Nom : handles.PNG
Affichages : 268
Taille : 3,1 Ko

    Les deux autres fenêtres "parasites" qui bloquent mon script ne sont pas listées.
    Nom : im4.PNG
Affichages : 264
Taille : 38,6 Ko

    Du coup, je n'arrive pas à trouver de commande pour :
    1. simuler un click sur le bouton "autoriser" de la fenêtre :
    Nom : im1.PNG
Affichages : 263
Taille : 6,9 Ko
    2. simuler un click sur le bouton "Copier" et fermer la fenêtre qui donne le lien:
    Nom : im007.PNG
Affichages : 266
Taille : 6,8 Ko

    Dans la liste des éléments disponibles dans chromedriver, je ne vois pas d'autres fonctions qui pourrait me sortir d'affaire.
    Avez-vous une idée pour contourner ces deux points ?

    Merci de votre aide.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 539
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 539
    Par défaut
    en lançant "l'inspecteur" (ou les outils de développement), pas possibilité de voir si ces fenêtres ont un id propre?

    dans ce lien https://www.browserstack.com/docs/au...pop-ups#python c'est qui semble être fait

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

Discussions similaires

  1. [Débutant] Autorisation de copie dans program files
    Par thierry007 dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/12/2014, 15h58
  2. Utilisation de C++ dans un script python.
    Par Ekinoks dans le forum Interfaçage autre langage
    Réponses: 8
    Dernier message: 18/01/2007, 19h03
  3. import dans les script python (objet zope)
    Par cronos6 dans le forum Zope
    Réponses: 5
    Dernier message: 10/09/2006, 14h47
  4. Radio boutton dans un script python
    Par Abla23 dans le forum Zope
    Réponses: 17
    Dernier message: 12/07/2006, 17h12
  5. Réponses: 3
    Dernier message: 05/04/2005, 14h26

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