一.验证码由来

1.验证码是一种区分用户是计算机还是人的公共全自动程序
2.可以防止恶意破解密码、刷票、论坛灌水等安全问题
3.有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试
4.对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码

5.验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的
5.1.也有算术计算结果的,再复杂-点就是滑动验证的

二.WebUI图片验证码问题解决办法

1.让开发去掉验证码

2.让开发设置一个万能验证码

3.通过cookie绕过验证码登录

4.pillow库识别图片获取图片内容,填写验证码登录

5.利用缓存登录,比如谷歌你访问过得网站,本地有缓存,利用缓存登录

三.本篇通过cookie绕过验证码登录,因为相比4、5方法,简单、好调!

1.每次登录都会有cookie信息,在要访问的链接里带上cookie信息就可以不用输入账号密码登录成功!

2.注意点:访问网站,一旦加载网站,即使没登录也会产生一个cookie
2.1.需要删除这个cookie信息,否则,需要登录的网址上传一个cookie
2.2.再把第一访问自动生成的也带上,就会有两个cookie,就会登录失败
3.方法一
#encoding=utf-8
import time
from selenium import webdriver
 
driver1 = webdriver.Chrome(executable_path=r'../conf/chromedriver.exe')
driver1.maximize_window()

driver1.get('http://XXXXXXXXXX/login')

# 加载网站,即使没登录,也会产生一个cookie,需要删除cookie
driver1.delete_all_cookies()

cookie = {"SESSION":"这里填写session值;",
             "其他cookie键值对":"其他cookie键值对;",
             "其他cookie键值对":"其他cookie键值对;",
             "其他cookie键值对":"其他cookie键值对",
             "其他cookie键值对":"其他cookie键值对",
             "JSESSIONID":"这里填写jsessionid的值"
          }
          
driver1.add_cookie({"domain": "域名", "name": "SESSION", "value": "session值",
                       "expires": "Session", "path": "path是什么就填写什么", "httpOnly": False, "HostOnly": False,
                       "Secure": False})
driver1.add_cookie({"domain": "域名", "name": "其他cookie键值对", "value": "其他cookie键值对",
                       "expires": "Session", "path": "path是什么就填写什么", "httpOnly": False, "HostOnly": False,
                       "Secure": False})
driver1.add_cookie({"domain": "域名", "name": "其他cookie键值对", "value": "其他cookie键值对",
                       "expires": "Session", "path": "path是什么就填写什么", "httpOnly": False, "HostOnly": False,
                       "Secure": False})
driver1.add_cookie({"domain": "域名", "name": "其他cookie键值对", "value": "其他cookie键值对",
                       "expires": "Session", "path": "path是什么就填写什么", "httpOnly": False, "HostOnly": False,
                       "Secure": False})
driver1.add_cookie({"domain": "域名", "name": "其他cookie键值对", "value": "其他cookie键值对",
                       "expires": "Session", "path": "path是什么就填写什么", "httpOnly": False, "HostOnly": False,
                       "Secure": False})
driver1.add_cookie({"domain": "域名", "name": "JSESSIONID", "value": "这里填写jsessionid的值",
                       "expires": "Session", "path": "path是什么就填写什么", "httpOnly": False, "HostOnly": False,
                       "Secure": False})
 
time.sleep(2)

#列表里面有两个字典cookie信息,一个是登录之前的,一个是登录之后的
save_cookie = driver1.get_cookies()
print(save_cookie)

driver1.quit()

driver2 = webdriver.Chrome(executable_path=r'../conf/chromedriver.exe')
driver2.maximize_window()

# 必须首先加载网站,这样selenium才知道cookie是属于哪个网站的
driver2.get('http://XXXXXXXXXX/login')
print(driver2.get_cookies())

#加载网站,即使没登录,也会产生一个cookie,需要删除cookie
driver2.delete_all_cookies()

for cookie in save_cookie:
    # 添加driver1登录成功之后的cookie
    driver2.add_cookie(cookie)
driver2.get('http://XXXXXXXXXX/index')
print(driver2.get_cookies())
time.sleep(3)
4.方法二
#encoding=utf-8
import time
from selenium import webdriver

def autoSessionLoginSuccess():
    driver = webdriver.Chrome(
        executable_path=r'XXXXXXXXXX\conf\chromedriver.exe')
    driver.maximize_window()
    
    driver.get('XXXXXXXXXX/login')
    driver.delete_all_cookies()
    
    cookie = {
        "SESSION": "XXXXXXXXXX;",
        "XXXXXXXXXX": "login;",
        "XXXXXXXXXX": "login;",
        "XXXXXXXXXX": "login",
        "XXXXXXXXXX": "login",
        "JSESSIONID": "XXXXXXXXXX"
    }
    
    driver.add_cookie({"domain": "XXXXXXXXXX", "name": "SESSION", "value": "XXXXXXXXXX",
                        "expires": "Session", "path": "XXXXXXXXXX", "httpOnly": False, "HostOnly": False,
                        "Secure": False})
    driver.add_cookie({"domain": "XXXXXXXXXX", "name": "XXXXXXXXXX", "value": "login",
                        "expires": "Session", "path": "XXXXXXXXXX", "httpOnly": False, "HostOnly": False,
                        "Secure": False})
    driver.add_cookie({"domain": "XXXXXXXXXX", "name": "XXXXXXXXXX", "value": "login",
                        "expires": "Session", "path": "XXXXXXXXXX", "httpOnly": False, "HostOnly": False,
                        "Secure": False})
    driver.add_cookie({"domain": "XXXXXXXXXX", "name": "XXXXXXXXXX", "value": "login",
                        "expires": "Session", "path": "XXXXXXXXXX", "httpOnly": False, "HostOnly": False,
                        "Secure": False})
    driver.add_cookie({"domain": "XXXXXXXXXX", "name": "JSESSIONID", "value": "XXXXXXXXXX",
                        "expires": "Session", "path": "XXXXXXXXXX", "httpOnly": False, "HostOnly": False,
                        "Secure": False})
    driver.add_cookie({"domain": "XXXXXXXXXX", "name": "XXXXXXXXXX", "value": "login",
                        "expires": "Session", "path": "XXXXXXXXXX", "httpOnly": False, "HostOnly": False,
                        "Secure": False})
    time.sleep(2)
    driver.refresh()
    driver.get('XXXXXXXXXX/index')
    return driver
 
if __name__ == '__main__':
    #driver1 = webdriver.Chrome(executable_path="../conf/chromedriver.exe")
    autoSessionLoginSuccess()
5.注意:需要访问两次地址,第一访问登录地址
5.1.然后手动加载cookie信息,第二次访问地址再带上登录的cookie,就可以登录成功!
6.第一次访问、第二次访问都需要删除网站自带的cookie,不然是登录不成功的
6.1.一开始只删除第二次访问地址的cookie信息,怎么也登录不成功
6.2.最后发现多个session信息,然后发现是因为第一次登录没有删除网站自带的session
6.3.这样第二次访问时就有两个session了,就会登录失败!
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐