Maison  >  Article  >  développement back-end  >  Python Selenium Cookie contourne le code de vérification pour obtenir un exemple de code de connexion_

Python Selenium Cookie contourne le code de vérification pour obtenir un exemple de code de connexion_

不言
不言original
2018-04-10 15:22:262962parcourir

Cet article présente principalement le cookie Python Selenium contournant le code de vérification pour obtenir un exemple de code de connexion. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

J'ai déjà introduit l'utilisation de cookies pour. contournez le code de vérification pour obtenir la méthode de connexion. Il n'y a rien de redondant ici, nous ajouterons une analyse et une autre méthode pour implémenter la connexion.

1. Introduction des idées

1.1 Regardez le code directement, avec des commentaires détaillés

# FileName : Wm_Cookie_Login.py
# Author  : Adil
# DateTime : 2018/3/20 19:47
# SoftWare : PyCharm
from selenium import webdriver
import time
url = 'https://system.address'
def login():
  '''先定义一个正常登录的方法,获取登录前和登录后的cookie'''
  driver = webdriver.Chrome()
  driver.get(url)
  driver.maximize_window()
  cookieBefore = driver.get_cookies()
  # 打印登录前的cookie
  print(cookieBefore)
  time.sleep(2)
  driver.find_element_by_id("new-username").clear()
  driver.find_element_by_id("new-username").send_keys("username")
  driver.implicitly_wait(5)
  driver.find_element_by_id("new-password").clear()
  driver.find_element_by_id("new-password").send_keys("password")
  driver.find_element_by_id('home-right-login').click()
  driver.implicitly_wait(5)
  # 加一个休眠,这样得到的cookie 才是登录后的cookie,否则可能打印的还是登录前的cookie
  time.sleep(5)
  print("登录后!")
  cookiesAfter = driver.get_cookies()
  print("cookiesAfter:")
  print(cookiesAfter)
  # cookie 存放到了list,其中是dict
  # 对比发现登录后的cookie比登录前多了4个dict。
  # 如下代码分别是 1、4 、7、 8 
  len1 = len(cookiesAfter)
  print("len:%d" %len1)
  cookie1 = cookiesAfter[0]
  cookie2 = cookiesAfter[3]
  cookie3 = cookiesAfter[-2]
  cookie4 = cookiesAfter[-1]
  print("cookie1:%s" %cookie1)
  print("cookie2:%s" %cookie2)
  print("cookie3:%s" %cookie3)
  print("cookie4:%s" %cookie4)
  driver.quit()
  # 将获取的这四个cookie作为参数,传递给,使用cookie登录的函数,如下
  cookieLogin(cookie1,cookie2,cookie3,cookie4)
def cookieLogin(cookie1,cookie2,cookie3,cookie4):
  print("+++++++++++++++++++++++++")
  print("cookieLogin")
  print("cookie2:%s" % cookie2)
  print("cookie4:%s" % cookie4)
  driver = webdriver.Chrome()
  driver.maximize_window()
  # 清除一下cookie
  driver.delete_all_cookies()
  time.sleep(3)
  driver.get(url)
  # 打开浏览器后添加访问地址后,添加cookie
  driver.add_cookie(cookie1)
  driver.add_cookie(cookie2)
  driver.add_cookie(cookie3)
  driver.add_cookie(cookie4)
  print("cookies")
  # 打印一下cookie,与上面正常登录的cookie对比一下
  print(driver.get_cookies())
  time.sleep(5)
  # 刷新页面,可以看到已经是登录状态了,至此完成的使用cookie 的登录。
  driver.refresh()
  time.sleep(5)
  driver.quit()

if __name__ == "__main__":
  login()
<.>

1.2. Introduction du code

Comme le montre l'image, vous pouvez visualiser les cookies avant la connexion et après la connexion, les copier et les comparer

Comme le montre l'image, la comparaison est OK. Après vous être connecté, il y a quatre cookies en excès

Vérifiez la position des cookies en excès. les éléments 1, 4, 7 et 8g de la liste, donc retirez-le et donnez-le comme paramètre à la fonction de connexion aux cookies.

Remarque : Cet exemple décrit l'opération de connexion sans code de vérification, mais l'idée est la même. Cette démo a simplement pour but de présenter l'idée d'utiliser des cookies pour se connecter. Dans des applications de projets spécifiques, cela est très gênant.

2. Connexion pratique contournant le code de vérification

Ensuite, nous présenterons la connexion avec le code de vérification. Bien sûr, l'idée du traitement des cookies. est fondamentalement le même que celui introduit ci-dessus

Quelques éléments ont été ajoutés ici :

a. Utilisez le code de vérification pour vous connecter correctement pour la première fois et enregistrez les cookies avant et après. connectez-vous, comparez et analysez les cookies, et filtrez les cookies utiles

b. Écrivez le cookie dans le fichier yaml, afin qu'il puisse être utilisé directement lors de la connexion ultérieure à l'aide du cookie, sans avoir besoin de vous connecter normalement. à chaque fois comme décrit ci-dessus.

c. Lorsque vous utilisez des cookies pour vous connecter, il suffit de lire le cookie correspondant dans le fichier yaml. Remarque : Pour plus de détails sur les opérations sur les fichiers Yaml, consultez : Python Yaml Learning, qui fournit une introduction détaillée aux opérations de lecture et d'écriture de Yaml.

Remarque : ce qui est introduit ici est de saisir manuellement le code de vérification pour vous connecter correctement, puis d'obtenir le cookie. Dans les applications réelles, d'autres méthodes peuvent être utilisées pour obtenir des cookies

telles que : 1. L'exemple de connexion au jardin de blogs introduit précédemment : Python - Connexion par code de vérification de contournement des cookies Utilisez fiddler pour afficher les cookies

2 . Utiliser la navigation Par exemple, utilisez le plug-in Chrome comme indiqué ci-dessous pour exporter les cookies à des fins d'analyse.

L'idée est la même que ci-dessus, le code est le suivant :

2.1 Connectez-vous normalement pour obtenir des cookies valides


# FileName : getLoginCookie.py
# Author  : Adil
# DateTime : 2018/3/20 21:43
# SoftWare : PyCharm
import yaml,time,os
from selenium import webdriver
url = &#39;https://system.address&#39;
driver = webdriver.Chrome()
driver.get(url)
driver.maximize_window()
time.sleep(2)
driver.find_element_by_id("username").clear()
driver.find_element_by_id("username").send_keys("username")
driver.implicitly_wait(5)
driver.find_element_by_id("password").clear()
driver.find_element_by_id("password").send_keys("password")
print("请输入验证码:")
# 手动输入验证码
security_code = input()
time.sleep(1)
driver.find_element_by_id("security_code").send_keys(security_code)
time.sleep(1)
driver.find_element_by_id(&#39;sign_btn&#39;).click()
driver.implicitly_wait(5)
# 加一个休眠,这样得到的cookie 才是登录后的cookie,否则可能打印的还是登录前的cookie
time.sleep(5)
cookiesAfter = driver.get_cookies()
len1 = len(cookiesAfter)
# 已经知道需要第几个cookie,这里需要第3个cookie,所以选择cookie下标为2
cookie1 = cookiesAfter[2]
# 获取当前文件所在路径
fileNamePath = os.path.split(os.path.realpath(__file__))[0]
# 拼接config.yaml文件绝对路径
yamlPath = os.path.join(fileNamePath,&#39;config.yaml&#39;)
# 以覆盖写入打开文件
fw = open(yamlPath,&#39;w&#39;,encoding=&#39;utf-8&#39;)
# 构建数据
data = {"cookie1":cookie1}
# 装载写入yaml文件。
yaml.dump(data,fw)

driver.quit()

2.2. Lire le fichier de configuration des cookies et utiliser les cookies pour vous connecter au système


# FileName : stlUseCookieLogin.py
# Author  : Adil
# DateTime : 2018/3/20 21:48
# SoftWare : PyCharm
from selenium import webdriver
import time,yaml,os
url = &#39;https://system.address&#39;
driver = webdriver.Chrome()
driver.maximize_window()
driver.delete_all_cookies()
time.sleep(3)
driver.get(url)

fileNamePath = os.path.split(os.path.realpath(__file__))[0]
yamlPath = os.path.join(fileNamePath,&#39;config.yaml&#39;)
# 读取yaml 文件
f = open(yamlPath,&#39;r&#39;,encoding=&#39;utf-8&#39;)
cont = f.read()
conf = yaml.load(cont)
# 读取cookie值
cookie1 = conf.get("cookie1")
# 添加cookie
driver.add_cookie(cookie1)
print("cookies")
print(driver.get_cookies())
time.sleep(5)
# 这里重新获取地址,因为有些系统,未登录状态,链接会跳转,这里就是,登录状态后,才能正确打开指定网址,所以这里要再次指定网址。
driver.get(url)
# 刷新查看登录状态
driver.refresh()
time.sleep(5)
driver.quit()


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn