常见的验证码的处理方式

常见的验证码的处理方式面试时 HR 会问你 开发为什么要在登录时 添加验证码

大家好,欢迎来到IT知识分享网。

面试时,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': , 'secure': False, 'httpOnly': False}, {'name': 'sessionid', 'value': '9zitnrp4qgijk43buh7es73gg8pu1jwx', 'path': '/', 'domain': 'svr-6-9010.share.51env.net', 'expiry': , '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': , 'secure': False, 'httpOnly': False}, {'name': 'sessionid', 'value': 'f0xgxwylq2m92ku2c2pjcjhck0atco5n', 'path': '/', 'domain': 'svr-6-9010.share.51env.net', 'expiry': , '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()) 

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120327.html

(0)
上一篇 2025-10-30 15:00
下一篇 2025-10-30 15:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信