php 绕过cookie验证码,selenium+cookie跳过验证码登录实现步奏详解

这次给大家带来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,将其拷贝出来,进行对比

09cea896848b640c2611e110af00d99e.png

如图,对比可以,登录后多余四个cookie

a7e39c5e833353e7e0cc9f9e4adf5e35.png

查看多余cookie的位置,是list 的1、4、7、8g额元素,所以将其取出,作为参数给cookie登录函数。

注意:该实例介绍的是无验证码登录操作,但思路是一样的。而这个demo ,仅仅是为了介绍一下使用cookie 登录的思路,具体项目应用中,这样是很不方便的。

2、绕过验证码登录实战

接下来,介绍含有验证码的登录,当然cookie处理的思路与上介绍的基本一样

这里增加了几点内容:

a、先首次使用验证码正确登录并保存登录前、后的cookie,对比分析cookie,筛选有用的cookie

b、将cookie 写到yaml 文件中,方便后续使用cookie登录时直接使用,而不需像上面介绍的那样,每次都需要先正常登录一样。

c、使用cookie登录时,从yaml文件中读取对应cookie即可。注意:Yaml 文件操作详见: Python Yaml 学习 ,有详细介绍yaml的读写操作。

注意:这里介绍的是先手动输入验证码正确登录后获取cookie。实际应用中可以使用其他方式获取cookie

如:1、之前介绍的博客园登录实例:Python - Cookie绕过验证码登录 使用fiddler,查看cookie

2、使用浏览器查看cookie 如,借助chrome 插件如下图,导出cookie进行分析。

15de428cc68a4b2b06ae67e7a4a83a3d.png

思路如上,代码如下:

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中文网其它相关文章!

推荐阅读:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值