ホームページ  >  記事  >  バックエンド開発  >  Selenium+Cookie による検証コードのスキップのログイン実装手順の詳細な説明

Selenium+Cookie による検証コードのスキップのログイン実装手順の詳細な説明

php中世界最好的语言
php中世界最好的语言オリジナル
2018-04-12 09:53:185768ブラウズ

今回はselenium+cookieを使って認証コードをスキップしてログインする手順を詳しく解説します selenium+cookieで認証コードをスキップしてログインする場合の注意点は以下の通りです。 、見てみましょう。

以前、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. コードの紹介

図に示すように、ログイン前とログイン後に Cookie を確認できます。をコピーして、比較に進みます

写真のように、ログイン後、さらに 4 つのクッキーが表示されます

です。リストの1、4、7、8gの要素を取り出してCookieログイン関数として使用します。

注: この

例の紹介 は確認コードなしのログイン操作ですが、考え方は同じです。このデモは、ログインに Cookie を使用するというアイデアを紹介するためのものです。特定のプロジェクト アプリケーションでは、これは非常に不便です。

2.認証コードを回避した実際のログイン

次に、認証コードを含むログインを紹介します。もちろん、Cookieの処理の考え方は上記で紹介したものと同じです

A。ここにいくつかのポイントが追加されました:

a. 初回は認証コードを使用して正しくログインし、ログイン前後の Cookie を保存し、Cookie を比較して分析し、有用な Cookie をフィルタリングします

b. Cookie を yaml ファイルに書き込みます。以降の Cookie の使用を容易にして、上記の説明を必要とせずに直接ログインできるようにするため、毎回通常どおりにログインする必要があります。

c. Cookie を使用してログインする場合は、yaml ファイルから対応する Cookie を読み取るだけです。注: Yaml ファイル操作の詳細については、「

Python Yaml Learning」を参照してください。yaml の読み取りおよび書き込み操作の詳細が説明されています。

注: ここで紹介するのは、認証コードを手動で入力して正しくログインし、Cookie を取得することです。実際のアプリケーションでは、他の方法でCookieを取得することもできます

例: 1. 以前紹介したブログガーデンのログイン例: Python - Cookie bypassesverification code login Use fiddler to view cookies

2. Use a browser to view cookies

たとえば、Chrome プラグインを使用して、以下に示すように、分析のために Cookie をエクスポートします。

考え方は上記の通りで、コードは次のとおりです:

2.1. 通常ログインして有効な Cookie を取得します

# 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. Cookie 設定ファイルを読み取り、Cookie を使用してログインしますシステムへ
# 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()

この記事の事例を読んだ後、あなたはその方法をマスターしたと思います。さらにエキサイティングな内容については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

Pythonがテキストデータを読み取ってDataFrame形式に変換する方法の詳細な説明

Pythonがスマートリプライ機能を実装するためにAPIを呼び出す方法

以上がSelenium+Cookie による検証コードのスキップのログイン実装手順の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。