网页中不可选中的加密验证码文本可通过四种方式提取:一是定位并解码Base64 SVG中的<text>节点;二是导出Canvas图像后OCR识别或读取ImageData;三是查找隐藏的明文DOM节点;四是捕获API响应获取原始验证码。

网页中不可选中的加密验证码文本,通常以Base64编码的SVG或Canvas渲染,或由JS动态写入DOM后立即禁用选择;直接拖选无效,但原始文本仍存在于页面资源中,可通过开发者工具定位并解码提取。
定位并导出Base64编码的SVG验证码
很多政务、银行类网站将验证码转为内联SVG,再用data:image/svg+xml;base64,xxx嵌入或CSS背景,此时文本未丢失,只是被图形化封装。
第一步:按F12打开开发者工具→切换到Elements面板→按Ctrl+F搜索<svg或data:image/svg+xml;base64;
第二步:找到匹配的标签或
第三步:右键该base64字符串→选择“Copy”→“Copy value”;
第四步:访问任意在线Base64解码网站(如base64.guru),粘贴解码→确认输出为XML格式的SVG源码;
第五步:在解码结果中查找<text>、<tspan>或textContent属性值,这些就是原始验证码字符——【不要复制整个SVG,只取text节点内的纯文本】。
从Canvas像素中还原文字(无SVG时)
当验证码绘制在
方法一:强制导出Canvas图像后OCR识别
在Console中执行:document.querySelector("canvas").toDataURL("image/png")→回车→复制返回的data: URL→粘贴到新标签页地址栏→回车打开图片→右键另存为PNG→用系统截图工具+OCR软件识别。
方法二:注入脚本读取Canvas绘图上下文(需页面未禁用getContext)
在Console中粘贴并执行:const c = document.querySelector("canvas"); const ctx = c.getContext("2d"); console.log(ctx.getImageData(0,0,c.width,c.height));→若控制台返回ImageData对象,说明可读;此时需配合OCR库(如Tesseract.js)本地运行,但米侠不支持直接加载外部JS,故此步仅作验证用途。
⚠️关键提醒:【Canvas内容一旦被clearRect()清空或重绘,历史像素即永久丢失,必须在验证码首次渲染后立即操作】。
提取动态注入的隐藏文本节点
部分网站把验证码明文藏在不可见DOM节点里,再用JS读取并绘制到Canvas,这类文本从未真正加密,只是被CSS隐藏或移出视口。
第一步:按F12→Elements面板→按Ctrl+F搜索关键词:captcha、code、verify、token、data-code;
第二步:逐个检查命中节点的style属性,重点看display:none、visibility:hidden、opacity:0、position:absolute;left:-9999px等隐藏方式;
第三步:右键该节点→“Copy”→“Copy text”;
这一步操作起来很简单,直接复制即可获得明文,无需解码。若返回为空,说明文本被JS动态生成后未挂载到DOM,需换用下一方法。
通过Network面板捕获原始API响应
验证码本质是后端生成的字符串,前端只是负责展示。只要抓到生成接口的响应体,就能拿到原始文本。
第一步:刷新网页,同时在开发者工具中切换到Network面板;
第二步:在Filter框输入captcha、verify或code,触发验证码刷新(如点击“换一张”按钮);
第三步:在列表中找到状态码为200、类型为XHR或Fetch的请求,点击查看详情;
第四步:切换到Response标签页,查找JSON结构中的code、captcha、data等字段值;
第五步:若响应为二进制或加密格式(如AES密文),需结合网页源码中加载的JS文件查找解密函数——在Sources面板中按Ctrl+P搜索decrypt、aes、atob等关键词,定位解密逻辑后,在Console中复现调用。


















