web-dev-qa-db-fra.com

Python Selenium: utilisez un navigateur déjà ouvert et connecté avec vos identifiants de connexion.

Existe-t-il un moyen pour différentes exécutions d'un programme python utilisant Selenium de conserver le navigateur que j'ai ouvert et connecté avec mes informations d'identification, ouvert et utilisé lors des exécutions ultérieures? 

Je débogue un code. Sur le navigateur, chaque fois que je dois me connecter à l'aide de mes informations d'identification. Actuellement, chaque fois que j'arrête le code, le navigateur Web est fermé. Existe-t-il un moyen de conserver une copie du navigateur déjà ouvert et connecté et de l’utiliser pour mon prochain débogage afin de ne pas avoir à saisir à nouveau mes identifiants de connexion? 

Mon code qui ouvre le navigateur ressemble à ceci:

driver = webdriver.Chrome(executable_path="/the_path/chromedriver", chrome_options=chrome_options) 
driver.get(url)

MODIFIER:

En fait, la façon dont ce site Web demande l’authentification est la suivante: Il demande d’abord le nom d’utilisateur, puis je dois appuyer sur le bouton Continuer, puis il demande le mot de passe. Après avoir saisi le mot de passe, il envoie un SMS sur mon téléphone, je dois le saisir avant qu'il ne passe à la page souhaitée.

3
TJ1

Eh bien, puisque cette question est votée mais que mon drapeau en tant que question dupliquée n’a pas été accepté, je posterai ici la même réponse exacte que j’ai déjà posée pour une question similaire :


Vous pouvez utiliser pickle pour enregistrer les cookies en tant que fichier texte et les charger après:

def save_cookie(driver, path):
    with open(path, 'wb') as filehandler:
        pickle.dump(driver.get_cookies(), filehandler)

def load_cookie(driver, path):
     with open(path, 'rb') as cookiesfile:
         cookies = pickle.load(cookiesfile)
         for cookie in cookies:
             driver.add_cookie(cookie)

Avec un script comme:

from Selenium import webdriver
from afile import save_cookie

driver = webdriver.Chrome()
driver.get('http://website.internets')

foo = input()

save_cookie(driver, '/tmp/cookie')

Ce que vous pouvez faire c'est:

  1. Exécuter ce script
  2. Sur le navigateur (de Selenium), allez sur le site web, connectez-vous
  3. Retournez à votre terminal, tapez quelque chose avec enter.
  4. Profitez de votre fichier de cookie à /tmp/cookie. Vous pouvez maintenant le copier dans votre dépôt de code et le conditionner dans votre application si nécessaire.

Alors, maintenant, dans votre code d'application principal:

from afile import load_cookie

driver = webdriver.Chrome()
load_cookie(driver, 'path/to/cookie')

Et vous êtes maintenant connecté.

2
Arount

Ceci était une demande de fonctionnalité et fermé comme non réalisable . Mais c’est une façon de le faire, utiliser des dossiers en tant que profils et conserver toutes les connexions persistantes d’une session à l’autre en utilisant les options de Chrome user-data-dir afin d’utiliser des dossiers en tant que profils, j’exécute:

chrome_options = Options()
chrome_options.add_argument("user-data-dir=Selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")

Vous pouvez manuellement interagir à cette étape avec la fenêtre ouverte et effectuer les connexions qui vérifient les interactions humaines, vérifier le mot de passe, etc. Je le fais, puis les connexions, les cookies dont j'ai besoin maintenant chaque fois que je lance Webdriver avec ce dossier, tout est dans. Là. Vous pouvez également installer manuellement les extensions et les avoir à chaque session. Deuxième fois que je lance, avec exactement le même code que ci-dessus, tous les paramètres, cookies et identifiants sont présents:

chrome_options = Options()
chrome_options.add_argument("user-data-dir=Selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com") #Now you can see  the cookies, the settings, Extensions and the logins done in the previous session are present here

L’avantage est que vous pouvez utiliser plusieurs dossiers avec des paramètres et des cookies différents, des extensions sans avoir besoin de charger, décharger des cookies, d’installer et de désinstaller des extensions, de modifier les paramètres, de modifier les connexions via le code, et donc de ne pas avoir la logique du programme, etc. En outre, cela est plus rapide que de devoir tout faire par code.

1
Eduard Florinescu