python无需验证码免登录12306抢票 --selenium(2)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@[TOC](python无需验证码免登录12306抢票 --selenium(2))
前言
提示:这里可以添加本文要记录的大概内容:
就在刚刚我抢的票:2025年1月8日 上午9.00多 抢到了哈哈哈哈— 其实还是有用的我是在 8:59:56运行程序的
上一篇帖子,我们已经了解了如何用python自动登录12306实现自动抢票,现在我们来一个进阶的版本,实现cookie免登录,这样可绕过验证码实现自动抢票。同时包括环境如何配置,也在这个帖子里面。
上一篇帖子的链接:https://blog.csdn.net/xaing1314/article/details/144868504
配置selenium自动化的帖子链接:https://blog.csdn.net/xaing1314/article/details/144869489?spm=1001.2014.3001.5502
需求:上此的帖子,需要自动登录,并且需要手机验证码,在真实抢票中太过繁琐,所有我自己也在思索,找了帖子和B站,终于实现了用cookie技术自动免登录12306。在今天上午9.00 (2025-01-07)抢票(2025-01-21)成功。
如何使用:1.比如9.00正式抢票,可以在8.53左右二维码扫描登录,当然是要配合下方程序,这样9.00可以正式抢票无需登录,cookie也不会失效。2.直接在8.59.58左右运行此程序,即可。
今日实战:今天运行其实是抢到了,但是他一直在等待,也就是页面一直停在哪里,其实那个时候你可以用手点击操作,因为我们是进来了,不需要去管程序的对错。也就是说,程序帮你操作到哪一步,如果卡住了,直接上手。这也让我有想做一个多线程的想法,将多线程加入这个程序中。
提示:以下是本篇文章正文内容,下面案例可供参考
一、cookie免登录
1.cookie的讲解: Cookie也被称为小型文本文件,是由服务器发送到用户浏览器并保存在用户计算机或移动设备上的一种数据形式。以下是对Cookie的详细解释:
定义与工作原理定义:Cookie是网站在用户浏览器中创建和存储的小型文本文件,用于辨别用户身份和存储用户相关信息。工作原理:当用户访问某个网站时,服务器会在用户的浏览器中创建一个Cookie,并将其存储在用户的计算机或移动设备上。当用户再次访问该网站时,浏览器会将Cookie发送回服务器,服务器通过读取Cookie中的信息来识别用户身份或获取用户的个性化设置。
2.获取cookie的代码如下: 程序运行后会打开登录界面,然后使用的二维码登录。这样程序可以得到当前的cookie值字段,在cookie失效前无须再进行登录。
<0001>初始化浏览器的函数— browser_initial():
def browser_initial():""""进行浏览器初始化"""# os.chdir('E:\\pythonwork')# 1.将加载项配置到启动浏览器中 打开/创建浏览器对象browser = webdriver.Chrome(service=Service(path))# 2.网址 https://kyfw.12306.cn/otn/resources/login.html -- 登录界面# https://kyfw.12306.cn/otn/leftTicket/init 选票界面可以 判断是否登录log_url = 'https://kyfw.12306.cn/otn/resources/login.html'return log_url, browser
<0002> 获得cookie的函数— get_cookies(browser):
def get_cookies(browser):"""获取cookies保存至本地"""browser.get(log_url)time.sleep(15) # 进行扫码# selenium_login(browser)# print("登录成功")dictCookies = browser.get_cookies() # 获取list的cookiesstring_Cookies = json.dumps(dictCookies) # 转换成字符串保存with open('string_cookies.json', 'w') as f:f.write(string_Cookies)print('cookies保存成功!')if __name__ == "__main__":log_url, browser = browser_initial()browser.get(log_url)# 1.二维码登录 保存 -- cookie -- 用完关掉get_cookies(browser)
运行后就会变成这样,找到二维码,让手机自动登录。
用手机扫描即可,这个操作是设置了时间time.sleep(15),你也可以在get_cookies(browser)中修改此代码,只有自己扫了登录成功,后续出现的cookie保存成功,才是最新的cookie值。
二、cookie登录函数与自动化 – 可以实现cookie值的匹配–实现自动登录 – 无须手机验证码
1.login_cookie函数代码
代码如下(示例):
def login_cookie(log_url, browser):"""从本地读取cookies并刷新页面,成为已登录状态"""# browser.get(log_url)with open('string_cookies.json', 'r', encoding='utf8') as f:listCookies = json.loads(f.read())# 往browser里添加cookiesfor cookie in listCookies:browser.add_cookie(cookie)time.sleep(1)# 如果是已登录的界面,免登录应该打开这个界面 https://kyfw.12306.cn/otn/view/index.html# https://www.12306.cn/index/ --12306官网首页browser.get(log_url)return browser
2.selenium_run(driver)函数代码 – 这里是可以到预定,然后抢票成功要10分钟之内自己付款。
def selenium_run(driver):# 11.1 选择出发的城市--点击那个框driver.find_element(by="css selector", value="#fromStationText").click()# 11.2 选择出发的城市--选择城市driver.find_element(by="css selector", value="#fromStationText").send_keys(login["from_city"])# 11.3 选择出发的城市--回车确定driver.find_element(by="css selector", value="#fromStationText").send_keys(Keys.ENTER)# 12.1 选择目的的城市--点击那个框driver.find_element(by="css selector", value="#toStationText").click()# 12.2 选择目的的城市--选择城市driver.find_element(by="css selector", value="#toStationText").send_keys(login['to_city'])# 12.3 选择目的的城市--回车确定driver.find_element(by="css selector", value="#toStationText").send_keys(Keys.ENTER)# 13.1 选择出发的日期--点击那个框driver.find_element(by="css selector", value="#train_date").clear()# 12.2 选择出发的日期--选择城市driver.find_element(by="css selector", value="#train_date").send_keys(login['train_date'])# 12.3 选择出发的日期--回车确定driver.find_element(by="css selector", value="#train_date").send_keys(Keys.ENTER)# # 12.4 点击--显示全部可预订的车次# driver.find_element(by="css selector", value="avail_ticket").click()# 12.5 点击查询driver.implicitly_wait(5)driver.find_element(by="css selector", value="#query_ticket").click()# num = int(input('请输入您想要的车次:'))# 点击预订按钮 -- 选择要预定的是第几躺车 -- 这个代码没有问题# driver.find_element(by="css selector", value='#ticket_65000G279007_01_03 > td.no-br').click()# //div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]/@id -- 但是selenium的find_elements不可以用@id找到元素。ticket_list = driver.find_elements(by="xpath", value='//div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]')ticket_num = ticket_list[login['num']].get_attribute("id")ticket_pre = ticket_num + ' > td.no-br'# 12.6 点击想要车次的预定按钮driver.find_element(by="css selector", value=f"#{ticket_pre}").click()# 13.1 勾选想要的乘车人driver.find_element(by="css selector", value='#normalPassenger_0').click()# 13.2 提交订单driver.find_element(by="css selector", value='#submitOrder_id').click()driver.implicitly_wait(5)# 13.3 选择靠窗的1F的位置 #erdeng1 > ul:nth-child(4) > li:nth-child(2) 是在浏览器右键copy selector选择出来的# # 1F是不可以选中的driver.find_element(by="css selector", value='#erdeng1 > ul:nth-child(4) > li:nth-child(2)').click()# 13.4 再次确认提交time.sleep(1)# 如果此处没有响应多点击就好 -- 加上 "try -- except"driver.find_element(by="css selector", value='#qr_submit_id').click()# driver.find_element(by="css selector", value='#qr_submit_id').click()# driver.find_element(by="css selector", value='#qr_submit_id').click()
三、完整的代码
1.代码主体 – 先运行get_cookies(browser),注释掉后面的两句代码,二维码登录以后,再注释掉get_cookies(browser),运行后面两个即可。
if __name__ == "__main__":log_url, browser = browser_initial()browser.get(log_url)# 1.二维码登录 保存 -- cookie -- 用完关掉get_cookies(browser)# 2.自动登录driver = login_cookie(log_url, browser)selenium_run(driver)
2.完整代码
import time
import json
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
path = r'D:\game\chromedriver.exe'def browser_initial():""""进行浏览器初始化"""# os.chdir('E:\\pythonwork')# 1.将加载项配置到启动浏览器中 打开/创建浏览器对象browser = webdriver.Chrome(service=Service(path))# 2.网址 https://kyfw.12306.cn/otn/resources/login.html -- 登录界面# https://kyfw.12306.cn/otn/leftTicket/init 选票界面可以 判断是否登录log_url = 'https://kyfw.12306.cn/otn/leftTicket/init'return log_url, browserdef get_cookies(browser):"""获取cookies保存至本地"""browser.get(log_url)time.sleep(15) # 进行扫码# selenium_login(browser)# print("登录成功")dictCookies = browser.get_cookies() # 获取list的cookiesstring_Cookies = json.dumps(dictCookies) # 转换成字符串保存with open('string_cookies.json', 'w') as f:f.write(string_Cookies)print('cookies保存成功!')def login_cookie(log_url, browser):"""从本地读取cookies并刷新页面,成为已登录状态"""# 这个是12306的登录界面 https://kyfw.12306.cn/otn/resources/login.html# browser.get(log_url)with open('string_cookies.json', 'r', encoding='utf8') as f:listCookies = json.loads(f.read())# 往browser里添加cookiesfor cookie in listCookies:# cookie_dict = {# 'domain': cookie.get('domain'),# # "expires": cookie.get('value'),# 'httpOnly': cookie.get('httpOnly'),# 'name': cookie.get('name'),# 'path': cookie.get('path'),# "sameSite": "Lax",# 'Secure': cookie.get('Secure'),# 'value': cookie.get('value'),# }browser.add_cookie(cookie)# browser.refresh()time.sleep(1)# 如果是已登录的界面,可以免登录直接进 https://kyfw.12306.cn/otn/view/index.html# https://www.12306.cn/index/ --12306官网首页browser.get(log_url)return browserdef selenium_run(driver):# 11.1 选择出发的城市--点击那个框driver.find_element(by="css selector", value="#fromStationText").click()# 11.2 选择出发的城市--选择城市driver.find_element(by="css selector", value="#fromStationText").send_keys(login["from_city"])# 11.3 选择出发的城市--回车确定driver.find_element(by="css selector", value="#fromStationText").send_keys(Keys.ENTER)# 12.1 选择目的的城市--点击那个框driver.find_element(by="css selector", value="#toStationText").click()# 12.2 选择目的的城市--选择城市driver.find_element(by="css selector", value="#toStationText").send_keys(login['to_city'])# 12.3 选择目的的城市--回车确定driver.find_element(by="css selector", value="#toStationText").send_keys(Keys.ENTER)# 13.1 选择出发的日期--点击那个框driver.find_element(by="css selector", value="#train_date").clear()# 12.2 选择出发的日期--选择城市driver.find_element(by="css selector", value="#train_date").send_keys(login['train_date'])# 12.3 选择出发的日期--回车确定driver.find_element(by="css selector", value="#train_date").send_keys(Keys.ENTER)# # 12.4 点击--显示全部可预订的车次# driver.find_element(by="css selector", value="avail_ticket").click()# 12.5 点击查询driver.implicitly_wait(5)driver.find_element(by="css selector", value="#query_ticket").click()# num = int(input('请输入您想要的车次:'))# 点击预订按钮 -- 选择要预定的是第几躺车 -- 这个代码没有问题# driver.find_element(by="css selector", value='#ticket_65000G279007_01_03 > td.no-br').click()# //div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]/@id -- 但是selenium的find_elements不可以用@id找到元素。ticket_list = driver.find_elements(by="xpath", value='//div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]')ticket_num = ticket_list[login['num']].get_attribute("id")ticket_pre = ticket_num + ' > td.no-br'# 12.6 点击想要车次的预定按钮driver.find_element(by="css selector", value=f"#{ticket_pre}").click()# 13.1 勾选想要的乘车人driver.find_element(by="css selector", value='#normalPassenger_0').click()# 13.2 提交订单driver.find_element(by="css selector", value='#submitOrder_id').click()driver.implicitly_wait(5)# 13.3 选择靠窗的1F的位置 #erdeng1 > ul:nth-child(4) > li:nth-child(2) 是在浏览器右键copy selector选择出来的# # 1F是不可以选中的driver.find_element(by="css selector", value='#erdeng1 > ul:nth-child(4) > li:nth-child(2)').click()# 13.4 再次确认提交time.sleep(1)# 如果此处没有响应多点击就好 -- 加上 "try -- except"# driver.find_element(by="css selector", value='#qr_submit_id').click()# driver.find_element(by="css selector", value='#qr_submit_id').click()# driver.find_element(by="css selector", value='#qr_submit_id').click()f = open('login.json', encoding='utf-8').read()
login = json.loads(f)if __name__ == "__main__":log_url, browser = browser_initial()browser.get(log_url)# 1.二维码登录 保存 -- cookie -- 用完关掉# get_cookies(browser)# 计算程序运行时间# start = time.perf_counter()# 2.自动登录driver = login_cookie(log_url, browser)# # 如果没有登录那就自动登录 -- 然后获得cookie自动保存# # if browser.find_element(by="css selector", value="#login_user").text == "登录":# # 3.自动买票selenium_run(driver)# end = time.perf_counter()# runTime = end - start# runTime_ms = runTime * 1000# # 输出运行时间# print("运行时间:", runTime, "秒")# print("运行时间:", runTime_ms, "毫秒")
3.login.json – 解释这个文件
图中字典信息:代表的是地址日期,num代表的是第几躺车,id_card身份证,后4位。这里面有用账户密码登录的信息,虽然这里用不上,但是我们上一个帖子是用这个的,所以我把它写在了一起。
四、总结
1.几个注意:代码中的url最好是用登录成功的页面,而非登录页面。不然会一直显示要登录。
log_url = 'https://kyfw.12306.cn/otn/resources/login.html'
log_url = 'https://kyfw.12306.cn/otn/leftTicket/init' ##---用这个
2.改进:今天真正的实战我也挺满意的就是想着再改进一下,看看多线程是否可以直接抢到。明天就要真正抢票啦 – 给大家看看今天的战果。
相关文章:
python无需验证码免登录12306抢票 --selenium(2)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 [TOC](python无需验证码免登录12306抢票 --selenium(2)) 前言 提示:这里可以添加本文要记录的大概内容: 就在刚刚我抢的票:2025年1月8日…...
[论文阅读]Corpus Poisoning via Approximate Greedy Gradient Descent
Corpus Poisoning via Approximate Greedy Gradient Descent [2406.05087] Corpus Poisoning via Approximate Greedy Gradient Descent 基于近似贪婪梯度下降的语料库投毒 面向检索器的攻击 AGGD 通过从所有符元位置中选择排名最高的符元,而不是从单个随机采样…...
C++—9、如何在Microsoft Visual Studio中调试C++
本文通过实例操作来介绍 Visual Studio 调试器的功能。调试器在运行过程中可提供许多方法让你查看代码的情况。 你可以逐步浏览代码、查看变量中存储的值、设置对变量的监视以查看值何时改变、检查代码的执行路径、查看代码分支是否正在运行等等。本实例主要是设置断点及查看内…...
《深度剖析:开源与闭源模型,AI舞台上的不同角色》
在人工智能蓬勃发展的当下,模型的选择如同为一场战役挑选合适的武器,至关重要。开源模型与闭源模型作为AI领域的两大阵营,在性能和应用场景上展现出显著差异,深刻影响着开发者、企业以及整个行业的走向。 性能差异:实…...
开源 vGPU 方案 HAMi 解析
开源 vGPU 方案 HAMi 一、k8s 环境下 GPU 资源管理的现状与问题 (一)资源感知与绑定 在 k8s 中,资源与节点紧密绑定。对于 GPU 资源,我们依赖 NVIDIA 提供的 device-plugin 来进行感知,并将其上报到 kube-apiserver…...
Unity 大地图功能 离线瓦片地图
不使用第二个摄像机实现类似开放世界的大地图功能。 功能如下: 按下M键打开/关闭大地图功能 打开大地图时,默认玩家位置居中 大地图支持拖拽,可调节拖拽速度,支持XY轴翻转 支持大地图设置边缘偏移量 可设置是否启动拖拽边界 …...
【计算机网络】什么是网关(Gateway)?
网上冲浪多了,你可以听到过网关(Gateway)这个词,但是却不太清楚网关(Gateway)到底是干什么的、负责网络当中的什么任务,本篇文字将会为你介绍网关(Gateway)的作用&#x…...
AIOps 平台
AIOps(Artificial Intelligence for IT Operations)平台是一种结合人工智能(AI)技术和IT运营管理的解决方案,旨在通过自动化、智能化的手段优化企业IT系统的运行与管理。以下是AIOps平台的核心功能、优势以及常见的技术…...
使用 SQL 和表格数据进行问答和 RAG(1)—数据库准备
一. 从 .sql/csv/xlsx 文件创建 sqlite 数据库。 要从.sql文件准备 SQL DB,这里会将创建数据库的代码放到了,将文件复制到data/sql目录中,然后在终端中的项目文件夹中执行: pip install sqlite3现在创建一个名为sqldb的数据库&a…...
TCP与UDP协议
一、主要区别 ① 连接的建立和断开: TCP(Transform Control Protocol)通过三次握手来建立一个可靠的连接。这个过程确保了双方都能发送和接收数据。连接建立后,TCP提供稳定的数据传输服务。当通信结束时,TCP通过四次…...
【MySQL】MVCC详解, 图文并茂简单易懂
欢迎来到啊妮莫的学习小屋 祝读本文的朋友都天天开心呀 目录 MVCC简介快照读与当前读快照读当前读 隔离级别隐藏字段和Undo Log版本链✨MVCC原理--ReadView✨ReadView简介设计思路适用隔离级别重要内容 ReadView规则MVCC整体流程 不同隔离级别下的MVCC读已提交可重复读 总结 M…...
Cisco认证是Cisco公司建立的网络技术证书体系
思科认证体系是由Cisco公司建立的分为3个层次的网络技术证书体系,随着Cisco产品线的扩大和市场份额的不断提升,Cisco产品从当初仅有的 Cisco路由器和Cisco交换机发展到现在的6大方向:路由交换,网络设计,网络安全&#…...
Clojure语言的面向对象编程
Clojure语言的面向对象编程 引言 Clojure是一种现代的Lisp方言,它特别强调函数式编程,Immutable数据结构和强大的并发能力。然而,很多人可能会问:Clojure支持面向对象编程吗?虽然Clojure没有像Java或C那样的传统类和…...
React快速上手到项目实战总篇
React核心价值与前置知识 时刻保持对知识的渴望 家人们 开学!!! 核心价值 组件化(易开发易维护) 数据驱动视图 :定义好数据和ui的显示规则 即UIf(state) 只关注业务数据修改,不在操作DOM 增加开发效率 使用vite创建Recat项目 …...
Dart语言的语法
Dart语言的魅力与应用 引言 随着互联网的发展和移动设备的普及,编程语言层出不穷,各种语言如雨后春笋般被创造出来。其中,Dart语言作为一种现代编程语言,凭借其简洁的语法、强大的功能以及良好的性能,受到了越来越多…...
C++——多态
目录 前言 1. 多态的概念 2. 多态的定义及其实现 2.1 多态的构成条件 2.1.1 实现多态的两个重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 多态场景的⼀个选择题 2.1.5 虚函数重写的⼀些其他问题 2.1.5.1 协变(了解) 2.1.5.2 析构函…...
什么是Transformer模型中的KV缓存:上下文新增那之前计算的KV还可用,在原有基础上对新增的进行计算就行
什么是Transformer模型中的KV缓存? 在Transformer模型中,KV缓存(Key-Value Cache)具有重要作用,以下是关于它的详细介绍: 概念含义 KV缓存主要是用于存储在模型推理过程中已经计算过的键(Key)和值(Value)信息。在Transformer架构里,比如在自注意力机制等计算环节…...
12.C语言中的struct详解:定义、赋值、指针、嵌套与位字段
目录 1.简介2.struct 的复制3.struct 指针4.struct 的嵌套5.位字段6.弹性数组成员 1.简介 本篇原文为:C语言中的struct详解:定义、赋值、指针、嵌套与位字段。 更多C进阶、rust、python、逆向等等教程,可点击此链接查看:酷程网 …...
洛谷 P3000 [USACO10DEC] Cow Calisthenics G
思路 题目要求断若干条边后形成的连通块中,最大的直径最小,很明显的二分。关键就在于如何写 c h e c k check check 函数了。 可以用 d f s dfs dfs 来判断要断哪条边。 一、 d [ u ] d[u] d[u] 定义 设 d [ u ] d[u] d[u] 为从 u u u 出发到子树…...
前端拿到zip中所有文件并下载为新的zip文件
问题原因:后端返回了一个zip格式文件供前端下载,然后下载后,形成了zip套zip的形式,当后端不愿处理时,前端不能坐以待毙 PS:当压缩包文件量过大,前端可能会出问题(脑测,未…...
JVM调优
jvm调优步骤:1发现问题、2。定位问题、3.解决问题 jdk自带的命令行调优工具: 1. jps 查看正在运行的 Java 进程 jps -v 查看进程启动时的JVM参数 options 参数: -q:仅仅显示 LVMID(local virtual machine id&#x…...
【前端】【HTML】入门基础知识
参考视频:【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一、基本结构 二、基本标签 <h1>:一级标题,通常用于页面的主标题,字体较大且醒目。 <h2>:二级标题,用于副标题或主要章节标…...
Ubuntu桌面管理环境: GDM3,KDM,LightDM
介绍 Ubuntu是一个广受欢迎的Linux操作系统,拥有强大而多样化的桌面管理环境。其中三个常用的桌面管理环境是GDM3,KDM和LightDM。本篇博客将介绍这三个桌面管理环境的特点和功能。 GDM3 (GNOME Display Manager) GDM3是默认的桌面管理环境,…...
每天你好20250110(距离春节19天!!!)
亲爱的朋友们,大家早上好! 🌞 今晨乃 2025 年 1 月 10 日,星期五,农历乙巳[蛇]年十一月二十一日。祥蛇逸彩送祥,金乌喷薄耀世,晨晖破雾而来,恰似“赤日初升,其道大光”&…...
iOS 本地新项目上传git仓库,并使用sourceTree管理
此文记录的场景描述: iOS前期开发时,在本地创建项目,直至开发一段时间,初期编码及框架已完善后,才拿到git仓库的地址。此时需要将本地代码上传到git仓库。 上传至git仓库,可以使用终端,键入命令…...
计算机网络之---计算机网络的性能评估
计算机网络的性能评估是指通过各种标准和指标来衡量网络的工作效率和质量,进而对网络进行优化和改进的过程。评估的目标是确保网络能够满足预期的服务质量(QoS)和性能需求。常见的计算机网络性能评估指标包括带宽、延迟、吞吐量、丢包率等。 …...
对话|企业如何构建更完善的容器供应链安全防护体系
对话|企业如何构建更完善的容器供应链安全防护体系 云布道师 随着云计算和 DevOps 的兴起,容器技术和自动化成为软件开发中的必要手段,软件供应链也进入了自动化及 CI/CD 阶段。然而,容器技术和自动化虽然提升了软件的更新速度&…...
【SpringSecurity】二、自定义页面前后端分离
文章目录 1、用户认证流程AuthenticationSuccessHandler AuthenticationFailureHandlerSecurityFilterChain配置用户认证信息 2、会话并发处理2.1、实现处理器接口2.2、SecurityFilterChain配置 1、用户认证流程 AuthenticationSuccessHandler AuthenticationFailureHandler …...
在 Vue 3 集成 e签宝电子合同签署功能
实现 Vue 3 e签宝电子合同签署功能,需要使用 e签宝提供的实际 SDK 或 API。 e签宝通常提供针对不同平台(如 Web、Android、iOS)的 SDK,而 Web 端一般通过 WebView 或直接使用嵌入式 iframe 来加载合同签署页面。 下面举个 &…...
基于华为ENSP的OSPF接口网络类型深入浅出(4)
本篇技术博文摘要 🌟 OSPF的接口在不同网络类型下的工作方式;不同网络类型下的报文通告方式深入浅出hub-spoke架构 引言 📘 在这个快速发展的技术时代,与时俱进是每个IT人的必修课。我是肾透侧视攻城狮,一名什么都会一…...
西电-算法分析-研究生课程复习笔记
24年秋的应该是张老师最后一次用卷面考试,他说以后这节课的期末考试都是在OJ上刷题了张老师上课还挺有意思的,上完之后能学会独立地思考算法设计问题了。整节课都在强调规模压缩这个概念,考试也是考个人对这些的理解,还挺好玩的哈…...
音频数据增强:提升音频信号质量的多种技术
在音频处理和机器学习领域,音频数据增强是一种常用的技术,旨在通过对原始音频信号进行各种变换和处理,生成更多样化的训练数据。这不仅可以提高模型的鲁棒性,还能改善其在真实世界应用中的表现。本文将介绍几种常用的音频数据增强…...
如何在 Ubuntu 22.04 上安装 Caddy Web 服务器教程
简介 Caddy 是一个开源的 Web 服务器,它支持静态和现代 Web 应用程序,使用预定义的配置规则,并为所有链接的域名自动启用 HTTPS。Caddy 使用 GO 语言编写,提供了用户友好的配置指令,使你既可以将其用作 Web 服务器&am…...
python_excel列表单元格字符合并、填充、复制操作
读取指定sheet页,根据规则合并指定列,填充特定字符,删除多余的列,每行复制四次,最后写入新的文件中。 import pandas as pd""" 读取指定sheet页,根据规则合并指定列,填充特定字…...
基于GAN和RL的思想来训练对话生成
Paper https://arxiv.org/pdf/1701.06547.pdf 基于GAN和RL的思想来训练对话生成 Implementation https://github.com/jiweil/Neural-Dialogue-Generation/tree/master/Adversarial...
小米路由器IPv6 功能使用指南
本文不限于多层路由使用IPv6 的情况,提供解决IPv6 无法获取的更硬核的方法,需要有ssh 工具。(无安卓设备,测试环境win、mac、ios) 首先明确一点,就是如果想让你的设备得到GUA 地址,即访问 6.i…...
运放输入偏置电流详解
1 输入阻抗与输入偏置电路关系 在选择运放和仪表运放时,经常听到这样的说法:“需要非常高的输入阻抗”,事实上真实如此吗? 输入阻抗(更确切的说是输入电阻)很少会成为一个重要的问题(输入电容也…...
C++指针类型的基本理论和使用方式-学习记录
一、指针简概 (一)指针定义 指针(pointer)是“指向(point to)”另外一种类型的复合类型。与引用类似,指针也实现了对其他对象的间接访问。然而指针与引用相比又有很多不同点。其一,…...
Elasticsearch:使用 Playground 与你的 PDF 聊天
LLMs作者:来自 Elastic Toms Mura 了解如何将 PDF 文件上传到 Kibana 并使用 Elastic Playground 与它们交互。本博客展示了在 Playground 中与 PDF 聊天的实用示例。 Elasticsearch 8.16 具有一项新功能,可让你将 PDF 文件直接上传到 Kibana 并使用 Pla…...
计算机网络之---物理层设备
什么是物理层设备 物理层设备是指负责数据在物理媒介上传输的硬件设备,它们主要处理数据的转换、信号的传输与接收,而不涉及数据的内容或意义。常见的物理层设备包括网卡、集线器、光纤收发器、调制解调器等。 物理层设备有哪些 1、网卡(N…...
【Duilib】 List控件支持多选和获取选择的多条数据
问题 使用Duilib库写的一个UI页面用到了List控件,功能变动想支持选择多行数据。 分析 1、List控件本身支持使用SetMultiSelect接口设置是否多选: void SetMultiSelect(bool bMultiSel);2、List控件本身支持使用GetNextSelItem接口获取选中的下一个索引…...
2025新春烟花代码(二)HTML5实现孔明灯和烟花效果
效果展示 源代码 <!DOCTYPE html> <html lang"en"> <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js?45f95f1bfde85c7777c3d1157e8c2d34";var …...
如何在 Ubuntu 22.04 上集成 Collabora Online 教程
简介 在本教程中,我们将详细讲解如何在 Ubuntu 22.04 操作系统上安装 Collabora Online。 Collabora Online 是一个基于 LibreOffice 技术的开源办公套件。它提供了许多功能,其中最有用的一个功能是 Collabora 提供了 Word 文档、电子表格、演示文稿等…...
Linux系统启动jar包--Java8
启动命令及参数 1. 启动命令模板 nohup java \ -Xms512m \ -Xmx1024m \ -Xmn256m \ -XX:MetaspaceSize128m \ -XX:MaxMetaspaceSize256m \ -XX:UseG1GC \ -XX:InitiatingHeapOccupancyPercent45 \ -XX:PrintGCDetails \ -XX:PrintGCDateStamps \ -XX:PrintGCApplicationStopp…...
linux-定制化rpm(rpmbuild)
一. 引文: 为实现我们的快速安装,特定服务需求的服务部署需求, 我们选择了通过source编译后定制成rpm,存放至自定义yum仓库,通过yum工具规范化管理及部署服务。目前比较常用的rpm打包方式分别为rpmbuild和fpm(在rpmbui…...
面向对象分析与设计Python版 分析与设计概述
文章目录 一、软件工程概述二、分析与设计概述 一、软件工程概述 高质量软件系统的基本要求 架构性内聚可重用性可维护性可扩展性灵活性 软件开发过程模型:是指根据软件开发项目从开始到结束的一系列步骤和方法,建模为不同的模型。常见的有࿱…...
npm发布流程说明
一、进入要发布的项目根目录,初始化为npm包 npm initname:最重要的字段之一,项目名称(少于214个字节)。没有name和version不能进行安装; version:最重要的字段之一,项目版本。没有n…...
Nginx反向代理请求头有下划线_导致丢失问题处理
后端发来消息说前端已经发了但是后端没收到请求。 发现是下划线的都没收到,搜索之后发现nginx默认request的header中包含’_’时,会自动忽略掉。 解决方法是:在nginx里的nginx.conf配置文件中的http部分中添加如下配置: unders…...
计网C1C2C3答案自用
Chapter 1 Computer Network and the Internet Review Questions Solution R1. What is the difference between a host and end system? List several different types of end system. Is a Web server an end system? There is no difference between a host and an end …...
为什么要分为大端和小端
1.大端序 0x12345678 地址: 0x00 0x01 0x02 0x03 数据: 0x12 0x34 0x56 0x78 高位字节存储在低地址,常用语网络协议,便于人阅读、书写类似。 2.小端序 0x12345678 地址: 0x00 0x01 0x02 0x03 …...