常见的验证码的处理方式

面试时,HR会问你,开发为什么要在登录时,添加验证码。你应该怎么回答呢?

首先,验证码主要目的是识别是否是机器人登录。

其次,因为大量的自动化(爬虫)登录,会向服务器发送大量的垃圾请求,影响服务器的性能。

1、万能验证码

万能验证码是企业中最常用的方式,有的公司内网不需要输入验证码,外网ip就需要输入验证。

2、屏蔽验证码

测试环境,不需要加验证码。

3、调用接口获取验证码

手机短信验证码,这个需要去掉接口请求返回数据,读取令牌。

4、手动输入

可以在登录完,加上一个时间等待,手动输入一次,不退出去执行程序。

5、读取cookie,跳过登录

5.1 原理

平时手动上网,打开一个网站,登录一次以后,后面的页面就不需要登录.

这时因为网站可以通过cookie记录登录的状态。

所以,我们只需要登录一次,记住cookie。

以后直接设置cookie,服务器就会认为我们登录成功了,这样就可以跳过登录了

5.2 步骤

1、获取登录后的cookie

我们输入验证码时,加一个20秒的时间等待,在这期间手动输入一个验证码。

# # 1、打开浏览器
import time

from selenium import  webdriver
from selenium.webdriver.common.by import By


class TestLogin:
    def test_login_function(self):
        # 2、输入网址,打开登录界面
        driver = webdriver.Firefox()
        driver.implicitly_wait(5)
        driver.get("https://svr-6-9010.share.51env.net/accounts/login/")
        # 3、输入用户名
        driver.find_element_by_id("id_login").send_keys("changcheng1211")
        # 4、输入密码
        driver.find_element_by_id("id_password").send_keys("zhaodahai")
        # 5.输入验证码
        # 假如我们现在没有万能验证码,如何登录
        # 输入验证码时,加一个20秒的时间等待,在这期间手动输入一个验证码。
        time.sleep(20)

        # 6、点击登录按钮
        driver.find_element_by_class_name("primaryAction").submit()
        # 在登录两秒,确保服务器返回了响应结果,获取并打印登录成功后的cookie信息
        time.sleep(2)
        print(driver.get_cookies())
        # [{'name': 'csrftoken', 'value': 'kdA8P4wzJEz02SlxZQiNwRxXPohU5YJvqJMdcoLHfCcM6uRRCZGraWrSqZULTf5Y', 'path': '/', 'domain': 'svr-6-9010.share.51env.net', 'expiry': 1749554027, 'secure': False, 'httpOnly': False}, {'name': 'sessionid', 'value': '9zitnrp4qgijk43buh7es73gg8pu1jwx', 'path': '/', 'domain': 'svr-6-9010.share.51env.net', 'expiry': 1719314027, 'secure': False, 'httpOnly': True}]




2.登录成功后,将里面的cookie替换掉,并修改过期时间,让cookie永不过期,其实只能保障在测试的这段时间不过期,

import time

import allure
from selenium.webdriver.common.by import By
import allure

class TestLogin:
    @allure.feature('登录模块')
    def test_skip_login(self,driver):
        driver.get('https://svr-6-9010.share.51env.net/accounts/login/')
        # 1.在test_login5.py中获取的cookies信息
        # csrftoken 和sessionid 的值是动态变化的,时间长了也会过期,
        cookies = [{'name': 'csrftoken', 'value': 'r6APJ7wcyV36jbZtCiSmaQoeKM8NAPwr0zZ842ycGR4u8nRNDQRfnrABhvsWmoLT', 'path': '/', 'domain': 'svr-6-9010.share.51env.net', 'expiry': 1749624505, 'secure': False, 'httpOnly': False}, {'name': 'sessionid', 'value': 'f0xgxwylq2m92ku2c2pjcjhck0atco5n', 'path': '/', 'domain': 'svr-6-9010.share.51env.net', 'expiry': 1719384505, 'secure': False, 'httpOnly': True}]
        # 2.打开首页后,设置cookie信息
        for cookie in cookies:
            # 3.cookie是有有效期的,我们需要改一下有效期,让它永远不过期
            if 'expiry' in cookie.keys():
                cookie['expiry'] = int(time.time()) + 36000

            driver.add_cookie(cookie)
        # 3.重新打开页面,相当于重新发送了一个带着登录成功cookie的请求,这时,服务器就以为你登录过了,就会返回登录后的界面
        driver.get('https://svr-6-9010.share.51env.net/accounts/login/')
        time.sleep(1)
        driver.find_element(By.LINK_TEXT,'我的媒体').click()
        print(driver.get_cookies())


因为验证码的目的就是为了防止机器自动登录,所以任何绕过验证码的方式都不是万能的。有些网站用不了这种方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值