【网站密码管理不用愁】进阶篇 • 如何利用cookie绕开登录验证码强上网站

本文介绍了如何利用Python的Selenium库绕过网站的图形验证码进行自动登录。通过获取和优化cookie,可以实现免密登录,从而避免复杂的验证码验证步骤。文章详细展示了获取和添加cookie的代码实践。
摘要由CSDN通过智能技术生成


————————————————————————————————

一、项目回顾

在上一篇文章中《【网站密码管理不用愁】基础篇 • 利用selenium构建网站密码管理和自动登录神器》

我分享了如何通过python+selenium来构建网站密码管理和自动登录神器。

用来解决我们在平时工作生活中遇到的各种网站太多、账号密码难管理的问题。
在这里插入图片描述
我们只需要打开运行窗口,输入我们设定的关键词,就能一键启动网站并自动输入账号和密码,实在方便得不要不要的。
在这里插入图片描述
以后麻麻再也不用担心我记不住账号、找不到密码啦!

同时,也有小伙伴在评论区留言道
在这里插入图片描述
对吼!

现在我们有很多网站登录不仅是要输入账号密码,还要输入验证码。

而且还是多种款式的验证码各不相同。
在这里插入图片描述

——

二、问题分析

作为稀里糊涂自学python三个月,编程知识渊博(qian bo)的我,看到这个问题自然是一脸懵逼。

所以恣意地在网上搜索,发现这个小儿科的问题早已被各路网友大神分分钟钟解决掉过。

大神们的骚操作极多,什么验证码识别训练模型、图像识别计算滑块验证码的距离等等。
在这里插入图片描述
溜了溜了,反正我是学不来。
在这里插入图片描述
从我们个人的实际需求出发,我们是希望建立一种能够快速登录网站的方式,从而方便我们的工作生活,解决时间,提高效率。

我们的核心目的是实现网站的快速登录,而非正面硬刚验证码环节,所以我们可以采用绕过验证码的方式登录网站。
在这里插入图片描述
所以经过我细致探索,发现利用selenium本身具有的add_cookie方法就能够成功解决需要验证码才能登录的问题。

那么首先让我们来搞清楚通过cookie免密免验证码登录的原理是什么。

简单来说,cookie就是网站存储在我们浏览器上的一小段数据,里面有我们个人用户的信息。

如果我们首次登录网站后,浏览器记住了我们登录后的信息(也就是cookie),当下一次请求时会把该 cookie 发送给网站,之后网站服务器发现客户端发送过来的 cookie 后,会检查是哪个客户端发送过来的请求,然后对比服务器上的记录,最后得到了之前的状态信息。

这也是我们在登录网站时候勾选【下次自动登录】后,以后不用输入账号和密码自动登录网站的原因。

再通俗点讲,cookie记住了我们登录网站后的状态,我们下次登录网站的时候浏览器会把这些cookie发送给网站,从而直接进入到登录后的状态,也就不需要输入账号密码,更不用什么验证码之类的呢。

——

三、利用cookie绕过验证码环节

百度在输入账号和密码之后,会出现图形验证码,要求拖动滑块使图片角度为正,因为每次需要拖动的距离不一样,所以不能像以前那样控制鼠标事件一拖到底(以前百度的验证码是直接拖到底那种)。
在这里插入图片描述
本次我们以实战登录百度为例,看看如何通过cookie绕过百度的图形滑块验证码,从而强上百度。
在这里插入图片描述

【01】获取cookie

首先我们明确下获取cookie的流程

  1. 通过python+selenium进行到自动输入账号密码后的流程(为了练习)
  2. 手动滑动图形验证码并实现成功登录
  3. 利用get_cookie()方法获取我们登录后的cookie

简单三步走,完美!

我们先来编写第一步的代码,再来练习一下如何定位目标元素、如何控制键盘事件。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver= webdriver.Chrome()
driver.get('https://www.baidu.com/')

driver.maximize_window()     # 浏览器最大化

driver.find_element_by_css_selector('#u1 .lb').click()  # 点击登录
time.sleep(2)          # 需要加载一段时间,否则找不到页面元素
driver.find_element_by_css_selector('#TANGRAM__PSP_10__footerULoginBtn').click()                # 切换到使用账号密码登录
time.sleep(1)          # 等页面加载一段时间

driver.find_element_by_id('TANGRAM__PSP_10__userName').send_keys('******')    # 输入自己的账号
driver.find_element_by_id('TANGRAM__PSP_10__password').send_keys('******')    # 输入自己的密码
driver.find_element_by_id('TANGRAM__PSP_10__password').send_keys(Keys.ENTER)    # 回车确定登录

time.sleep(20)   # 等待较长时间,确保成功登录(因为需要获得登录后的cookie)

cookies = driver.get_cookies()  # 获取cookie
print(cookie)                   # 打印cookie

其中对部分代码进行重点说明

  • 我们导入了time库,在适当位置进行强制等待,确保页面元素都加载出来,尤其在最后我们进行手动拖动滑块进行验证的环节,一定要留出充足的时间等待进入登录成功后的页面再获取其cookie

然后第二步我们运行程序,selenium帮我们自动登录网站并输入账号密码,进入到验证码环节,这时候我们手动拖动验证码进行登录。

最后就让我们静静等待程序获取cookie。

最后的cookie是这样子的在这里插入图片描述
这一大团密密麻麻的是什么玩意?

我们仔细看一下,其实就是有多个字典组成的列表,每个字典中又有多个键值对。

【02】优化cookie

首先我们要搞明白为什么要对获取到的cookie,因为上面我们得到那一串cookie的列表是无法直接通过add_cookie()方法添加进去的。

会出现两个问题:

  1. add_cookie()方法中只能传入字典,所以我们需要先将cookie列表中的每一个字典单独提出来。
  2. 计算将单个字典提出来传入到方法add_cookies()中,在运行程序的时候会报错: selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid ‘expiry’ 。最简单有效的方法就是直接将“expiry”这对键值对删除掉。
  3. </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值