>백엔드 개발 >파이썬 튜토리얼 >Python Selenium 쿠키는 로그인 샘플 코드를 얻기 위해 확인 코드를 우회합니다.

Python Selenium 쿠키는 로그인 샘플 코드를 얻기 위해 확인 코드를 우회합니다.

不言
不言원래의
2018-04-10 15:22:262984검색

이 글에서는 인증 코드를 우회하여 로그인 샘플 코드를 얻는 Python Selenium Cookie를 주로 소개합니다. 이제 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

이전에 인증 코드를 우회하여 로그인하는 방법을 소개한 적이 있습니다. 쿠키를 통해. 여기에는 중복되는 것이 없습니다. 로그인을 구현하기 위한 분석 및 다른 방법을 추가하겠습니다.

1. 아이디어 소개

1.1. 자세한 메모와 설명과 함께 코드를 직접 살펴보세요

# 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 그림과 같이 쿠키를 미리 볼 수 있습니다. 그리고 로그인 후 복사해서 비교해보세요

로그인 후 쿠키가 4개 더 있습니다

초과된 쿠키의 위치를 ​​확인하세요. 목록의 1, 4, 7, 8번을 넣어두었으니 꺼내어 쿠키 로그인 함수에 인자로 주면 됩니다.

참고: 이 예에서는 인증 코드 없이 로그인 작업을 소개하지만 개념은 동일합니다. 이 데모는 단지 쿠키를 사용하여 로그인하는 아이디어를 소개하기 위한 것입니다. 특정 프로젝트 애플리케이션에서는 이는 매우 불편합니다.

2. 인증코드를 우회한 실제 로그인


다음으로, 인증코드가 포함된 로그인에 대해 소개하겠습니다. 물론, 쿠키 처리에 대한 개념은 위에서 소개한 것과 같습니다

A. 여기에 몇 가지 사항이 추가되었습니다.

 a 먼저 인증 코드를 사용하여 처음으로 올바르게 로그인하고 로그인 전후에 쿠키를 저장하고 쿠키를 비교 및 ​​분석하고 유용한 쿠키를 필터링합니다.

b. 위의 소개가 필요 없이 이후 쿠키를 사용하여 직접 로그인할 수 있도록 yaml 파일을 사용하는 것처럼 매번 정상적으로 로그인해야 합니다.

 c. 쿠키를 사용하여 로그인할 때는 yaml 파일에서 해당 쿠키를 읽으면 됩니다. 참고: Yaml 파일 작업에 대한 자세한 내용은 yaml의 읽기 및 쓰기 작업에 대한 자세한 소개를 제공하는 Python Yaml 학습을 참조하세요.

참고: 여기서 소개하는 방법은 인증 코드를 수동으로 입력하여 올바르게 로그인한 다음 쿠키를 얻는 것입니다. 실제 응용 프로그램에서는 다른 방법을 사용하여 쿠키를 얻을 수 있습니다

예: 1. 이전에 소개된 블로그 가든 로그인 예: Python - 쿠키가 인증 코드 로그인을 우회합니다. Fiddler를 사용하여 쿠키를 봅니다

  2. 브라우저를 사용하여 쿠키를 봅니다. 예를 들어, 크롬 플러그인을 사용하여 아래와 같이 분석을 위해 쿠키를 내보냅니다.

아이디어는 위와 같고, 코드는 다음과 같습니다.

2.1. 유효한 쿠키를 얻으려면 정상적으로 로그인하세요


# FileName : getLoginCookie.py
# Author  : Adil
# DateTime : 2018/3/20 21:43
# SoftWare : PyCharm
import yaml,time,os
from selenium import webdriver
url = 'https://system.address'
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('sign_btn').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,'config.yaml')
# 以覆盖写入打开文件
fw = open(yamlPath,'w',encoding='utf-8')
# 构建数据
data = {"cookie1":cookie1}
# 装载写入yaml文件。
yaml.dump(data,fw)

driver.quit()

2.2.2.2. 시스템


# FileName : stlUseCookieLogin.py
# Author  : Adil
# DateTime : 2018/3/20 21:48
# SoftWare : PyCharm
from selenium import webdriver
import time,yaml,os
url = 'https://system.address'
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,'config.yaml')
# 读取yaml 文件
f = open(yamlPath,'r',encoding='utf-8')
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()


위 내용은 Python Selenium 쿠키는 로그인 샘플 코드를 얻기 위해 확인 코드를 우회합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.