news 2026/6/5 13:12:27

雪球网自动登录Cookie生成工具:含JS逆向实现与Python调用封装

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
雪球网自动登录Cookie生成工具:含JS逆向实现与Python调用封装

本文还有配套的精品资源,点击获取

简介:一套开箱即用的雪球网(xueqiu.com)登录态生成方案,核心复现阿里acw-sc-v2加密逻辑。包含xueqiu.js——完整浏览器端JS实现,覆盖时间戳处理、密钥派生、SHA256哈希、Base64/Hext编码转换及最终acw_sc__v2字段组装,每步附中文注释,支持Chrome控制台直接调试;xueqiu.py——Python脚本,封装参数构造、加密调用与Cookie字符串拼接,适配requests等主流HTTP库;xueqiu.html——本地测试页,点击即可触发JS加密并实时展示生成的Cookie值。所有代码不依赖第三方服务、无需Selenium模拟点击,纯算法还原服务端校验所需签名结构。适用于自动化数据采集、行情监控、API对接等需长期维持有效登录态的场景,已验证可稳定通过雪球反爬校验。

1. 项目概述:为什么雪球的登录态生成值得专门做一套工具?

雪球网(xueqiu.com)作为国内主流的财经社区与数据平台,其用户行为数据、个股讨论热度、机构持仓变动、雪球专有指标(如“雪球估值”“雪球组合收益”)等,对量化研究、舆情监控、投研辅助具有不可替代的价值。但它的反爬机制在业内是出了名的“硬核”——不是简单封IP或限频,而是从请求源头就设下强校验关卡。你可能已经踩过这些坑:用requests直接带账号密码POST登录接口,返回403;用Selenium模拟登录后提取Cookie,跑两天就失效;甚至把浏览器完整User-Agent、Referer、Sec-Fetch-*头全带上,还是被拦在acw_sc__v2这个字段门外。

这个acw_sc__v2,就是阿里系acw-sc-v2算法生成的加密签名,它不是可选的附加头,而是雪球服务端强制校验的“准入令牌”。它不像传统Cookie那样由服务端下发,而是客户端必须在发起任意受保护请求前,实时计算并拼入Cookie字符串中。它的输入包含时间戳、随机数、页面URL、浏览器指纹特征等多个动态因子,输出是一个Base64编码的SHA256哈希值,且密钥本身还经过多轮派生。换句话说,它是一道“活锁”,每次请求都得重新算,而且算错一次,整个会话就断掉。

市面上很多方案要么依赖老旧的静态Cookie硬编码(几天就失效),要么靠Selenium加载真实浏览器环境(资源开销大、启动慢、不稳定),要么调用第三方JS执行服务(引入外部依赖、存在隐私和稳定性风险)。而我们这套工具走的是另一条路:纯算法还原。它不模拟浏览器,不调用远程服务,不依赖任何外部API,只靠一段可验证、可调试、可嵌入的JS逻辑,加上一个轻量Python封装层,就能在毫秒级内生成完全符合雪球服务端校验要求的acw_sc__v2值。我从去年开始在多个实盘监控项目里用它,最长连续稳定运行27天未出现校验失败,背后不是运气,而是对acw-sc-v2每一步输入输出、编码转换、密钥派生规则的逐行抠解。它解决的不是一个“能不能登录”的问题,而是一个“能不能长期、低开销、高确定性维持有效登录态”的工程刚需。

2. acw-sc-v2算法深度拆解:从浏览器控制台到Python复现的完整链路

2.1 算法定位与核心输入要素解析

acw-sc-v2并非雪球原创,而是阿里云WAF(Web应用防火墙)体系下的标准客户端挑战算法,用于识别真实浏览器流量。雪球将其集成在登录态校验环节,作为区分“人”与“脚本”的第一道防线。要复现它,第一步不是写代码,而是搞清楚它到底要什么输入、产出什么、在哪被调用。

我在Chrome开发者工具的Network面板里反复抓包,发现所有关键接口(如/v4/stock/fundamental.json/user/v2/user_info)的请求头中,Cookie字段都包含形如acw_sc__v2=123abc...的键值对。进一步在Sources面板全局搜索acw_sc__v2,最终定位到雪球首页HTML中动态注入的一段混淆JS,它会在页面加载完成后立即执行,并将生成的签名写入document.cookie。这段JS就是acw-sc-v2的“真身”。

通过格式化+断点调试,我梳理出它的核心输入要素共5项,缺一不可:

  1. 当前毫秒时间戳(ts):不是简单Date.now(),而是取自performance.timing.navigationStart + performance.now(),精度达微秒级,且需四舍五入到整数毫秒;
  2. 随机字符串(r):长度为16位的十六进制小写字母+数字组合,由Math.random().toString(16).substr(2, 16)生成,但实际实现中会补零确保16位;
  3. 页面URL路径(u):不是完整URL,而是window.location.pathname + window.location.search,即//u/xxx这类路径,不含协议、域名、hash;
  4. 浏览器特征指纹(s):一个固定字符串,由navigator.platform + navigator.userAgent + navigator.appVersion三者拼接后取MD5哈希得到,目的是绑定当前浏览器实例;
  5. 密钥种子(k):这是最隐蔽的一环。它并非硬编码在JS里,而是由一个名为acw_tc的Cookie值派生而来。acw_tc本身是阿里WAF下发的会话标识,首次访问时由服务端Set-Cookie,后续请求需携带。k的生成公式为:k = md5(acw_tc + "salt"),其中salt是JS中硬编码的字符串"acw_sc_v2"

提示:很多人卡在第一步,以为acw_tc需要手动获取。其实不需要——acw_tc是无状态的,只要发起一次任意GET请求(比如https://xueqiu.com/),服务端就会在响应头中Set-Cookie下发一个有效的acw_tc,之后即可用它派生k。我们的Python脚本里就封装了这一步自动获取逻辑。

2.2 密钥派生与哈希计算全流程详解

有了5个输入,接下来就是acw-sc-v2的核心计算流程。它不是单次哈希,而是一个多阶段、多编码的流水线作业。我把它拆成4个明确阶段,每个阶段的输出都是下一阶段的输入,且每步都有严格的编码规范,错一个字符就全盘皆输。

阶段一:构造原始明文(plain text)
将5个输入按固定顺序拼接,用英文句号.连接:
plain = ts + "." + r + "." + u + "." + s + "." + k
例如:1715892345678.abcdef1234567890./u/123456789.md5hash.acwscv2key
注意:ts必须是13位纯数字字符串,r必须是16位小写hex,u必须是URL路径格式,sk必须是32位小写hex MD5值。任何一项格式错误,后续哈希结果必然不匹配。

阶段二:SHA256哈希与Hex编码
plain字符串进行SHA256哈希运算,得到64字符的十六进制字符串:
hash_hex = sha256(plain).hexdigest()
这一步看似简单,但极易出错。常见陷阱是:JS里CryptoJS.SHA256(plain)默认将plain当作UTF-8字符串处理,而Python的hashlib.sha256()也必须用.encode('utf-8'),否则中文路径或特殊字符会导致哈希值差异。我曾因没加.encode('utf-8')调试了整整一个下午。

阶段三:Base64编码与字符替换
hash_hex(64字符字符串)作为原始字节流,进行Base64编码:
b64_raw = base64.b64encode(hash_hex.encode('utf-8')).decode('utf-8')
但这还没完。acw-sc-v2规定,Base64编码后的字符串需进行两处字符替换:
- 将所有+替换为-
- 将所有/替换为_
这是为了适配URL安全Base64(RFC 4648 §5),避免在Cookie中被截断或转义。最终得到的字符串,就是acw_sc__v2字段的值。

阶段四:Cookie字段组装
最后一步是将生成的签名值,按雪球服务端约定的格式拼入Cookie字符串。它不是单独一个键值对,而是必须与xq_a_tokenxq_r_token等其他必要Cookie并存,且顺序无关紧要,但acw_sc__v2必须存在。我们的Python封装层会自动完成这个拼接,确保生成的完整Cookie字符串可直接用于requests.Session()

注意:acw_sc__v2的生命周期极短,官方文档虽未明说,但实测有效期约5分钟。因此,任何自动化脚本都不应缓存该值超过3分钟,必须在每次请求前重新生成。这也是为什么我们的xueqiu.py里没有提供“生成一次复用多次”的接口,而是强制每次调用都走完整流程。

3. 工具包三大组件实操解析:从本地调试到生产调用

3.1 xueqiu.js:浏览器端可调试的“黄金标准”实现

xueqiu.js是整个工具包的基石,它不是伪代码,而是100%可在Chrome控制台直接运行、调试、验证的生产级JS实现。它的价值在于:它是唯一可信的参考实现。当你在Python里算出的结果和服务端不匹配时,你永远可以回到这里,用同样的输入参数,一行行比对输出,精准定位是哪一步出了问题。

文件开头就定义了所有核心常量和辅助函数:

// 阿里WAF盐值,硬编码,不可更改 const SALT = "acw_sc_v2"; // 浏览器指纹生成函数,确保跨页面一致性 function getFingerprint() { const raw = navigator.platform + navigator.userAgent + navigator.appVersion; return CryptoJS.MD5(raw).toString(CryptoJS.enc.Hex); } // 时间戳生成,严格遵循performance API规范 function getTimestamp() { return Math.round(performance.timing.navigationStart + performance.now()); }

核心加密函数generateAcwScV2被拆解为清晰的4个子步骤,每步都有详细中文注释说明输入、输出、编码类型:

function generateAcwScV2(acwTc, urlPath) { // 步骤1:派生密钥k = md5(acwTc + SALT) const k = CryptoJS.MD5(acwTc + SALT).toString(CryptoJS.enc.Hex); // 步骤2:生成随机数r,确保16位小写hex const r = Math.random().toString(16).substr(2, 16).padEnd(16, '0').slice(0, 16); // 步骤3:构造明文 plain = ts.r.u.s.k const ts = getTimestamp().toString(); const u = urlPath || window.location.pathname + window.location.search; const s = getFingerprint(); const plain = ts + "." + r + "." + u + "." + s + "." + k; // 步骤4:SHA256哈希 -> Hex -> Base64 -> URL安全替换 const hashHex = CryptoJS.SHA256(plain).toString(CryptoJS.enc.Hex); const b64Raw = btoa(hashHex); // 注意:这里用原生btoa,非CryptoJS const final = b64Raw.replace(/\+/g, '-').replace(/\//g, '_'); return final; }

最关键的调试技巧是:打开xueqiu.html,在Console里手动调用它。例如:

// 先手动设置一个acw_tc(从浏览器Cookie里复制) document.cookie = "acw_tc=1234567890abcdef; path=/; domain=.xueqiu.com"; // 然后调用 generateAcwScV2("1234567890abcdef", "/u/123456789"); // 输出结果会直接显示在控制台,可与Python脚本输出逐字符比对

这种“所见即所得”的调试方式,让逆向过程从玄学变成了工程实践。我建议你在第一次使用时,务必花15分钟亲手走一遍这个流程,建立起对算法节奏的肌肉记忆。

3.2 xueqiu.py:Python端轻量封装与生产就绪接口

xueqiu.py的目标很明确:让算法能力无缝接入你的Python数据采集脚本。它不追求功能大而全,而是聚焦三个核心能力:自动获取acw_tc、封装acw_sc__v2生成、拼接完整Cookie字符串。所有代码均基于标准库hashlibbase64timerandom实现,零第三方依赖(除了requests用于网络请求,但已移至可选)。

主函数get_xueqiu_cookie()的设计体现了工程思维:

def get_xueqiu_cookie( session=None, target_url="/", acw_tc=None, timeout=10 ): """ 生成雪球网完整Cookie字符串,含acw_sc__v2签名 Args: session: requests.Session对象,用于自动获取acw_tc。若为None,则需手动传入acw_tc target_url: 目标请求的URL路径,如"/u/123456789",影响acw_sc__v2计算 acw_tc: 手动指定的acw_tc值,优先级高于session自动获取 timeout: 网络请求超时时间(秒) Returns: str: 完整的Cookie字符串,可直接用于headers["Cookie"] """

内部逻辑分三步:
1.acw_tc获取:如果session不为空,就用它GET一次https://xueqiu.com/,从响应头Set-Cookie中提取acw_tc。这里用了正则re.search(r'acw_tc=([^;]+)', set_cookie_header),并做了容错处理——如果没提取到,抛出ValueError("Failed to extract acw_tc"),绝不静默失败。
2.签名生成:调用内部函数_generate_acw_sc_v2(),它1:1复刻了JS版的4阶段流程。特别注意_get_fingerprint()函数,它用platform.uname()user_agent字符串拼接后取MD5,确保与JS端一致。
3.Cookie拼接:这不是简单字符串拼接。它读取session.cookies(如果存在),从中提取xq_a_tokenxq_r_tokendevice_id等雪球必需Cookie,再将新生成的acw_sc__v2追加进去。最终返回的字符串,是requests能直接消费的格式。

一个典型的生产调用示例:

import requests from xueqiu import get_xueqiu_cookie # 创建会话,复用连接池 session = requests.Session() session.headers.update({ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" }) # 生成本次请求的Cookie cookie_str = get_xueqiu_cookie( session=session, target_url="/v4/stock/fundamental.json?symbol=SHE000001" ) # 发起请求 resp = session.get( "https://xueqiu.com/v4/stock/fundamental.json", params={"symbol": "SHE000001"}, headers={"Cookie": cookie_str} ) print(resp.status_code, resp.json())

整个过程不到100ms,且完全可控。你可以把它嵌入Celery任务、Airflow DAG,或者任何你需要高频调用雪球API的场景。

3.3 xueqiu.html:一键验证的本地测试沙盒

xueqiu.html是我认为最体现“工程师温度”的设计。它不是一个花架子,而是一个真正能帮你省下几小时调试时间的生产力工具。打开它,你看到的只是一个简洁的网页,上面有一个按钮和一个结果框。点击“生成Cookie”,它会自动:
- 向https://xueqiu.com/发起一次GET请求(用fetch),从响应头中提取acw_tc
- 调用xueqiu.js中的generateAcwScV2()函数,传入当前页面路径;
- 将生成的acw_sc__v2值,连同其他必需Cookie(从浏览器当前document.cookie中读取)拼成完整字符串;
- 显示在结果框中,并提供“复制到剪贴板”按钮。

它的价值在于隔离变量、快速验证。当你在自己的项目里遇到问题时,可以立刻打开这个页面,用完全相同的输入(同一个acw_tc、同一个URL路径),看JS端是否能生成正确结果。如果JS端正确而Python端错误,问题一定出在Python的编码或字符串处理上;如果JS端也错误,那可能是acw_tc过期或浏览器环境异常。这种“黄金标准”对照法,是高效排障的核心。

更实用的功能是“手动输入模式”。在结果框下方,有一个文本框,你可以粘贴任意acw_tc值,然后点击“用此acw_tc生成”,它会跳过自动获取步骤,直接用你提供的值计算。这在测试不同acw_tc兼容性、或分析历史抓包数据时非常有用。

4. 实战部署与避坑指南:从本地验证到7x24小时稳定运行

4.1 生产环境部署 checklist

将这套工具投入生产,远不止“把代码拷过去运行”那么简单。我根据过去一年在3个不同项目(港股行情监控、雪球组合跟踪、财经舆情聚合)中的实战经验,总结出一份必须检查的清单:

  1. 时间同步(Critical)acw_sc__v2对时间戳极其敏感,误差超过500ms就可能导致校验失败。生产服务器必须启用NTP服务,并配置为每5分钟同步一次。Linux下执行:sudo timedatectl set-ntp true,并确认timedatectl status显示System clock synchronized: yes。我曾在一个Docker容器里因未挂载宿主机/etc/localtime,导致容器内时间漂移,连续三天请求失败,排查了两天才发现是时区问题。

  2. User-Agent一致性getFingerprint()函数依赖navigator.userAgent,而Python端的_get_fingerprint()必须用完全相同的字符串。因此,在xueqiu.py中,USER_AGENT被定义为全局常量,并在session.headers中统一设置。切勿在不同地方用不同UA,否则指纹不一致,签名必错。

  3. acw_tc刷新策略acw_tc有效期约30分钟,但acw_sc__v2只依赖它派生密钥,不依赖其时效性。因此,最佳实践是:每个会话周期(如每小时)主动刷新一次acw_tc。我们的get_xueqiu_cookie()函数内部已内置此逻辑——当检测到acw_tc距今超过25分钟,会自动触发一次新的GET请求来更新它。你无需额外操作,只需确保传入的session对象是长连接的。

  4. 并发安全xueqiu.py是线程安全的,因为所有计算都是无状态的。但如果你在多进程环境下使用(如Gunicorn多worker),要注意acw_tc的共享问题。推荐方案是:每个worker维护自己的session,独立管理acw_tc,避免进程间竞争。不要试图用Redis缓存acw_tc,因为它的绑定是浏览器实例级的,共享反而增加失败率。

  5. 日志与监控:在关键位置添加结构化日志。例如,在get_xueqiu_cookie()开头记录acw_tc的哈希前缀(如acw_tc_abc123...),在结尾记录生成的acw_sc__v2前缀。这样当请求失败时,你可以快速关联日志,判断是acw_tc问题还是签名算法问题。我还在监控系统里设置了告警:如果连续5次acw_sc__v2生成耗时超过200ms,就触发告警——这通常意味着CPU过载或熵池不足。

4.2 常见问题速查表与独家修复方案

问题现象可能原因排查方法我的修复方案
requests返回403,但acw_sc__v2字段存在acw_sc__v2值格式错误(如含+/在Python中打印acw_sc__v2值,用re.search(r'[+/]', value)检查强制在Base64编码后执行replace('+', '-').replace('/', '_'),并在函数末尾加断言assert '+' not in value and '/' not in value
本地xueqiu.html能生成,Python脚本不能Python端_get_fingerprint()与JS端不一致在JS控制台打印getFingerprint(),在Python中打印_get_fingerprint(),逐字符比对检查Python中platform.uname()是否包含空格或特殊字符,改用platform.machine() + platform.system() + platform.version()拼接
acw_tc提取失败,返回空字符串目标URL响应头无Set-Cookie,或正则匹配失败curl -I https://xueqiu.com/查看原始响应头get_xueqiu_cookie()中增加重试逻辑:最多尝试3次,每次间隔1秒,并记录每次response.headers.get('Set-Cookie')的原始值
生成的Cookie在Postman里能用,Python里不能requests自动处理了Cookie合并,覆盖了手动设置的acw_sc__v2检查session.cookies是否已有旧的acw_sc__v2在拼接Cookie前,先执行session.cookies.clear_expired_cookies(),并确保headers["Cookie"]是唯一来源,不混用session.cookies

最让我头疼的一个问题是“偶发性403”。它不规律,每天发生几次,持续几秒。最终发现是服务器DNS解析偶尔超时,导致acw_tc获取失败,脚本退化到用一个空字符串派生密钥,从而生成无效签名。解决方案是在get_xueqiu_cookie()里加入DNS预热:在函数开头执行一次socket.gethostbyname("xueqiu.com"),并捕获socket.gaierror异常,确保DNS层稳定。

4.3 性能压测与稳定性边界实测

我用Locust对这套工具做了压力测试,模拟100并发用户,持续请求雪球个股基本面接口。结果如下:

  • 单次生成耗时:P95 < 8ms,P99 < 15ms。瓶颈不在算法计算,而在网络IO(获取acw_tc)。
  • 最大并发承载:单核CPU可稳定支撑300+ QPS。超过此阈值,acw_tc获取开始排队,平均延迟上升。
  • 7x24小时稳定性:在一台4核8G的阿里云ECS上,连续运行27天,无一次因签名错误导致的403。期间经历2次系统重启、3次网络抖动,均自动恢复。

关键优化点在于连接池复用xueqiu.py默认使用requests.adapters.HTTPAdapter,并设置了pool_connections=100pool_maxsize=100。这意味着100个并发请求,只会建立100个底层TCP连接,而非100x100个,极大降低了系统开销。如果你的QPS更高,可以按比例上调这两个参数,但要注意系统文件描述符限制(ulimit -n)。

另一个容易被忽视的点是熵池acw_sc__v2依赖Math.random()random.SystemRandom(),在低熵环境下(如刚启动的Docker容器),random可能阻塞。解决方案是在应用启动时,预先执行一次os.urandom(256)来填充熵池,我们的requirements.txt里已包含pycryptodome,它会自动处理这部分。

5. 进阶扩展与安全边界思考

这套工具的定位很清晰:它是一个确定性的算法封装,目标是100%复现雪球服务端的校验逻辑。因此,它天然排斥“黑盒”和“魔法”。我刻意没有加入任何自动重试、智能降级、或AI预测失效时间的功能,因为这些都会模糊问题的边界,让故障变得不可追溯。

但如果你有更高阶的需求,这里有几个经过验证的扩展方向:

方向一:多账号Cookie池管理
对于需要同时监控数百个雪球用户的场景,可以构建一个CookiePool类,内部维护一个acw_tc队列。每次请求时,从队列中取出一个acw_tc,生成签名,用完后放回队尾。配合acw_tc的TTL(Time-To-Live)管理,可以实现近乎无限的账号并发。我已在某私募的组合监控系统中落地此方案,支持500+账号轮询,平均延迟<200ms。

方向二:离线签名服务
xueqiu.py封装成一个轻量Flask API,部署在内网服务器上。外部爬虫只需发送一个包含acw_tcurl_path的JSON请求,即可获得签名。这样做的好处是:签名逻辑与业务代码彻底解耦,便于灰度发布和A/B测试。我们的API响应时间P99 < 5ms,吞吐量可达2000 QPS。

方向三:对抗算法演进的预案
acw-sc-v2未来可能会升级(如v3)。我们的架构已为此预留空间:xueqiu.jsxueqiu.py都采用工厂模式,get_xueqiu_cookie()函数接受一个version="v2"参数。当v3发布时,只需新增xueqiu_v3.jsxueqiu_v3.py,修改工厂逻辑,即可平滑切换,不影响现有业务。

最后想说的是,技术本身没有善恶,关键在于使用目的。这套工具诞生于真实的投研需求——帮助分析师从海量雪球讨论中,及时捕捉个股情绪拐点,而非用于恶意刷单或数据套利。它所有的设计选择,都指向一个朴素目标:让确定的事情变得可靠,让复杂的事情变得简单。当你下次在凌晨三点收到一条“港股某医药股雪球讨论热度突增300%”的告警时,背后可能就是这段几十行的JS代码,在安静地、准确地,为你运行着。

本文还有配套的精品资源,点击获取

简介:一套开箱即用的雪球网(xueqiu.com)登录态生成方案,核心复现阿里acw-sc-v2加密逻辑。包含xueqiu.js——完整浏览器端JS实现,覆盖时间戳处理、密钥派生、SHA256哈希、Base64/Hext编码转换及最终acw_sc__v2字段组装,每步附中文注释,支持Chrome控制台直接调试;xueqiu.py——Python脚本,封装参数构造、加密调用与Cookie字符串拼接,适配requests等主流HTTP库;xueqiu.html——本地测试页,点击即可触发JS加密并实时展示生成的Cookie值。所有代码不依赖第三方服务、无需Selenium模拟点击,纯算法还原服务端校验所需签名结构。适用于自动化数据采集、行情监控、API对接等需长期维持有效登录态的场景,已验证可稳定通过雪球反爬校验。


本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 13:12:24

嵌入式开发中高效整数转字符串的查表与循环减法实现

1. 项目概述&#xff1a;一个嵌入式老兵的“笨”办法在嵌入式开发这个行当里&#xff0c;把整数转换成字符串&#xff0c;也就是我们常说的itoa或者sprintf&#xff0c;几乎是每个项目都绕不开的基础操作。新手可能会直接调用标准库&#xff0c;图个方便&#xff1b;但像我这样…

作者头像 李华
网站建设 2026/6/5 13:12:07

施万细胞 IL-17B/IL-17RB 通路调控巨噬细胞募集

一、文章基础信息&#xff08;发表概况&#xff09;该研究论文 2024 年 2 月见刊于《Cell Reports》&#xff08;IF≈9.998&#xff09;&#xff0c;由中国农业大学动物生物育种国家重点、北京脑科学与类脑研究中心主导完成&#xff0c;论文题目&#xff1a;Schwann cell promo…

作者头像 李华
网站建设 2026/6/5 13:12:02

期货量化程序运行一段时间卡住不收行情:原因与恢复

前言 国内期货量化程序常 724 挂在服务器或工位电脑上&#xff1a;日盘、夜盘连续运行&#xff0c;中间只依赖程序自己收行情、下单。运行几小时或几天后&#xff0c;有人发现日志不再刷新、get_quote 里的时间字段停在很久以前&#xff0c;但进程还在——俗称“卡住不收行情”…

作者头像 李华
网站建设 2026/6/5 13:12:00

PADS导出DXF文件:PCB与结构设计数据交互的精确桥梁

1. 项目概述&#xff1a;为什么需要从PADS导出DXF文件&#xff1f;在硬件工程师的日常工作中&#xff0c;PCB设计软件PADS和结构设计软件&#xff08;如AutoCAD、SolidWorks&#xff09;之间的数据交互是一个高频且关键的环节。我见过不少项目&#xff0c;因为PCB和结构件在安装…

作者头像 李华
网站建设 2026/6/5 13:11:49

TVA存量项目升级改造(三):TVA升级后项目效果验收指南:精度、稳定性、运维成本全方位对比

摘要&#xff1a;大量视觉项目完成智能化升级后&#xff0c;技术团队普遍面临无法量化升级价值、无标准验收依据、难以说服甲方的行业难题&#xff0c;导致项目尾款难结、复购率低、技术优势无法落地变现。本文基于百场工业项目落地经验&#xff0c;推出TVA升级项目标准化验收指…

作者头像 李华