22-验证码的处理

        验证码这种问题是比较头疼的,对于验证码的处理,不要去想破解方法,这个验证码本来就是为了防止别人自动化登录的。

        目前最快速解决的三个手段:

  • 去掉验证码:比较适合新开发但未上线的系统。
  • 设置万能码:比较适合已经上线使用的系统。
  • 通过添加登录cookie来绕过验证码。

        本文以课堂派网站为例,介绍通过添加登录cookie的方式来绕过验证码,本方法只适用于需要记住登录状态的网站。

一、添加cookie的方法

1)driver.add_cookie(cookie_dict)方法中的参数是cookie_dict,说明该参数是字典类型。

2)源码介绍:

add_cookie(self, cookie_dict)
Adds a cookie to your current session.

:Args:
- cookie_dict: A dictionary object, with required keys - "name" and "value";
optional keys - "path", "domain", "secure", "expiry"

Usage:
driver.add_cookie({'name' : 'foo', 'value' : 'bar'})
driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})
driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure':True})

二、cookie的组成结构

        通过get_cookie(name)方法获取到的cookie信息主要包含以下属性:

cookie ={u'domain': u'.cnblogs.com',
         u'name': u'.CNBlogsCookie',
         u'value': u'xxxx',
         u'expiry': 1491887887,
         u'path': u'/',
         u'httpOnly': True,
         u'secure': False}

# domain:服务器域名
# name:cookie的名称
# value:cookie的的值,是动态生成的
# expiry:cookie的有效终止日期
# path:path属性定义了哪些路径下的页面可获取服务器设置的cookie信息
# httpOnly:防脚本攻击
# secure:在cookie中添加该属性,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时,浏览器才向服务器提交相应的cookie。当前这种协议只有一种,即为HTTPS。

三、获取cookies并保存在本地

from selenium import webdriver
import time
import json

driver = webdriver.Chrome()
driver.get("https://www.ketangpai.com/User/login.html")

# 手动登录
time.sleep(20)

# 获取所有cookie信息
dictCookies = driver.get_cookies()

# 将cookie列表转换成字符串
jsonCookies = json.dumps(dictCookies)

# 将cookie列表字符串保存到本地文件中
with open('cookies.txt', 'w') as f:
    f.write(jsonCookies)
print('cookie列表字符串保存成功!')

        查看本地保存的所有cookie信息:

四、加载本地保存的cookies并访问网页

from selenium import webdriver
import json

driver = webdriver.Chrome()

# 读取保存在本地文件中的cookie列表字符串
with open('cookies.txt', 'r', encoding='utf8') as f:
    listCookies = json.loads(f.read())

# 添加cookie
for cookie in listCookies:
    cookie_dict = {
        'domain': 'www.ketangpai.com',
        'name': cookie.get('name'),
        'value': cookie.get('value'),
        "expires": '',
        'path': '/',
        'httpOnly': False,
        'HostOnly': False,
        'Secure': False
    }
    driver.add_cookie(cookie_dict)

# 访问网页
driver.get("https://www.ketangpai.com/#/main")

运行结果后发现报错了:Message: invalid cookie domain

五、修改代码,解决问题

        这篇文章提供了一个解决方案:https://www.cnblogs.com/CoolJayson/p/7421013.html。

        "技术提示:必须先加载网站,这样Selenium才能知道cookie属于哪个网站,即使先加载网站的行为对我们没任何用处"。

        只需在代码中添加下面一句即可,这个url填 "https://www.ketangpai.com/User/login.html" 或 "https://www.ketangpai.com/Main/index.html" 都行,只要是同一个domain就行。

from selenium import webdriver
import json

driver = webdriver.Chrome()

# 添加下一行代码,解决invalid cookie domain报错
driver.get("https://www.ketangpai.com/User/login.html")

# 读取保存在本地文件中的cookie列表字符串
with open('cookies.txt', 'r', encoding='utf8') as f:
    listCookies = json.loads(f.read())

# 添加cookie
for cookie in listCookies:
    cookie_dict = {
        'domain': 'www.ketangpai.com',
        'name': cookie.get('name'),
        'value': cookie.get('value'),
        "expires": '',
        'path': '/',
        'httpOnly': False,
        'HostOnly': False,
        'Secure': False
    }
    driver.add_cookie(cookie_dict)

# 访问网页
driver.get("https://www.ketangpai.com/#/main")

        再次执行代码,页面跳转成功。

        以上代码最难的部分就是往浏览器里面添加cookie的地方,获取到的cookies是以列表的形式储存的,而列表里的元素是字典,每一个字典都是一个cookie,所以我们需要遍历列表,将买一个cookie信息以字典形式往浏览器中添加。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/676541.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【GD32】06 - SPI (含ST7735S TFT-LCD屏幕驱动)

这篇文章我们看看GD32中如何实现SPI,软件SPI的话可以参考我之前的文章,把对应操作GPIO口的代码从STM32改成GD32就可以使用了。 【快速上手STM32】SPI通信协议&&1.8寸TFT-LCD(ST7735S)_tftlcdst7735和stm32-CSDN博客文章浏…

docker部署skywalking

skywalking版本下载 1:拉取skywalking的oap镜像(可以选择自己的版本,最好与ui,agent版本一致) docker pull apache/skywalking-oap-server:9.5.02:启动oap docker run -d -p 11800:11800 -p 12800:12800 --name sw_oap apache/…

HCIE数通,为啥是网工的“黄金标准”?

作为网络工程师,你不可能没听说过HCIE,也不可能没听过数通,也可能曾经考虑过要不要挑战这个认证。 HCIE数通为何被誉为网工的黄金标准?聊聊 01 什么是HCIE数通? HCIE数通认证是华为技术有限公司推出的一项高级别认证…

深度学习-05-反向传播理论知识

深度学习-05-反向传播理论知识 本文是《深度学习入门2-自製框架》 的学习笔记,记录自己学习心得,以及对重点知识的理解。如果内容对你有帮助,请支持正版,去购买正版书籍,支持正版书籍不仅是尊重作者的辛勤劳动&#xf…

使用 IPSET 添加 CDN 节点 IP(IPv4/IPv6)到防火墙白名单

明月的服务器一直使用的是 iptables,随着近几年 IPv6 的普及,明月切身体会到还是 IPSET 最方便了,无论你是 IPv4 还是 IPv6 都可以方便的管理,无论你是加入白名单还是黑名单,都非常的简单高效!今天就参照明月自己的实操…

PyQt5串口测试工具

笔者经常会遇到使用上位机进行相关测试的场景,但现成的上位机并不能完全满足自己的需求,或是上位机缺乏使用说明。所以,自己写? 环境说明 pycharm 2023.2.25 python 3.10 anaconda 环境配置 conda create -n envsram ##…

Proxmox Backup Server 命名空间使用

作者:田逸(formyz) Proxmox Backup Server(一下统称PBS)从2.2版本开始,新增了命名空间这样一个功能。这个功能大大便利了多Proxmox VE集群或者单节点备份,在以前PBS版本中,如果有多个…

Windows系统下DOS命令

Windows系统下DOS命令 1. 与文件操作相关1.1 mkdir,md命令1.2 rmdir、rd命令1.3 dir命令1.4 start命令1.5 echo命令1.6 type命令1.7 copy命令1.8 move命令1.9 copy和move的区别1.10 del命令1.11 rename命令1.12 attrib命令1.13 fsutil命令1.14 assoc命令 2. 与网络相…

DevOps生命周期的8个阶段和DevOps pipeline 详解

您可能也在探索DevOps pipeline或工作流的概念,这些术语可能会根据不同的解释者而有所交替使用。尽管如此,DevOps生命周期和DevOps pipeline这两个术语更常被提及。 本文将首先阐述DevOps生命周期的概念,然后深入介绍DevOps pipeline。 Dev…

基于4G工业路由器的信息发布系统物联网应用方案

随着物联网技术的快速发展,智能信息发布系统已成为城市管理和信息传播的重要工具。而4G工业路由器作为连接信息发布终端与云平台的关键设备,其在提升信息发布效率方面发挥着至关重要的作用。为了提升智能信息发布系统的效率和智能化水平,智联…

怎么在pdf上编辑文字?帮你解决这个头疼的问题!

在信息爆炸的时代,PDF作为一种通用性极强的文件格式,广泛应用于各个领域。然而,对于许多用户来说,如何在PDF上编辑文字却是一个令人头疼的问题。今天,我们就来聊聊这个话题,并为大家推荐几款实用的PDF编辑软…

Python程序设计 身份证号的奥秘

第1关:判断性别 通过身份证的第17位也就是倒数第二位的数字可以辨别该身份证所属人的性别,奇数为男性,偶数为女性。 任务:输入身份证号,第17位若是偶数,输出男性,否则输出女性 如何截取字符串的一个字符 如何判断一个…

【YOLO 系列】基于YOLO V8的河道违规钓鱼检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

前言: 随着社会发展和人口增长,对自然资源的保护和管理变得越来越重要。河流是重要的自然资源之一,对生态系统和人类社会都至关重要。然而,违规钓鱼等活动可能对河流生态环境造成严重破坏,并影响水域资源的可持续利用…

Codeforces Round 920 (Div. 3) E. Eat the Chip 题解 博弈论 贪心

Eat the Chip 题目描述 Alice and Bob are playing a game on a checkered board. The board has h h h rows, numbered from top to bottom, and w w w columns, numbered from left to right. Both players have a chip each. Initially, Alice’s chip is located at th…

回溯--字母迷宫

1.题目描述 字母迷宫游戏初始界面记作 m x n 二维字符串数组 grid,请判断玩家是否能在 grid 中找到目标单词 target。 注意:寻找单词时 必须 按照字母顺序,通过水平或垂直方向相邻的单元格内的字母构成,同时,同一个单…

SSM民宿在线预订平台的设计与实现-计算机毕业设计源码44449

摘 要 信息化社会内需要与之径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对民宿在线预订平台等问题,对民宿信息管理进行研究分…

【Qt知识】Qt窗口坐标系

Qt的窗口坐标体系遵循标准的计算机图形坐标系统规则 Qt窗口坐标体系特点 坐标原点:窗口坐标体系的原点位于窗口的左上角,即坐标(0, 0)位置。 轴方向: X轴:向右为正方向,随着X坐标值的增加,元素在窗口中从…

Honor of Kings 2024.06.03 50star (S35) AFK

Honor of Kings 2024.06.03 50star (S35) AFK 来个赛季S35总结吧,这个赛季结束以后,可能要和【魔兽世界】一样AFK了,手游来说肯定没法子和WOW相比,干啥都是有队友才好玩。 我玩的基本都是肉,爆发强的英雄,最…

重学java 57.哈希表结构存储过程

别焦虑,生活无非见招拆招 —— 24.6.3 哈希表存储数据去重复的过程: a.先比较元素的哈希值(重写hashCode),再比较内容(重写equals) b.如果哈希值不一样,证明内容不一样,存 c.如果哈希值一样,再比较内容 如果哈希值一样,内容不一样(哈希碰撞,哈希冲突),存 如果哈希值…

FASTGPT:可视化开发、运营和使用的AI原生应用

近年来,随着人工智能(AI)技术的迅猛发展,AI的应用逐渐渗透到各行各业。作为一种全新的开发模式,AI原生应用正逐步成为行业的焦点。在这方面,FASTGPT无疑是一款颇具代表性的产品。本文将详细介绍FASTGPT的设…