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.
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:
/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é.
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.