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

Selenium Cookie复用登录态实战指南

1. 这不是“绕过”而是“复用登录态”——先厘清一个关键认知误区很多人看到“Selenium通过cookie绕过验证码”这个标题第一反应是又一个黑灰产技巧能省事就上但我在电商、金融、SaaS类项目里带团队做自动化测试近八年亲手写过200个Web端UI回归脚本踩过无数坑之后最想说的一句话是你根本不是在“绕过”验证码而是在规避“重复触发登录流程”带来的不可控干扰。验证码本身是安全机制它的存在合理且必要真正需要被优化的是测试过程中因反复走完整登录链路输入账号→输密码→点发送→等图片加载→人工识别/OCR调用→填验证码→提交→等待跳转所引入的三大硬伤稳定性差图片加载失败、接口超时、耗时长单次登录平均8~15秒、可维护性低验证码逻辑一变整套登录脚本全挂。关键词“Selenium自动化测试”“cookie”“验证码”背后的真实诉求其实是如何让UI自动化脚本像真实用户一样在已登录状态下稳定、高效地执行后续业务操作同时完全避开登录环节中那个最不稳定的验证码节点。这不是钻系统空子而是对测试生命周期的合理分层——把“登录态获取”作为前置准备动作把“业务逻辑验证”作为核心执行动作。我经手的3个银行理财后台项目、5个跨境电商ERP系统全部采用这种模式由专人每天凌晨用真实账号手动登录一次导出有效cookie注入到CI流水线的Selenium容器中整个回归测试集执行时间从原来的47分钟压缩到11分钟失败率从18%降到0.7%。这不是取巧是工程化落地的必然选择。如果你还在为“每次跑脚本都要手动填验证码”而烦躁或者正被“验证码图片加载超时导致整个测试套件中断”折磨那接下来的内容就是你真正需要的实操路径。2. 为什么cookie能“接管”登录态——从HTTP协议底层看会话延续机制要让cookie在Selenium中真正起作用必须理解它到底在替你做什么。很多人以为“把浏览器里复制的cookie字符串塞进driver里就完事了”结果发现页面还是跳登录页——问题就出在对cookie本质的误读上。Cookie不是万能钥匙它是一张有严格时效、作用域和校验规则的“临时通行证”。我们来拆解它在HTTP会话中的真实角色。2.1 Cookie的本质服务端签发的“状态委托书”当你在浏览器中完成一次成功登录服务端比如Spring Boot后端或Node.js API会做两件事在服务端内存或Redis中创建一个Session对象生成唯一ID如session:abc123并存储用户身份信息UID、权限列表、登录时间等通过HTTP响应头Set-Cookie向浏览器下发一个或多个Cookie字段典型格式为Set-Cookie: JSESSIONIDabc123; Path/; HttpOnly; Secure; Max-Age1800 Set-Cookie: tokeneyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...; Domain.example.com; Path/; ExpiresWed, 01 Jan 2025 00:00:00 GMT; HttpOnly; Secure注意这里的关键参数JSESSIONID是Java Web容器Tomcat默认的会话标识符对应服务端的Session对象token是JWT或自定义加密串服务端可直接解析验证无需查Session存储Domain.example.com表示该Cookie仅对example.com及其子域名如admin.example.com、api.example.com生效Path/表示请求URL路径以/开头时才携带此CookieHttpOnly意味着JavaScript无法读取防XSS窃取但Selenium的add_cookie()方法可以绕过此限制直接注入Secure要求只在HTTPS连接中传输本地调试时若用HTTP需临时关闭此标志生产环境严禁Max-Age1800或Expires定义了Cookie有效期1800秒30分钟超时后服务端会拒绝该凭证。提示Selenium的add_cookie()方法只能添加name、value、domain、path、expiry时间戳秒数这5个字段HttpOnly和Secure属性无法通过API设置但不影响功能——因为Selenium驱动的是真实浏览器内核它注入的Cookie会被当作“浏览器原生Cookie”处理服务端校验时只认name/value/domain/path/expiry组合是否匹配其Session存储。2.2 Selenium中cookie注入的三个致命陷阱我见过太多人卡在这一步明明复制了浏览器里的Cookieadd_cookie()也执行成功但刷新页面还是跳登录页。原因几乎都掉进以下三个坑陷阱一domain字段必须精确匹配且不能带协议或端口错误写法{name: JSESSIONID, value: abc123, domain: https://admin.example.com:8080}正确写法{name: JSESSIONID, value: abc123, domain: .example.com}为什么因为Cookie的Domain匹配规则是“后缀匹配”.example.com能覆盖www.example.com、admin.example.com、api.example.com而admin.example.com只能匹配该子域名无法用于www.example.com。更关键的是domain值绝对不能包含http://、https://、端口号如:8080或路径如/login否则Selenium会静默忽略该Cookie。实测中约65%的注入失败案例源于此。陷阱二path字段必须与目标页面URL路径前缀一致假设你的测试页面是https://admin.example.com/dashboard而你注入的Cookiepath/完全没问题但如果你注入的是path/login那么访问/dashboard时浏览器根本不会带上这个Cookie。很多前端框架如Vue Router的history模式会让所有路由都映射到/此时path/是安全选择但如果是传统多页面应用MPA务必确认目标页面的实际URL路径结构。陷阱三expiry时间戳必须是秒级Unix时间戳且必须晚于当前时间Selenium要求expiry字段是从1970年1月1日00:00:00 UTC到指定时间的秒数不是毫秒也不是字符串日期。常见错误直接用new Date().getTime()返回毫秒→ 导致expiry变成几万亿浏览器认为已过期用Date.now()→ 同样是毫秒用2025-01-01T00:00:00Z→ 字符串不被识别。正确做法Python示例import time cookie_dict { name: JSESSIONID, value: abc123, domain: .example.com, path: /, expiry: int(time.time()) 1800 # 当前时间1800秒30分钟 } driver.add_cookie(cookie_dict)2.3 实测对比三种登录态维持方式的稳定性数据为了验证不同方案在真实CI环境中的表现我在同一套电商后台测试套件共87个用例上连续运行7天统计每种方式的平均单次执行耗时与失败率方式描述平均耗时失败率主要失败原因完整登录流程Selenium模拟输入账号、密码、识别验证码、点击登录12.4分钟23.6%验证码图片加载超时41%、OCR识别错误33%、网络抖动导致表单提交失败26%LocalStorage/SessionStorage注入将登录后JS生成的token存入localStorage再注入8.2分钟15.8%前端加密逻辑更新后token失效52%、storage键名变更未同步31%、跨域iframe中storage不可见17%Cookie注入本文方案手动登录后导出Cookie注入Selenium driver3.7分钟0.9%Cookie过期未及时更新89%、domain配置错误11%数据很说明问题Cookie方案失败率最低且失败原因高度可控基本就是运维层面的过期管理问题。这印证了一个经验越靠近HTTP协议底层的状态管理越稳定越依赖前端JavaScript运行时的状态越脆弱。3. 从手动登录到自动化注入一套可落地的四步工作流光懂原理不够得有能立刻上手的步骤。我给团队制定的标准流程是“四步法”已在12个项目中验证平均首次配置成功率92%且支持快速故障定位。下面以Python Selenium为例全程使用ChromeDriver所有代码均可直接复制运行需替换域名和cookie值。3.1 第一步安全获取有效Cookie——手动登录后精准导出别用浏览器开发者工具Network面板里随便点一个请求的Request Headers去复制Cookie那是错的。正确姿势是用Chrome浏览器打开目标系统登录页如https://admin.example.com/login输入账号密码完成验证码识别成功登录进入首页如https://admin.example.com/dashboard按F12打开DevTools切换到Application选项卡 → 左侧Cookies→ 点击当前域名如admin.example.com重点来了右侧列表会显示所有当前域名下的Cookie。你需要勾选所有Name列包含session、token、JSESSIONID、auth、user等关键词的条目通常3~5个然后右键 →Copy→Copy value不是Copy as cURL。将复制的JSON字符串粘贴到文本编辑器手动整理成标准字典列表。例如你复制到的是[ {name:JSESSIONID,value:abc123def456,domain:.example.com,path:/,expires:1735689600,httpOnly:true,secure:true,sameSite:Lax}, {name:XSRF-TOKEN,value:xyz789,domain:.example.com,path:/,expires:1735689600,httpOnly:false,secure:true,sameSite:Lax} ]→ 删除httpOnly、secure、sameSite字段Selenium不认将expires转换为秒级时间戳上面例子中1735689600已是秒级可直接用最终得到valid_cookies [ { name: JSESSIONID, value: abc123def456, domain: .example.com, path: /, expiry: 1735689600 }, { name: XSRF-TOKEN, value: xyz789, domain: .example.com, path: /, expiry: 1735689600 } ]注意如果目标系统使用JWT token且放在Authorization请求头中而非Cookie则此方案不适用需改用driver.execute_cdp_cmd(Network.setExtraHTTPHeaders, {...})注入请求头。但90%的传统Web系统仍依赖Cookie维持会话。3.2 第二步注入前的环境预检——三道防线确保万无一失在调用add_cookie()之前必须做三项检查缺一不可。这是我写在每个测试脚本开头的固定模板from selenium import webdriver from selenium.webdriver.chrome.options import Options def setup_driver_with_cookies(): options Options() options.add_argument(--no-sandbox) options.add_argument(--disable-dev-shm-usage) # 关键必须先访问目标域名否则add_cookie会失败 driver webdriver.Chrome(optionsoptions) driver.get(https://admin.example.com) # 访问任意同域页面触发domain初始化 # 防线一检查当前URL域名是否与cookie domain匹配 current_domain driver.current_url.split(//)[1].split(/)[0] expected_domain .example.com if not current_domain.endswith(expected_domain.replace(., )): raise RuntimeError(f当前域名{current_domain}与cookie domain {expected_domain}不匹配) # 防线二检查driver是否已加载cookies避免重复注入 existing_cookies driver.get_cookies() if len(existing_cookies) 0: print(f警告driver已存在{len(existing_cookies)}个cookies将先清除) driver.delete_all_cookies() # 防线三验证cookie列表非空且domain字段正确 if not valid_cookies: raise ValueError(cookie列表为空请检查第一步导出是否成功) for cookie in valid_cookies: if domain not in cookie or not cookie[domain].startswith(.): raise ValueError(fcookie domain格式错误{cookie}) # 执行注入 for cookie in valid_cookies: try: driver.add_cookie(cookie) print(f成功注入cookie: {cookie[name]}) except Exception as e: print(f注入cookie {cookie[name]} 失败{e}) raise return driver # 使用 driver setup_driver_with_cookies() driver.get(https://admin.example.com/dashboard) # 此时应直接进入首页不跳登录页为什么必须先driver.get(https://admin.example.com)因为Selenium的add_cookie()方法要求必须在driver已访问过目标域名的页面后才能注入该域名的Cookie。如果你直接add_cookie()再get()会报Unable to set Cookie错误。这是Selenium的设计限制也是新手最高频的报错原因。3.3 第三步注入后的有效性验证——三重断言确保登录态真实可用注入完成不等于成功。必须立即验证登录态是否真正生效我设计了三重断言覆盖前端、后端、业务三个层面def validate_login_state(driver): # 断言一前端页面元素可见最基础 try: welcome_text driver.find_element(css selector, header .welcome-user).text assert 欢迎 in welcome_text or Dashboard in driver.title, 前端欢迎文字未出现 print(✅ 前端登录态验证通过欢迎文字可见) except: print(❌ 前端登录态验证失败未找到欢迎元素) return False # 断言二后端API返回正常关键 # 利用Chrome DevTools Protocol (CDP) 拦截网络请求 driver.execute_cdp_cmd(Network.enable, {}) # 访问一个需登录态的API如用户信息接口 driver.get(https://admin.example.com/api/v1/user/profile) # 获取最后一条响应 logs driver.get_log(performance) api_response None for log in logs: message json.loads(log[message])[message] if message[method] Network.responseReceived: if api/v1/user/profile in message[params][response][url]: api_response message[params][response] break if not api_response or api_response[status] ! 200: print(❌ 后端登录态验证失败API返回非200状态码) return False print(✅ 后端登录态验证通过API返回200) # 断言三业务操作可执行终极验证 try: # 尝试点击一个只有登录用户才能看到的按钮 create_btn driver.find_element(xpath, //button[contains(text(), 新建订单)]) create_btn.click() # 检查弹窗是否出现证明权限正常 modal driver.find_element(css selector, .order-create-modal) assert modal.is_displayed(), 新建订单弹窗未显示 print(✅ 业务登录态验证通过可执行核心操作) except Exception as e: print(f❌ 业务登录态验证失败{e}) return False return True # 调用 if not validate_login_state(driver): raise RuntimeError(登录态验证失败停止执行后续测试)这套验证逻辑的价值在于它把“页面没跳转”这种表面现象拆解成“前端渲染OK”、“后端鉴权OK”、“业务权限OK”三个可量化的指标。我在某保险SaaS项目中就靠第三重断言发现了严重问题Cookie注入后前端显示正常但调用保单查询API时返回403 Forbidden追查发现是后端JWT校验逻辑更新了但前端Cookie里的token未同步刷新——这恰恰暴露了Cookie方案的边界它只解决“会话延续”不解决“凭证过期”。3.4 第四步CI/CD集成与过期管理——让方案真正工程化手动导出Cookie显然不能进CI流水线。我们的标准做法是建立独立的“登录态维护Job”在Jenkins/GitLab CI中每天凌晨2点触发一个专用任务用一台保留登录态的专用机器Docker容器执行一次真实登录将生成的Cookie JSON保存到共享存储如NFS、MinIO或数据库测试Job启动时自动拉取每个Selenium测试Job在before_script中从共享存储下载最新Cookie文件并注入driver过期监控告警在Cookie JSON中增加generated_at时间戳测试脚本启动时检查expiry - generated_at 300剩余有效期少于5分钟若成立则抛出CookieExpiredError并触发告警企业微信/钉钉机器人降级方案当Cookie过期告警触发时自动切换到备用方案——调用内部提供的“免验证码登录API”仅限测试环境该API由后端提供输入测试账号密码后直接返回有效Cookie不经过前端验证码流程。这套机制让整个流程完全无人值守。某客户项目曾连续运行142天未因登录态问题中断测试直到第143天因网络波动导致登录Job失败告警5分钟内被运维响应修复。这才是自动化测试该有的样子人只管规则和异常机器负责执行和反馈。4. 那些没人告诉你的实战细节与避坑指南纸上得来终觉浅绝知此事要躬行。我把过去八年踩过的、文档里找不到的、同事问爆的21个具体问题浓缩成这份“血泪清单”。每一条都来自真实战场建议打印出来贴在显示器边框上。4.1 关于Cookie来源哪些情况绝对不能手动复制单点登录SSO系统如公司统一用Okta、Azure AD登录你从admin.example.com页面复制的Cookie很可能只是应用层的Session ID真正的身份凭证在okta.com或login.microsoftonline.com域名下。此时必须去SSO提供商的控制台用管理员权限生成长期有效的测试Token再注入到目标域名。前后端分离架构中的JWT Header如果前端Vue/React应用把token存在localStorage并通过Authorization: Bearer xxx头发送那么document.cookie里可能根本没东西。此时应放弃Cookie方案改用driver.execute_cdp_cmd(Network.setExtraHTTPHeaders, {headers: {Authorization: Bearer xxx}})。动态域名场景某些SaaS系统为每个租户分配子域名如tenant123.saas.com而Cookie的domain是.saas.com。这时手动复制的Cookie在tenant123.saas.com下有效但在tenant456.saas.com下无效。解决方案是在测试脚本中动态拼接domain字段f.{tenant_id}.saas.com。4.2 关于Selenium版本与浏览器兼容性一个隐藏巨坑Selenium 4.0 引入了WebDriver BiDi双向协议对Cookie操作有重大影响。实测发现Chrome 115 Selenium 4.11add_cookie()在driver.get()之后调用完全正常Chrome 110~114 Selenium 4.8~4.10必须在driver.get()之前调用add_cookie()否则静默失败Firefox geckodriver对domain字段更严格.example.com必须写成example.com去掉开头的点否则注入失败。我的应对策略是在setup_driver_with_cookies()函数开头强制检测浏览器版本并打补丁browser_version driver.capabilities[browserVersion] if chrome in driver.capabilities[browserName].lower(): version_num int(browser_version.split(.)[0]) if version_num 115: # 正常流程先get再add driver.get(target_url) for cookie in cookies: driver.add_cookie(cookie) else: # 兼容旧版先add再get for cookie in cookies: driver.add_cookie(cookie) driver.get(target_url)4.3 关于多窗口/多标签页Cookie不是全局广播的这是最容易被忽视的细节。Selenium的add_cookie()只对当前激活的窗口window handle生效。如果你的脚本中执行了driver.switch_to.new_window(tab)或driver.execute_script(window.open())新打开的标签页不会自动继承原窗口的Cookie必须在新窗口中再次调用add_cookie()。验证方法在新标签页中执行print(driver.get_cookies())你会发现列表为空。解决方案封装一个inject_cookies_to_all_windows(driver, cookies)函数在每次切换窗口后调用def inject_cookies_to_all_windows(driver, cookies): original_handle driver.current_window_handle for handle in driver.window_handles: driver.switch_to.window(handle) driver.delete_all_cookies() for cookie in cookies: driver.add_cookie(cookie) driver.switch_to.window(original_handle)4.4 关于Headless模式无头浏览器的特殊限制在CI环境中我们99%用--headlessnew模式运行Chrome。但要注意Headless模式下driver.get_cookies()返回的Cookie列表可能不包含HttpOnly字段的Cookie即使它们实际生效这会导致你误判“注入失败”更隐蔽的问题是某些网站的反爬JS会检测navigator.webdriver属性Headless Chrome默认为true可能触发风控导致Cookie被服务端拒绝。我的Fix方案options.add_argument(--headlessnew) options.add_argument(--disable-blink-featuresAutomationControlled) # 关键覆盖webdriver属性 options.add_experimental_option(excludeSwitches, [enable-automation]) options.add_experimental_option(useAutomationExtension, False) driver.execute_cdp_cmd(Page.addScriptToEvaluateOnNewDocument, { source: Object.defineProperty(navigator, webdriver, { get: () undefined }) })4.5 最后一个忠告永远不要在生产环境用此方案我见过最危险的操作是某位同事把测试环境的Cookie注入脚本连domain都没改直接扔到生产环境的监控脚本里跑。结果因为生产domain.prod.com测试domain.staging.com注入失败脚本崩溃更糟的是他用了driver.delete_all_cookies()清掉了生产环境浏览器里真实的用户Cookie导致正在用系统的客户集体登出。所以我的团队守则第一条就是所有涉及Cookie注入的代码必须强制校验环境变量import os ENV os.getenv(ENVIRONMENT, test) # 从CI环境变量读取 if ENV prod: raise PermissionError(禁止在生产环境执行Cookie注入操作) assert ENV in [test, staging], f不支持的环境{ENV}这套方案不是银弹但它把UI自动化测试中最不可控的一环变成了可预测、可监控、可回滚的标准化流程。当你下次再被验证码折磨时记住你不是在对抗系统而是在用更聪明的方式与它协作。

相关文章:

Selenium Cookie复用登录态实战指南

1. 这不是“绕过”,而是“复用登录态”——先厘清一个关键认知误区很多人看到“Selenium通过cookie绕过验证码”这个标题,第一反应是:又一个黑灰产技巧?能省事就上?但我在电商、金融、SaaS类项目里带团队做自动化测试近…...

JMeter断言实战:从误配到分层校验的避坑指南

1. 为什么断言不是“加个检查框”就完事了?很多人第一次在 JMeter 里点开“添加 → 断言 → 响应断言”,填上“包含文本:success”,跑完看绿色小勾就以为接口测试闭环了。我带过三届测试团队,新同事交来的脚本里&#…...

JMeter接口断言实战:从响应匹配到业务逻辑校验

1. 断言不是“加个勾就完事”的装饰品,而是接口测试的判决书很多人第一次在JMeter里点开“添加 → 断言 → 响应断言”,填上一个“包含文本:success”,跑完看绿色小对勾亮了,就以为测试通过了——结果上线后接口明明返…...

WebSocket压测实战:从协议原理到高并发稳定性验证

1. 为什么WebSocket压测不能照搬HTTP那一套?很多人第一次想对WebSocket服务做压力测试时,下意识打开JMeter,新建一个HTTP请求,把ws://地址往URL栏一填,点运行——然后就卡在“连接超时”或者“400 Bad Request”上&…...

Open MCT性能测试实战:JMeter多协议分层压测方法

1. 为什么Open MCT的性能不能只靠“感觉”来判断?Open MCT——NASA开源的航天器监控与控制系统可视化平台,这几年在工业物联网、能源调度、科研实验数据看板等场景里越来越常见。但凡接触过它的人,几乎都会在部署后遇到同一个问题&#xff1a…...

创业团队如何利用Taotoken统一管理多个AI模型API以控制开发成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 创业团队如何利用Taotoken统一管理多个AI模型API以控制开发成本 对于资源有限的创业团队而言,在业务开发中引入大模型能…...

Open MCT性能压测实战:JMeter定制化四阶测试方法论

1. 为什么Open MCT的性能不能只靠“感觉”来判断?Open MCT——NASA开源的航天器监控与控制平台,这几年在工业SCADA、能源调度、实验室数据可视化等场景里越来越常见。但凡用过它的团队,几乎都经历过这样一个阶段:开发阶段一切丝滑…...

JMeter接口测试实战:从登录闭环到分布式压测

1. 为什么接口测试不能只靠“点点点”——从一个被忽略的500错误说起我第一次在客户现场接手一个电商后台系统时,开发说“所有接口都测过了,Postman跑了一遍,没问题”。上线前夜,支付回调接口突然返回500,日志里只有一…...

AI Agent与RPA的融合:智能自动化新范式

AI Agent与RPA的融合:智能自动化新范式 关键词:AI Agent、RPA、智能自动化、融合技术、自主决策、业务流程优化、人机协作 摘要:本文深入探讨了AI Agent与RPA(机器人流程自动化)的融合,揭示了这一技术组合如何开创智能自动化的新范式。我们将通过生动的类比和详细的技术解…...

LIMA模型:仅需千条优质数据,SFT微调即可媲美GPT-4的对齐效果

1. 项目概述:LIMA的横空出世与核心价值最近,Meta AI发布了一个名为LIMA(Less Is More for Alignment)的模型,在社区里激起了不小的水花。这个项目的标题信息量巨大——“媲美GPT-4”、“无需RLHF就能对齐”&#xff0c…...

98的堂邀请码色花的堂邀请码

兑换不易,可以联系邮箱sht98sht163.com,出邀请。...

开源鸿蒙OpenHarmony在微纳卫星上的航天级改造与应用实践

1. 项目概述:当开源鸿蒙“遇见”微纳卫星最近在航天圈里有个挺有意思的事儿,开源鸿蒙OpenHarmony系统,就是咱们手机、平板上那个鸿蒙系统的开源版本,现在已经成功“上天”了。这事儿不是概念验证,而是实打实地应用在了…...

瑞萨RZ系列核心板选型指南:从A55到RISC-V的嵌入式开发实战

1. 项目概述:当国产方案商遇上日系芯片巨头在嵌入式开发这个圈子里混久了,你会发现一个有趣的现象:很多项目在启动时,面临的第一个灵魂拷问往往不是“功能怎么实现”,而是“平台怎么选”。是追求极致的性能&#xff0c…...

嵌入式MCU性能评估:CoreMark移植、测试与深度分析指南

1. 项目概述:为什么我们需要CoreMark?在嵌入式开发领域,尤其是基于ARM Cortex-M这类资源受限的微控制器(MCU)进行选型或性能优化时,一个最直接也最令人头疼的问题就是:这颗芯片到底有多“快”&a…...

C语言内联函数与宏的深度解析:性能、安全与工程实践

1. 项目概述:为什么我们需要关注内联与宏?在C语言的日常开发中,尤其是性能敏感或嵌入式领域的项目里,我们经常面临一个选择:为了实现一个简单的、频繁调用的功能,是写一个函数,还是用一个宏来搞…...

RT-Trace升级:集成GDB Server与一键烧录,打造嵌入式开发调试平台

1. 项目概述:嵌入式开发的“瑞士军刀”再进化如果你是一名嵌入式开发者,最近可能被一个词刷屏了——RT-Trace。这已经不是它第一次带来惊喜了。最初,它以非侵入式的实时追踪和性能分析能力,在RT-Thread社区里掀起了一阵热潮&#…...

深夜连上服务器,我再也不想敲命令行

前言 那是晚上十一点,我第五次输错IPtables规则,服务器直接失联了。赶紧给机房打电话,求助工程师帮忙重启。电话里听着对方说"下次小心点",我只能苦笑——命令行这东西,真不是熬夜能hold住的。 就在这时&a…...

RAG架构全解析:从基础到高级,打造你的企业级知识库问答系统!

本文详细介绍了RAG(Retrieval-Augmented Generation)架构的多种变体,从基础的Naive RAG和Standard RAG开始,逐步深入到Advanced RAG、Hybrid Search RAG、Rerank型RAG、文档增强型RAG、Agentic RAG、Router RAG、GraphRAG、RAPTOR…...

AI大模型核心:Prompt、Tool、Skill、Agent,一篇彻底搞懂它们之间的区别与实战应用!

如果你最近在用AI大模型,一定会被这四个词绕晕:Prompt、Tool、Skill、Agent。 这篇文章用最通俗的语言,一次性讲透四个概念的本质、核心区别。一、讲清楚每个概念到底是什么? 1、Prompt 本质上是人类给大模型的单次文本指令&#…...

Claude Code 接入 GLM-4-Flash 永久免费模型 完整配置指南

🚀 Claude Code 接入 GLM-4-Flash 永久免费模型 完整配置指南 下面是从注册 API Key 到 Claude Code 配置的全流程步骤,Windows 系统可直接照搬操作,全程零成本。 第一步:获取智谱 AI GLM-4-Flash API Key 注册账号访问智谱 AI …...

嵌入式工程师核心素养:从测试到系统构建的全链路能力模型

1. 从“明星评选”看嵌入式工程师的成长路径与价值塑造最近看到一篇关于某公司内部“品质与服务创建活动”的报道,评选了四位明星工程师。这让我感触颇深。在嵌入式这个行当里摸爬滚打了十几年,我见过太多技术扎实但默默无闻的同行,也见过一些…...

ARM工业平板在机器人示教器控制系统中的应用与实现

1. 项目概述:ARM工业平板如何重塑机器人示教体验在工业机器人的世界里,示教器(Teach Pendant,简称TP)是连接操作员与机械臂的“神经中枢”。过去,这个角色通常由专用、封闭的硬件设备扮演,它们功…...

基于i.MX8M Plus与5G的高性能AI边缘计算网关设计与实践

1. 项目概述:为什么我们需要一个“会思考”的边缘网关?在工业现场待久了,你一定会对几个场景深有感触:产线上几十台PLC和传感器,协议五花八门,Modbus、Profibus、CANopen,想统一采集数据得接一堆…...

ARM嵌入式开发板OpenSSH移植全攻略:从交叉编译到部署实战

1. 项目概述与核心价值给嵌入式开发板移植OpenSSH,这几乎是每一个从单片机转向Linux嵌入式开发的工程师都会遇到的“成人礼”。你可能已经习惯了用串口调试终端,一根线连着,虽然稳定,但也被束缚在工位前。当你的设备需要部署到某个…...

LeetCode 15:三数之和 | 双指针法详解与进阶应用

LeetCode 15:三数之和 | 双指针法详解与进阶应用 引言 三数之和(3Sum)是 LeetCode 中一道经典的高频面试题,编号为 15,属于 Medium 难度范畴。这道题的核心要求是在一个整数数组中找出所有不重复的三元组,使…...

为什么你的双色调总像PPT?揭秘Midjourney v6中未公开的--tint权重衰减算法与Gamma校准阈值

更多请点击: https://kaifayun.com 第一章:双色调视觉失真的本质归因 双色调视觉失真并非单纯由显示设备或图像压缩引发的表层现象,其根本源于人眼视锥细胞响应函数与数字色彩空间映射之间的结构性不匹配。当图像被强制量化为仅含两种色调&a…...

什么是虚拟化

什么是虚拟化? 什么是虚拟化 虚拟化长期以来一直是一项基础 IT 技术,使企业能够在一台物理机器上运行多个独立的系统。 虚拟化是一种允许从单个物理机创建多个虚拟环境的技术。这些虚拟环境基本上是以前与硬件绑定的功能的逻辑(虚拟&#xff…...

【bash】git-bash windows 配置ssh免密登录ubuntu

需要一台ubuntu机器,长期运行 作为代理服务器,帮我访问github等白名单网络。 期望端口映射,长期运行。 在 Git Bash 环境下 在 Git Bash 环境下!Git Bash 确实完美支持 ~ 符号,而且我看到你的 ~/.ssh/ 目录下,id_ed25519.pub 已经静静地躺在那里了。 既然文件都在,而且…...

卡梅德生物技术快报|噬菌体随机肽库筛选实战:花生过敏原 Ara h 5 模拟表位鉴定全流程

摘要本文面向生物研发、体外诊断、蛋白质工程开发者,系统讲解噬菌体随机肽库筛选过敏原模拟表位完整工程化流程:从问题分析、实验设计、关键参数到结果验证,提供可复现技术方案,基于真实研究数据,聚焦高可靠性表位筛选…...

从 0 到 1:10 分钟跑通第一个 Ascend ACL 推理程序

第一次在昇腾 NPU 上跑推理,很多人卡在第一步:环境装好了,ATC 模型转换也成功了,一跑推理程序就报 aclInit failed 或者 load model failed。 我当年第一次跑 ACL 推理,环境装了 3 遍,模型转了 5 遍&#…...