HTML读取JSON文件并传递给变量:前端异步处理完整指南
“HTML读取json文件传递给变量”这个需求听起来简单实际上几乎是每个写前端页面的人都会撞上的一道坎。特别是那些刚离开教程、想自己动手做点什么的朋友手里拿着一个静态页面模板想把数据抽离到JSON文件里统一管理结果一打开浏览器全是红色报错连文件都读不出来。又或者好不容易把数据读进来了却发现在“外面”拿不到那个变量控制台打印出一个undefined一脸懵。这篇文章我把整个事情从头到尾捋一遍怎么读、怎么存、怎么用、踩过的坑有哪些以及最关键的——“读取”和“传参”之间那个异步的坑到底怎么填。适合正在做静态页面、前端Demo、简单的数据展示页以及想搞清楚JS异步时序的读者内容按现有实践来写可以直接照着操作。1. 内容整体设计与思路拆解1.1 这个需求到底在解决什么问题先拆解标题里“HTML读取json文件传递给变量”这半句话。它背后其实是一类非常典型的应用场景把数据和页面结构分离。举个例子你写一个产品展示页产品列表可能有20条每一条有名称、价格、图片、描述。最粗暴的写法是把这20条数据全部写死在HTML标签里改一次数据就要翻半天代码。稍微聪明一点的做法是把这些数据放到一个JSON文件里页面加载的时候去读这个文件然后把读到的数据丢给JavaScript变量再用这个变量去拼接、渲染页面。这套逻辑在工程上属于“数据与视图分离”落到实际操作里就是数据存在JSON视图是HTMLJavaScript充当搬运工。标题里说的“传递给变量”也不是真的把文件内容“传”给变量那么玄乎本质上是把JSON文本解析成JavaScript对象再赋给一个变量供后续使用。这个需求常见的出现场合有几类一类是静态页面和活动页没有后端接口但数据量又不想写死在DOM里一类是前端Demo模仿接口返回的数据结构还有一类是配置文件比如图表类的配置项、页面的文案配置。我见过很多做数据可视化的人把图表的数据单独放在一个JSON文件里用的时候读出来再传给图表的options变量这个思路是完全成立的而且比写死数据要干净得多。1.2 主流实现方案与选型逻辑在有多种方案可以选的情况下先分清它们各自的位置再决定用哪种。方案实现方式适用场景缺点Fetch APIfetch(data.json).then(res res.json())现代浏览器、标准环境老浏览器不支持本地file协议受限制XMLHttpRequestxhr.open(GET, data.json)兼容老环境写法繁琐回调嵌套地狱脚本标签注入script srcdata.js/script配合全局变量完全没有服务器、纯本地打开需要JSON改写成JS赋值语句ES模块导入import data from ./data.json with { type: json }工程化项目、Vite等构建工具需要构建环境支持实际选择的时候我的建议是现在写新东西一律优先Fetch API。理由很简单现代浏览器基本都原生支持语法是Promise风格代码可读性好配合async/await写起来像同步代码一样舒服。XHR是上一代的老兵兼容性确实好但现在很少需要专门为老掉牙的浏览器写新代码了而且那套onreadystatechange状态判断的写法能少碰就少碰。脚本标签注入这个方案很特殊它适合一种极端的场景你的HTML文件是直接在本地双击打开的地址栏是file://开头这时候Fetch和XHR都会因为浏览器的安全策略直接罢工。如果不想起本地服务器就可以把JSON文件改成一个JS文件里面写const data { ... }然后通过script标签引入这样不涉及跨域请求纯本地也能跑。不过它的代价是JSON文件不能再被其他工具直接读取严格说已经不是JSON了属于妥协方案。ES模块导入是工程化项目里的最优解尤其是配合现在的主流打包工具直接import就能把JSON当作模块引入还能利用打包工具的插桩、压缩和缓存处理。但如果只是写一个独立的HTML页面用这个方案反而要操心构建配置属于杀鸡用牛刀。选型逻辑总结一句话考虑“你在什么环境下跑”再考虑“你手头有没有服务器”最后考虑“你的项目需不需要工程化”。没有哪个方案绝对最好只有哪个方案在当前场景下最省事。2. 核心细节解析读取文件与变量赋值的完整链条2.1 Fetch API 的读写路径拆解把Fetch这块讲透因为这是当前最主力、也最容易出问题的方案。先看最基础的一段代码fetch(data.json) .then(function(response) { return response.json(); }) .then(function(data) { console.log(data); }) .catch(function(error) { console.error(加载失败, error); });这段代码里每一行的作用分别是第一行发一个网络请求请求当前目录下的data.json第一个.then拿到的response是一个响应对象里面装的是原始数据流需要调用.json()方法把响应体解析成JavaScript对象这个方法本身也返回一个Promise第二个.then拿到的data就是真正解析好的对象文件里的内容到这里才算“传递给了变量”。有个新手最容易忽略的点.json()不是同步的它返回的还是一个Promise所以必须再链一个.then或者在await后面用。很多人第一次写的时候只写了一个.then拿到的直接是Response对象打印出来一串看不懂的字段然后怀疑是不是JSON格式错了其实只是少了一环解析。用async/await改造之后代码会更直观async function loadData() { try { const response await fetch(data.json); const data await response.json(); return data; } catch (error) { console.error(读取失败, error); return null; } }这里的关键是await它会“暂停”函数执行等返回结果落地再继续。这种写法在逻辑上和同步代码一致阅读顺序就是执行顺序排查问题的时候大脑负担小很多。2.2 “传递给变量”的异步陷阱现在说标题里另一个核心诉求。很多人写完上面的代码想要在函数外面使用data于是写出这样的代码let data {}; function loadData() { fetch(data.json) .then(res res.json()) .then(json { data json; }); } loadData(); console.log(data); // 永远都是 {}这段代码的问题在于fetch是异步的loadData()调用之后程序不会等网络请求回来再执行下一行而是立刻继续往下走执行console.log(data)。这时候网络请求还没回来data还是初始值{}。这不是代码写错了而是JavaScript的运行机制决定的——它不会停下来等网络。解决这个问题的核心思路只有一句话所有对数据的操作都必须放在拿到数据之后执行。所谓“传递给变量”真正准确的表述是“在数据到达后赋值给变量并在同一个时机消费这个变量”。正确写法是把消费数据的逻辑放进回调里或者放在await之后async function init() { const data await loadData(); if (data) { renderPage(data); // 在这里使用变量 } }从工程角度这其实是一个“时序设计”问题。如果你一开始就注意到“数据什么时候到达”和“我什么时候用数据”这两件事必须对齐后面很多报错都是可以避免的。2.3 全局变量与局部变量的正确用法有人会有疑问那我把data定义成全局变量等数据到位之后再用行不行行但要小心。全局变量确实可以在浏览器开发者工具的Console里手动访问调试方便但它会让数据在初始化为空对象、还没填充真实值的那段时间暴露在外部如果有其他函数在错误的时机读取了它拿到的是空对象容易引发一连串异常。我的建议是数据尽量放到模块作用域或者函数作用域中管理只在必要的时候暴露。比如可以这样组织let allData null; async function fetchData() { const res await fetch(data.json); allData await res.json(); } async function init() { await fetchData(); // 到这里 allData 一定有值 renderList(allData.list); }allData放在顶层但是所有读它的动作都在init()里完成保证执行顺序正确。如果页面还有后续用户交互需要用到这份数据比如点击按钮后过滤数据只要点击发生在allData赋值之后全局读取就没问题。这符合实际页面中“先加载后交互”的常规逻辑。3. 实操过程与核心环节实现3.1 完整可运行的入门示例从头搭建一个最小可运行项目。目录结构如下project/ ├── index.html ├── data.json └── app.jsdata.json的内容{ title: 商品列表, items: [ { name: 机械键盘, price: 399, stock: 15 }, { name: 无线鼠标, price: 129, stock: 42 }, { name: 显示器支架, price: 259, stock: 8 } ] }index.html的骨架!DOCTYPE html html langzh-CN head meta charsetUTF-8 title读取JSON示例/title /head body h1 idtitle加载中.../h1 ul idlist/ul script srcapp.js/script /body /htmlapp.js里做整个读取和渲染async function loadData() { const response await fetch(data.json); if (!response.ok) { throw new Error(HTTP 错误${response.status}); } return response.json(); } function renderPage(data) { const titleEl document.getElementById(title); const listEl document.getElementById(list); titleEl.textContent data.title; data.items.forEach(function(item) { const li document.createElement(li); li.textContent ${item.name} - ¥${item.price} - 库存${item.stock}; listEl.appendChild(li); }); } async function init() { try { const data await loadData(); renderPage(data); } catch (error) { document.getElementById(title).textContent 数据加载失败; console.error(error); } } init();运行这个例子需要注意一个前提环境必须是HTTP服务不能是file://协议直接打开。具体原因和处理方法在下一节详细展开。你可以先在项目目录下启动一个本地服务器比如用Python的话在终端执行python -m http.server 8080然后浏览器访问http://localhost:8080就可以看到数据正常渲染。3.2 把数据渲染进页面的两种方式对比上面例子用的是document.createElement逐个创建列表项这是一种安全、可控的做法。另一种更省事的方案是用innerHTML拼接字符串直接渲染代码量少很多listEl.innerHTML data.items.map(function(item) { return li${item.name} - ¥${item.price} - 库存${item.stock}/li; }).join();两者本质区别在于操作方式createElement是DOM API的标准操作逻辑清晰、性能好尤其在大量节点时而且因为元素节点由代码创建不受字符串解析规则影响安全性更高。innerHTML是把HTML字符串丢给浏览器解析如果拼接的字符串里混入了用户输入内容比如商品名称里有特殊字符甚至一段script标签就可能被浏览器当作HTML执行形成XSS漏洞。个人建议是初学阶段、做小Demo用什么都可以一旦数据可能包含外部输入或者要做正式一点的项目一定要用createElement或者textContent来写入文本避免直接用innerHTML拼接不可信内容。如果非要省事可以做一个简单的转义函数把、、这些危险字符替换成HTML实体也能规避大部分问题。3.3 异常处理、加载状态与超时控制实战中不能只管顺利路径读文件失败、数据格式错误、网络异常都是常态。至少要考虑下面这几种情况。第一是HTTP状态检查。fetch不会主动断掉非200状态比如404的时候响应对象依然会到达.then只是response.ok为false。如果不检查后面去解析JSON只会得到一堆不友善的报错。if (!response.ok) { throw new Error(加载失败${response.status} ${response.statusText}); }第二是JSON解析异常。response.json()在数据格式不合法时会抛错一般会被catch捕获。这种情况下建议日志要打原始文本方便排查const text await response.text(); try { return JSON.parse(text); } catch (error) { console.error(JSON解析出错原始内容, text); throw error; }用text()拿到字符串再手动JSON.parse比直接response.json()多留了一手原始数据排查问题的时候特别管用。第三是加载状态和超时。页面初识加载期间至少要有一个“加载中”的视觉反馈避免用户看到一块空白。超时控制方面fetch本身没有原生超时机制需要配合AbortController实现async function loadDataWithTimeout(url, timeout 8000) { const controller new AbortController(); const timer setTimeout(() controller.abort(), timeout); try { const response await fetch(url, { signal: controller.signal }); if (!response.ok) { throw new Error(HTTP ${response.status}); } return await response.json(); } catch (error) { if (error.name AbortError) { throw new Error(请求超时请刷新重试); } throw error; } finally { clearTimeout(timer); } }这段代码在超过8秒后主动中断请求并给出明确提示比让用户盯着空白页面干等强得多。4. 常见问题与排查技巧实录4.1 本地打开HTML时报错跨域限制这是刚接触这个需求的人最常撞的墙。报错信息大致是Access to fetch at file:///.../data.json from origin null has been blocked by CORS policy这里的CORS策略是浏览器为了防止网页读取本地文件而设计的安全机制。当HTML文件是以file://协议直接打开的浏览器会认为页面的来源是null而fetch请求一个本地JSON文件也属于跨域行为默认是被禁止的。解决方案有三个梯队。第一是起一个本地HTTP服务器把项目目录作为根目录用HTTP协议访问页面这也是最推荐的方式。常用的有Python自带模块python -m http.serverNode环境可以用npx serve或者直接用编辑器插件比如常见的Live Server插件。第二是把JSON改造成JS文件用script srcdata.js/script引入挂到全局变量上这种方式完全绕开网络请求适合极度简单的页面。第三是修改浏览器安全策略比如在启动命令里加参数关闭安全机制这种方式只建议在调试时临时用而且改动浏览器行为有风险日常工作不推荐。从长远来说日常开发中养成“起服务、看页面”的习惯不只为了解决JSON读取还能让后续的模块加载、字体加载、接口联调都顺畅是一本万利的投入。4.2 数据拿到手了控制台却打印undefined这类问题的典型场景是网络面板里能看到JSON文件加载成功但是页面里的变量始终是undefined或者初始值。根子基本都出在异步时序上。拿一个具体例子来说let data null; fetch(data.json) .then(r r.json()) .then(json { data json; }); console.log(data); // nullconsole.log执行的时候fetch的响应还没回来data还是null。解决方式前面已经说过任何读取data的代码都要放到数据到达之后的回调、或await后面去执行。还有另一种情况也会导致变量拿不到值作用域搞错了。比如在某个函数内部定义了let data然后想在函数外面读取这当然读不到因为let是块级作用域。检查一下你的变量声明位置是不是在读取位置的外层这是一个容易被忽视但极其常见的问题。4.3 JSON文件没报错但解析出来的字段全是undefinedJSON能加载、不报语法错误但访问属性的时候拿到undefined这通常意味着数据结构和你预期的不一样。比如你以为data.items是一个数组实际文件里可能是{ data: { items: [] } }这种嵌套结构或者items写成了item。排查方法是把解析结果完整打印出来看一眼结构const data await response.json(); console.log(JSON.stringify(data, null, 2));用JSON.stringify带上缩进打印结构一目了然再对照代码里的属性名一般马上能发现是字段名对不上还是层级多了一层。这个坑的隐蔽性在于它不报错只是默默返回undefined非常容易让人怀疑是变量传递的问题结果其实只是写错了一个字段路径。4.4 数据修改了但页面加载的总是旧内容浏览器对静态资源有缓存机制JSON文件被加载过一次之后如果文件名不变、服务器也没返回新的缓存头浏览器可能直接拿缓存里的旧数据导致你改了JSON之后页面毫无变化。解决方式分两层。临时调试层面可以在浏览器开发者工具里勾选“禁用缓存”或者在Network面板里强制刷新。规范一点的方案是在请求URL后追加版本参数const url data.json?v${Date.now()};这样每次加载都会带一个不同的时间戳等于告诉浏览器“这是一份新资源”绕开缓存。如果做的是正式一点的项目可以考虑在文件名里带版本号比如>function getParam(paramName) { const params new URLSearchParams(window.location.search); return params.get(paramName); } async function init() { const channel getParam(channel) || default; const url data-${channel}.json?v${Date.now()}; const data await fetch(url).then(r r.json()); renderPage(data); }这里用URLSearchParams读取查询参数拼出对应的JSON文件名。如果渠道名非法还要做个白名单校验比如只允许a、b、c三个值否则直接兜底到默认文件避免用户通过URL注入奇怪的路径。5.2 多份JSON合并把配置和数据分开管理项目稍微复杂一点就会发现所有东西塞进一个JSON文件会变得很臃肿。更好的组织方式是拆成多个文件一份存页面配置一份存业务数据一份存文案。加载的时候并行请求全部就绪后再合并。async function loadAll() { const [settings, businessData, copyContent] await Promise.all([ fetch(config/settings.json).then(r r.json()), fetch(data/business.json).then(r r.json()), fetch(lang/zh-CN.json).then(r r.json()), ]); const finalData { settings, businessData, copyContent, }; renderPage(finalData); }Promise.all是并行加载多个请求的关键它接收一个Promise数组等所有请求都完成之后统一返回结果比串行请求一个接一个快得多。任何一行代码都挂掉的话Promise.all会直接走catch分支整体失败这也是一个合理的设计——页面要么完整展示要么提示加载失败不做半成品状态。5.3 安全性补充不要盲目加载不可信的JSON前面在渲染部分提到过XSS这里再深入提醒一点。通过fetch加载的JSON数据如果你直接拼进innerHTML一旦文件内容被篡改可能会注入恶意脚本。除了渲染时使用textContent还要注意两点一是不加载来源不可信的JSON文件如果文件存放在CDN或第三方服务器务必确认内容可信比如服务端返回时校验签名或哈希二是对从文件里读出来的用户生成内容做过滤比如提前剔除script标签、onerror属性等危险模式。JSON文件本身虽然是静态的但它最终会进入页面的上下文执行一旦中间环节被人动手脚后果就是页面层面的安全风险。在做这类数据加载需求的时候多留一个心眼养成“不信任输入”的习惯是进阶开发者应具备的意识。6. 写在实操边上的一些经验做这个需求前前后后也帮不少人看过代码发现最容易出问题的永远不是“读文件”本身而是“读完怎么处理”以及“处理的时机对不对”。我个人的习惯是先确认运行环境是HTTP还是file协议再决定方案省得后面被CORS折腾然后写代码时永远把加载函数单独拆出来不要跟渲染逻辑混在一起这样出问题能快速定位最后一点是数据到了之后先打印一次结构确认字段名和层级没问题再往下写渲染逻辑。还有一个小技巧分享调试的时候直接在浏览器开发者工具里执行await fetch(data.json).then(r r.json())几条交互式的命令就能当场确认数据能不能读、读出来长什么样比反复刷新页面、打日志要省事得多。这个习惯帮我节省了大量排查时间。如果你打算长期做前端方向的开发这个需求虽然小但是背后涉及的“异步时序”、“跨域策略”、“数据与视图分离”这些概念是后续所有复杂项目的地基。把地基打稳后面盖楼就会顺手很多。

相关新闻

消息机器人地图能力模块设计:从意图解析到多服务商适配的工程实践

消息机器人地图能力模块设计:从意图解析到多服务商适配的工程实践

聊个地图相关的机器人模块。lingbot-map 是我们内部机器人框架里专门负责地图能力的一个子模块。乍一看挺简单:接个地图API、解析几个指令、把坐标和路线发出去,完事。但真正落地之后我发现,这里面的弯弯绕绕比想象中多得多——从坐标系偏移到…

2026/10/14 8:00:46 阅读更多 →
创新管理论文写作,AI 工具怎么选?从选题到答辩的一份实用清单 [特殊字符]

创新管理论文写作,AI 工具怎么选?从选题到答辩的一份实用清单 [特殊字符]

如果你是管理学 / 管理科学与工程类 / 创新管理专业的学生,大概率会遇到这样一种毕业论文或课程研究任务: 以“数字化转型如何影响制造企业开放式创新与创新绩效”为题,结合文献梳理、理论模型、问卷调研或案例分析,完成一篇结构完…

2026/10/14 8:00:46 阅读更多 →
RDA冗余分析:用MATLAB手撕环境驱动的约束主成分降维

RDA冗余分析:用MATLAB手撕环境驱动的约束主成分降维

简介:本资源是一套面向MATLAB初学者与工科数据分析学习者的多元统计分析实践工具包,聚焦冗余分析、降维处理与多元分析三大核心任务,特别适用于热工监测、设备状态评估等工业数据建模场景。压缩包共31个文件,含22个.tif图像文件&a…

2026/10/14 8:00:46 阅读更多 →

最新新闻

[玩转大模型] 第十一篇:售卖自己的 Skill——买断、订阅、定制、开源+付费增强,四条路到底哪条能收到钱

[玩转大模型] 第十一篇:售卖自己的 Skill——买断、订阅、定制、开源+付费增强,四条路到底哪条能收到钱

💡 上一篇我把自己的 Skill 仓库摊开做体检,结论挺难看:十二个 Skill,三个连 name 和目录名都对不上。但那篇文章里还藏着一个我没回答的问题——既然整理到能公开了,那能不能顺便收点钱? 我认真查过这件事…

2026/10/14 8:49:29 阅读更多 →
ROS 2中colcon构建系统的符号链接模式解析

ROS 2中colcon构建系统的符号链接模式解析

1. 理解colcon构建系统的核心机制在ROS 2开发环境中,colcon是最常用的构建工具之一。它负责将源代码编译、安装到工作空间中,并生成必要的环境配置。理解colcon的工作机制对于提高开发效率至关重要。1.1 传统构建模式解析在默认模式下执行colcon build时…

2026/10/14 8:49:29 阅读更多 →
零基础用AI做表情包:画风拆解、动态生成到投稿变现全流程

零基础用AI做表情包:画风拆解、动态生成到投稿变现全流程

看到标题,你可能第一反应是:“做表情包不是设计师和插画师的活吗?” 我一开始也是这么想的,直到我花了两个月,用AI工具完整跑通了一套表情包的画风设定、动态生成、提示词调优到投稿上架的全流程,才发现这条…

2026/10/14 8:49:29 阅读更多 →
PS5调试接口真相:JTAG未禁用不等于安全沦陷

PS5调试接口真相:JTAG未禁用不等于安全沦陷

1. 标题里的“沦陷”到底指什么:一场被误读的硬件安全讨论 “PS5全线沦陷:从PS5 Pro到初版厚机,这扇门关不上了?”——这个标题在社交平台刷屏时,我正调试一台刚拆封的初版PS5主机。第一反应不是震惊,而是皱…

2026/10/14 8:49:29 阅读更多 →
Kafka-eagle:面向生产级 Kafka 运维的智能监控与归因平台

Kafka-eagle:面向生产级 Kafka 运维的智能监控与归因平台

1. 项目概述:为什么 Kafka 运维不能只靠“看日志”和“猜问题”Kafka 监控及运维,这六个字背后不是一套工具的安装流程,而是一整套面向高吞吐、低延迟、多副本分布式消息系统的生存法则。我接触过太多团队——刚上线 Kafka 集群时信心满满&am…

2026/10/14 8:49:28 阅读更多 →
Vue大屏实例集合:从Vue2/Vue3工程搭建到ECharts可视化落地

Vue大屏实例集合:从Vue2/Vue3工程搭建到ECharts可视化落地

简介:这是一套 Vue 大屏可视化项目实例集合,同时覆盖 Vue2 与 Vue3 工程形态,面向需要完成课程设计、毕业设计、大作业、工程实训,或希望快速搭建数据可视化大屏的开发者。压缩包内共 187 个文件,整体约 31MB&#xff…

2026/10/14 8:48:28 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →