当前位置: 首页 > news >正文

案例:自动化获取Web页面小说(没钱修什么仙)——selenium

目录

  • 前言
  • 一、目标即结果
    • 1. 目标:
    • 2. 提前了解网页信息
    • 3. 结果
  • 二、逐步分析
    • 1 . selenium启动
    • 2. 获取所有章节
    • 3.打开对应章节链接,获取小说文本
    • 4. 内容写入本地文件
  • 三、完整代码
  • 四、声名

前言

提示:通过案例掌握selenium语法
涉及技术:Python + Selenium

一、目标即结果

1. 目标:

获取某网页整本小说内容。

2. 提前了解网页信息

  • 小说目录:地址

  • 目录 CSS标签特征:#list.dir >ul>li *
    在这里插入图片描述

  • 章节的地址特征:主站名称 + href值

  • 章节CSS选择器:.con > p
    在这里插入图片描述

  • 章节内容 :.con > p 中所有p标签内容拼接
    在这里插入图片描述

3. 结果

整本小说:章节名+ 文章内容
在这里插入图片描述

二、逐步分析

1 . selenium启动

初学阶段,一般模板都如下:

openchrome = webdriver.Chrome() #启动浏览器#具体时间根据网站情况而定
openchrome.implicitly_wait(2) # 最大等待时间为2s;openchrome.maximize_window() # 启动时显示浏览器最大化
openchrome.get("https://www.XXXX.com/") #目标地址'''
要做的事情
'''
openchrome.quit()# 关闭浏览器

2. 获取所有章节

#之前已经得知目录特征如下:#list.dir >ul>li #那么我们获取整个小说目录
dir =openchrome.find_elements(By.CSS_SELECTOR,'#list.dir >ul>li >a')chapter = [] ## 记录所有章节的地址
chapter_name = [] ## 记录所有章节的名称
for a in dir:#读取每隔章节的名称title = a.text#获取每隔章节的地址,从<a href="/xxxx.html">获取href = a.get_attribute('href')#将章节名读入集合chapter_name 中chapter_name.append(title)#将章节地址读入到集合chapter中chapter.append(href)
#统计一下获取了多少章
print(f"总共获取到{len(chapter)}章")

3.打开对应章节链接,获取小说文本

#从第二部分我们已经知道;章节名称存在集合chapter_name中,章节地址存在chapter中#for循环遍历chapter中的每个urlfor url in chapter:#打开对应的网页openchrome.get(url)#根据CSS选择文本内容,此时已经获取p标签中的文本内容content_elements = openchrome.find_elements(By.CSS_SELECTOR,'.con > p')#读取所有章节内容,写入context中contexts =[] #定义contexts,用于记录章节内容for element in content_elements:#将p标签内容写入到context中,一个p标签就是小说中的一段contexts.append(element.text)

4. 内容写入本地文件

for url in chapter:#打开对应的网页openchrome.get(url)#根据CSS选择文本内容,此时已经获取p标签中的文本内容content_elements = openchrome.find_elements(By.CSS_SELECTOR,'.con > p')#读取所有章节内容,写入context中contexts =[] #定义contexts,用于记录章节内容for element in content_elements:#将p标签内容写入到context中,一个p标签就是小说中的一段contexts.append(element.text)#打开本地写入函数with open(title_text+'.txt', 'a', encoding='utf-8') as f:#先写入章节标题,从chapter_name获取(第2步已经得到)f.write(chapter_name[chapter.index(url)]+"\n")#再写入文档中for element in contexts:f.write(f"{element}\n")

三、完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By# ------------------------------------------------------------
'''分析网站特征
目标:获取整个小说内容: 获取每一章节小说的链接以及文章内容,最后将整本小说拼接到txt文档中
目录地址:https://www.sudugu.com/661/#dir 
目录CSS标签:#list.dir >ul>li *每一章的地址:https://www.sudugu.com + href="/661/1046984.html"
每一章内容:p标签的所有内容拼接
每一章的CSS选择器:.con > p
'''def main():openchrome = webdriver.Chrome()openchrome.implicitly_wait(2) # 最大等待时间为2s;openchrome.maximize_window()openchrome.get("https://www.sudugu.com/661")# 获取所有内容元素(按DOM顺序)title_text = openchrome.titleprint(f"标题{ title_text}")dir = openchrome.find_elements(By.CSS_SELECTOR,'#list.dir >ul>li >a')##遍历每一个li标签,获取 其中a标签的 hrefchapter = []chapter_name = []for a in dir:title = a.texthref = a.get_attribute('href')chapter_name.append(title)# https://www.sudugu.com+href#chapter.append(f"https://www.sudugu.com{href}")chapter.append(href)print(f"总共获取到{len(chapter)}章")print(chapter[:2])# 遍历每一个chapter,获取章节内容,并将chapter_name 与对应内容存到 txt文档中#先测试2章#for url in chapter[:2]:for url in chapter:print("正在爬取:"+url)openchrome.get(url)content_elements = openchrome.find_elements(By.CSS_SELECTOR,'.con > p')contexts =[]for element in content_elements:contexts.append(element.text)#将对应context 与 chapter_name 写入txt文档中with open(title_text+'.txt', 'a', encoding='utf-8') as f:f.write(chapter_name[chapter.index(url)]+"\n")for element in contexts:f.write(f"{element}\n")openchrome.quit()
# ------------------------------------------------------------
if __name__ == '__main__':main()

四、声名

以上内容仅供学习、误用于其他用途;因此产生的纠纷与本人无关

相关文章:

案例:自动化获取Web页面小说(没钱修什么仙)——selenium

目录 前言一、目标即结果1. 目标&#xff1a;2. 提前了解网页信息3. 结果 二、逐步分析1 . selenium启动2. 获取所有章节3.打开对应章节链接&#xff0c;获取小说文本4. 内容写入本地文件 三、完整代码四、声名 前言 提示&#xff1a;通过案例掌握selenium语法 涉及技术&#…...

硬件工程师面试常见问题(11)

第五十一问&#xff1a;器件手册的翻译题目 要学英语啊&#xff0c;孩子。 第五十二问&#xff1a;二极管三极管常识题 1.二极管的导通电压一般是 0.7V 2.MOS管根据掺杂类型可以分为 NMOS和PMOS 3.晶体三极管在工作时,发射结和集电结均处于正向偏置,该晶体管工作在一饱和态。…...

TTL、LRU、LFU英文全称及释义

以下是 TTL、LRU 和 LFU 的英文全称及其简要解释&#xff1a; 1. TTL 全称&#xff1a;Time To Live&#xff08;存活时间&#xff09;含义&#xff1a; 表示数据在缓存或存储中的有效存活时间&#xff0c;过期后自动删除。 Redis 示例&#xff1a;SET key value EX 60&#x…...

本地部署 n8n 中文版

本地部署 n8n 中文版 0. n8n的核心价值1. 本地部署 n8n 中文版2. 访问 n8n 在技术团队寻求高效自动化解决方案的今天&#xff0c;n8n 作为一款安全的工作流自动化平台脱颖而出&#xff01;它将代码的灵活性与低代码的便捷性深度融合&#xff0c;为开发者提供了独特的工具选择。…...

蓝桥杯比赛

蓝桥杯全国软件和信息技术专业人才大赛是由工业和信息化部人才交流中心主办&#xff0c;国信蓝桥教育科技&#xff08;北京&#xff09;股份有限公司承办的计算机类学科竞赛。以下是其相关信息&#xff1a; 参赛对象 具有正式全日制学籍且符合相关科目报名要求的研究生、本科生…...

【Linux】Makefile

Makefile常用用法介绍。 部分图片和经验来源于网络&#xff0c;还有正点原子的Linux驱动开发教程&#xff0c;若有侵权麻烦联系我删除&#xff0c;主要是做笔记的时候忘记写来源了&#xff0c;做完笔记很久才写博客。 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 1…...

【工具】Windows批量文件复制教程:用BAT脚本自动化文件管理

一、引言 在日常开发与部署过程中&#xff0c;文件的自动化复制是一个非常常见的需求。无论是在构建过程、自动部署&#xff0c;还是备份任务中&#xff0c;开发者经常需要将某个目录中的 DLL、配置文件、资源文件批量复制到目标位置。相比使用图形界面的复制粘贴操作&#xf…...

字节一面:后端开发

前言 这是我字节一面的回忆录&#xff0c;可能有些不全。 由于博主是Java面试Go岗&#xff0c;操作系统和计网问的还是比较多。 个人感觉字节很喜欢追问&#xff0c;博主被追问拷打的找不到北了&#xff0c;总结还是学的太浅了。 面试官给我的建议&#xff1a;再更深挖一些…...

西式烹饪实训室建设路径

在餐饮行业持续变革与教育信息化快速发展的当下&#xff0c;西式烹饪实训室的智能化建设成为提升教学质量、培养适应新时代需求烹饪人才的关键举措。通过引入先进技术&#xff0c;创新教学与管理模式&#xff0c;为学生打造更高效、更具沉浸感的学习环境。凯禾瑞华——实训室建…...

[更新完毕]2025五一杯A题五一杯数学建模思路代码文章教学:支路车流量推测问题

完整内容请看文章最下面的推广群 支路车流量推测问题 摘要 本文针对支路车流量推测问题展开研究&#xff0c;通过建立数学模型解决不同场景下的车流量分析需求。 针对问题一&#xff08;Y型道路场景&#xff09;&#xff0c;研究两支路汇入主路的车流量推测。通过建立线性增长…...

2025年五一杯C题详细思路分析

C题 社交媒体平台用户分析问题 问题背景 近年来&#xff0c;社交媒体平台打造了多元化的线上交流空间和文化圈&#xff0c;深刻影响着人们社交互动与信息获取。博主基于专业知识或兴趣爱好等创作出高质量内容&#xff0c;吸引并获得用户的关注。用户可以随时通过观看、点赞、…...

攻防世界 dice_game

dice_game ​​​​​​dice_game (1) motalymotaly-VMware-Virtual-Platform:~/桌面$ file game game: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]254…...

如何进行 JVM 性能调优?

进行 JVM 性能调优是一个系统性的过程&#xff0c;旨在提高 Java 应用程序的响应速度、吞吐量、降低资源消耗&#xff08;如 CPU 和内存&#xff09;以及提高稳定性。 以下是一个通用的 JVM 性能调优步骤和常用方法&#xff1a; 第一步&#xff1a;明确目标与建立基线 (Defin…...

艺华直播 5.0 |专注于提供港澳台及央视频道的电视直播应用,加载快,播放流畅

艺华直播是一款专注于提供港澳台及央视频道的电视直播应用。它以加载速度快、播放流畅不卡顿著称&#xff0c;是目前少数能够稳定观看港澳台频道的应用之一。此次分享的版本为测试版&#xff0c;支持4K秒播&#xff0c;带来极致的观看体验。尽管该应用已开始收费&#xff0c;但…...

【软件设计师:复习】上午题核心知识点总结(三)

一、编译原理(基础题) 1.编译过程概述(必考) 编译过程分为六个阶段,各阶段核心任务与典型输出如下: 阶段核心任务输入输出关键方法/工具词法分析将字符流转换为标记(Token)流源代码字符串Token序列(如<ID, "x">)正则表达式、有限自动机(DFA/NFA)…...

SAE极速部署弹性微服务商城——实验记录

SAE极速部署弹性微服务商城 本实验带您体验在SAE上快速部署一个弹性的在线商城微服务应用&#xff0c;使得终端用户可以通过公网访问该商城&#xff0c;并进行压力测试以验证其性能与稳定性。 文章目录 SAE极速部署弹性微服务商城使用SAE部署应用有哪些优势&#xff1f; 对商城…...

内存 “舞台” 上,进程如何 “翩翩起舞”?(转)

在数字世界里&#xff0c;计算机的每一次高效运转都离不开内存与进程的默契配合。内存&#xff0c;恰似一座宏大且有序的舞台&#xff0c;为进程提供了施展拳脚的空间。而进程&#xff0c;则如同舞台上的舞者&#xff0c;它们在内存的舞台上&#xff0c;遵循着一套复杂而精妙的…...

产品手册小程序开发制作方案

公司产品手册小程序系统主要是为了解决传统纸质或PDF格式手册更新成本高、周期长&#xff0c;难以及时反映最新产品信息。线下分发效率低&#xff0c;线上分享体验差&#xff0c;不利于品牌推广。传统手册单向传递信息&#xff0c;无法与用户进行互动&#xff0c;企业难以了解用…...

【dify—8】Agent实战——占星师

目录 一、创建Agent应用 二、创建提示词 三、创建变量 四、添加工具 五、发布更新 六、运行 第一部分 安装difydocker教程&#xff1a;【difydocker安装教程】-CSDN博客 第二部分 dock重装教程&#xff1a;【dify—2】docker重装-CSDN博客 第三部分 dify拉取镜像&#xff…...

Redis的键过期删除策略与内存淘汰机制详解

Redis 的键过期删除策略与内存淘汰机制详解 一、键过期删除策略 Redis 通过 定期删除&#xff08;Active Expire&#xff09; 和 惰性删除&#xff08;Lazy Expire&#xff09; 两种方式结合&#xff0c;管理键的过期清理。 1. 惰性删除&#xff08;Lazy Expire&#xff09; …...

数据结构——树(中篇)

今日名言&#xff1a; 人生碌碌&#xff0c;竞短论长&#xff0c;却不道枯荣有数&#xff0c;得失难量 上次我们讲了树的相关知识&#xff0c;接下来就进一步了解二叉树吧。本文为个人学习笔记&#xff0c;如有侵权&#xff0c;请 联系删除&#xff0c;如有错误&#xff0c;欢…...

实验三 软件黑盒测试

实验三 软件黑盒测试使用测试界的一个古老例子---三角形问题来进行等价类划分。输入三个整数a、b和c分别作为三角形的三条边&#xff0c;通过程序判断由这三条边构成的三角形类型是等边三角形、等腰三角形、一般三角形或非三角形(不能构成一个三角形)。其中要求输入变量&#x…...

PHP-Cookie

Cookie 是什么&#xff1f; cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时&#xff0c;这台计算机将会发送 cookie。通过 PHP&#xff0c;您能够创建并取回 cookie 的值。 设置Cookie 在PHP中&#xff0c;你可…...

提升采购管理,打造核心竞争力七步战略采购法详解P94(94页PPT)(文末有下载方式)

资料解读&#xff1a;《提升采购管理&#xff0c;打造核心竞争力 —— 七步战略采购法详解》 详细资料请看本解读文章的最后内容。 在当今竞争激烈的商业环境中&#xff0c;采购管理已成为企业打造核心竞争力的关键环节。这份文件围绕七步战略采购法展开&#xff0c;深入剖析了…...

单片机-89C51部分:13、看门狗

飞书文档https://x509p6c8to.feishu.cn/wiki/LefkwDPU7iUUWBkfKE9cGLvonSh 一、作用 程序发生死循环的时候&#xff08;跑飞&#xff09;&#xff0c;能够自动复位。 启动看门狗计数器->计数器计数->指定时间内不对计数器赋值&#xff08;主程序跑飞&#xff0c;无法喂…...

基于MyBatis的银行转账系统开发实战:从环境搭建到动态代理实现

目标&#xff1a; 掌握mybatis在web应用中怎么用 mybatis三大对象的作用域和生命周期 ThreadLocal原理及使用 巩固MVC架构模式 为学习MyBatis的接口代理机制做准备 实现功能&#xff1a; 银行账户转账 使用技术&#xff1a; HTML Servlet MyBatis WEB应用的名称&am…...

纹理采样+光照纹理采样

普通纹理显示 导入纹理 1.将纹理拷贝到项目中 2.配置纹理 纹理显示原理 原始纹理&#xff08;边长是&#xff09;&#xff0c;如果原始图的边长不是&#xff0c;游戏引擎在运行时&#xff0c;会自动将 纹理的边长补偿为&#xff0c;所以补偿是有损耗的&#xff08;纹理不一定是…...

408真题笔记

2024 年全国硕士研究生招生考试 计算机科学与技术学科联考 计算机学科专业基础综合 &#xff08;科目代码&#xff1a;408&#xff09; 一、单项选择题 第 01&#xff5e;40 小题&#xff0c;每小题 2 分&#xff0c;共 80 分。下列每小题给出的四个选项中&#xff0c;只有一个…...

【Shell 脚本编程】详细指南:第一章 - 基础入门与最佳实践

Shell 脚本编程完全指南&#xff1a;第一章 - 基础入门与最佳实践 引言&#xff1a;Shell 脚本在现代开发中的重要性 Shell 脚本作为 Linux/Unix 系统的核心自动化工具&#xff0c;在 DevOps、系统管理、数据处理等领域扮演着关键角色。本章将系统性地介绍 Shell 脚本的基础知…...

PostgreSQL数据库操作SQL

数据库操作SQL 创建 创建数据库 create database db_test;创建并指定相关参数 with owner : 所有者encoding : 编码connection limit &#xff1a;连接限制 create database db_test1 with owner postgresencoding utf-8connection limit 100;修改 修改数据库名称 renam…...

RAG工程-基于LangChain 实现 Advanced RAG(预检索-查询优化)(下)

Multi-Query 多路召回 多路召回流程图 多路召回策略利用大语言模型&#xff08;LLM&#xff09;对原始查询进行拓展&#xff0c;生成多个与原始查询相关的问题&#xff0c;再将原始查询和生成的所有相关问题一同发送给检索系统进行检索。它适用于用户查询比较宽泛、模糊或者需要…...

VBA数据库解决方案第二十讲:Select From Where条件表达式

《VBA数据库解决方案》教程&#xff08;版权10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…...

Linux架构篇、第1章_02源码编译安装Apache HTTP Server 最新稳定版本是 2.4.62

Linux_基础篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;源码编译安装Apache HTTP Server 最新稳定版本是 2.4.62 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.01 适用环境: Centos7 文档说明 本文…...

【Machine Learning Q and AI 读书笔记】- 03 小样本学习

Machine Learning Q and AI 中文译名 大模型技术30讲&#xff0c;主要总结了大模型相关的技术要点&#xff0c;结合学术和工程化&#xff0c;对LLM从业者来说&#xff0c;是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第3篇&#xff0c;对应原…...

Webug4.0靶场通关笔记08- 第11关万能密码登录(SQL注入漏洞)

目录 第13关 万能密码登录 1.打开靶场 2.源码分析 3.渗透方法1 4.渗透方法2 第13关 万能密码登录 本文通过《webug靶场第13关 万能密码登录》来进行渗透实战。 万能密码是利用 SQL 注入漏洞&#xff0c;构造出能够绕过登录验证的特殊密码字符串。通常&#xff0c;登录验…...

terraform中statefile文件的实现原理及作用

Terraform 的 State 文件&#xff08;terraform.tfstate&#xff09;是其基础设施即代码&#xff08;IaC&#xff09;机制的核心组件&#xff0c;用于记录和管理云资源的实际状态。以下是其实现原理及核心作用的详细分析&#xff1a; 一、State 文件的实现原理 1. 数据结构与…...

7.0/Q1,GBD数据库最新文章解读

文章题目&#xff1a;Cardiovascular disease s mortality in Brazilian municipalities: estimates from the Global Burden of Disease study, 2000-2018 DOI&#xff1a;10.1016/j.lana.2025.101106 中文标题&#xff1a;巴西城市的心血管疾病死亡率&#xff1a;来自2000-20…...

linux 使用nginx部署next.js项目,并使用pm2守护进程

前言 本文基于&#xff1a;操作系统 CentOS Stream 8 使用工具&#xff1a;Xshell8、Xftp8 服务器基础环境&#xff1a; node - 请查看 linux安装node并全局可用pm2 - 请查看 linux安装pm2并全局可用nginx - 请查看 linux 使用nginx部署vue、react项目 所需服务器基础环境&…...

0基础 | Proteus电路仿真 | 电机使用

目录 电机类型 51单片机对直流电机的控制 基于89C51主控的直流电机控制电路仿真 代码《基于Keil C51》 51单片机对步进电机的控制 控制代码《基于Keil C51》 基于89C51主控的步进电机控制电路仿真 电机类型 直流电机 步进电机 51单片机对直流电机的控制 直流电机&#…...

人工智能100问☞第14问:人工智能的三大流派(符号主义、联结主义、行为主义)有何区别?

目录 一、通俗解释 二、专业解析 三、权威参考 一、通俗解释 人工智能的三大流派,就像三位不同性格的工程师用各自的方法造机器人: ​​1、符号主义(逻辑派)​​ ​​核心​​:用“教科书式规则”教机器思考。比如教计算机下棋,先写一本《国际象棋必胜法则》,机器…...

油气人工地震资料信号处理中,机器学习和AI应用

在油气人工地震资料信号处理中&#xff0c;机器学习和AI可以应用于多个环节&#xff0c;显著提升数据质量、解释效率和勘探准确性。以下是主要应用场景及对应的开源工具推荐&#xff1a; 1. 数据预处理 应用场景&#xff1a; 噪声压制&#xff08;如随机噪声、多次波、面波&am…...

Python数据分析课程实验-1

1.1数据分析简介 当今世界对信息技术的依赖程度日渐加深,每天都会产生和存储海量的数据。数据的来源多种多样一自 动检测系统、传感器和科学仪器等。不知你有没有意识到&#xff0c;你每次从银行取钱、买东西、写博客、发微博也会产生新的数据。 什么是数据呢?数据实际上不同于…...

算法--模拟题目

算法–模拟问题 1576. 替换所有的问号 思路:遍历字符串,找到?, 然后遍历字符a 到 z 找到不等于前后字符,替换即可 class Solution { public:string modifyString(string s) {for(int i 0; i < s.size(); i){if(s[i] ?){//替换for(char a a; a < z; a){//当字符不等…...

PDF24 Tools:涵盖20+种PDF工具,简单高效PDF工具箱,支持一键编辑/转换/合并

一、软件介绍 PDF 24 Tools是一款由德国公司开发的PDF编辑工具&#xff0c;拥有18年的历史&#xff0c;并且一直免费使用&#xff0c;这在同类软件中非常难得。 早在许久之前&#xff0c;我就推荐过这款工具的免费网页版&#xff0c;但由于网页使用起来可能不太方便且速度较慢…...

12.多边形的三角剖分 (Triangulation) : Fisk‘s proof

目录 1.Fisks proof Trangulation Coloring Domination Pigeon-Hold Principle Generation 2.Orthogonal Polygons (正交多边形) Necessity of floor(n4) Sufficiency by convex Quadrilateralization Generalization 1.Fisks proof Trangulation 引入内对角线&…...

数据库基本概念:数据库的定义、特点、分类、组成、作用

一&#xff1a;数据库相关概念 1.1 定义 &#xff08;1&#xff09;数据库&#xff1a;存储数据的仓库 &#xff08;2&#xff09;数据库管理系统&#xff1a;模拟和管理数据库的大型软件 &#xff08;3&#xff09;SQL&#xff1a;操作关系型数据库的编程语言&#xff0c;定义…...

PostgreSQL 数据库下载和安装

官网&#xff1a; PostgreSQL: Downloads 推荐下载网站&#xff1a;EDB downloads postgresql 我选了 postgresql-15.12-1-windows-x64.exe 鼠标双击&#xff0c;开始安装&#xff1a; 安装路径&#xff1a; Installation Directory: D:\Program Files\PostgreSQL\15 Serv…...

【c++】【STL】queue详解

目录 queue的作用什么是容器适配器queue的接口构造函数emptysizefrontback queue类的实现 queue的作用 queue是stl库提供的一种容器适配器&#xff0c;也就是我们数据结构中学到的队列&#xff0c;是非常常用的数据结构&#xff0c;特点是遵循LILO&#xff08;last in last ou…...

循环插入数据库行

文章目录 循环插入数据库行 循环插入数据库行 -- 声明变量 DECLARE i INT 201;-- 开始循环 WHILE i < 200 BEGIN-- 插入数据INSERT INTO T_AGVPOS (POS) VALUES (i);SET i i 1; END;...

QMK机械键盘固件开发指南:从源码到实践

QMK机械键盘固件开发指南&#xff1a;从源码到实践 前言 QMK&#xff08;Quantum Mechanical Keyboard&#xff09;是一款开源的键盘固件&#xff0c;支持众多自定义键盘的功能配置。通过QMK&#xff0c;您可以完全掌控键盘的每一个按键&#xff0c;实现复杂的宏指令、多层按…...