linux.do
21.1K subscribers
118K photos
195 videos
116 files
251K links
linux.do最新话题和热议话题
Download Telegram
弄了个过 Cloudflare Turnstile 验证码的插件

第一次在论坛分享技术贴,分享一下最近折腾 Cloudflare 验证码的经历,还请各位大佬多多包涵。

缘起

一切都源于前几天刷到了 jack 大佬(https://linux.do/u/jackzzs)
好几篇帖子。看着这个该死的验证码,我心里就燃起了一股无名火:我就非得点你一下吗?于是,一场折腾就此拉开序幕。

最开始,我只是简单修改了 DrissionPage 中关于 screenXscreenY 的代码,再配上一个简单的服务端,就能跑起来了。

现有插件的局限性

我平时爬虫需求不多,主要还是浏览器用得多。我调研了市面上的插件,如 Capsolver、YesCaptcha 等,发现它们几乎无一例外都是通过服务端计算 tokencf_clearance 来实现的。更关键的是,支持 cf_clearance 的插件寥寥无几。

科普一下: Cloudflare 的验证码主要分为两种:

1. Turnstile:嵌入在网页中的人机验证模块。
2. 五秒盾 (Challenge):强制跳转的质询页面。

经过我的测试,五秒盾的风控等级要比嵌入式的 Turnstile 更高。市面上的这些付费插件,不仅价格不菲,实际体验也相当一般。


回合一:前端 JS Patch 的失败尝试

既然现成的不行,那就自己动手!

我最初的想法是直接 Patch 掉 Turnstile 的 turnstile.renderturnstile.reset 等关键函数。然而,当我使用 Object.defineProperty 进行 Patch 时,却发现 Cloudflare 的验证码根本无法正常加载。

深入研究 api.js 后,我才发现那个经过混淆的脚本,在最后会执行一个判断:"turnstile" in window。这一下就让我的 Patch 方案彻底失效了。接着,我又尝试 Proxy 整个 window 对象,但这个方案显然也是不可行的(window 对象不可被代理)。最后,我只能尝试用 setInterval 来暴力轮询,期望能在它 render 之前完成 Patch,但每次都竞争不过 Cloudflare,屡战屡败。

回合二:注入 Injected.js 的困境

此路不通,另寻他法。

我想到可以直接将一个 injected.js 脚本注入到验证码的 iframe 内部,当判断是 Cloudflare 验证码时,就向我的服务器发送请求。但这个方案很快也遇到了瓶颈:除了 sitekey,我根本无法获取到其他必要的 extra data。这导致我的脚本只能通过一些最简单的验证码,体验极差。五秒盾的延迟非常明显,有那等待的时间,我自己早就点完了。
我想,为什么我要绕这么大一圈去处理 token 呢?为什么不直接模拟人的行为,自动点击那个复选框呢?


回合三:CDP 自动化点击

于是,我将目光转向了 CDP (Chrome DevTools Protocol)

我参考 DrissionPage 的原理,利用 CDP 命令来模拟点击。理论上这完全可行。在经过一番 Prompt 和 Debug 后,一个基于 CDP 的点击脚本基本成型了。

但新的问题又来了:

1. event.isTrusted:简单的 JS 模拟点击会被 event.isTrusted 轻松识破,这个参数能明确区分出是真实用户操作还是脚本行为,直接堵死了纯前端 JS 注入的路。CDP 则可以绕过这个问题。
2. 加载时机:纯粹使用 CDP,我无法准确知道复选框(Checkbox)何时加载完成可以点击,只能靠延时等待或轮询,效率低下。
3. Shadow DOM:由于 Shadow DOM 的隔离机制,我无法从外部 JS 直接获取到 iframe 内部的元素,这让精确定位变得异常困难。

最终突破:Element.prototype.attachShadow 带来的胜利

如何才能精准监控元素的加载状态和位置?

最终,我找到了一个堪称完美的解决方案:Patch Element.prototype.attachShadow

核心思路是:在目标 DOM 元素创建 Shadow DOM 的那一刻进行拦截,构建一个“假”的 iframe 并获取其引用。这样一来,即使后续 shadowRoot 的模式被设置为 closed,我们依然能持有其内部元素的引用。

通过这个方法,我成功实现了:

● 精确监控:实时获知复选框何时加载完毕。
● 精准定位:准确获取复选框的点击坐标。

至此,一个体验相当不错的自动化点击版本终于完成了!唯一的“缺点”可能就是需要用户授予 debugger 权限,这或许会带来一些安全风险,但对于自用来说,完全可以接受。

----------------------

一些未来的构想与终极方案

在折腾的过程中,我也思考了一些更根本的解决方案:

1. 编译定制版 Chromium 内核

直接在源码层面修改 event.isTrusted 的判断逻辑、开放 shadowRoot 的访问权限等。但这种方法成本极高,而且谁也无法保证 Cloudflare 没有其他更奇特的检测手段。

1. 逆向 api.js 并进行中间人攻击 (MITM)

这应该是最优雅、最强大的终极方案。通过 MITM 劫持对 challenges.cloudflare.com 的请求,然后用我们自己逆向分析后的逻辑直接返回验证结果,甚至可以做到让用户完全看不到验证码的出现。不过,这需要极高的逆向工程能力,开发成本巨大。

1. 截图 + AI 视觉模型

将当前页面截图,发送给一个多模态大模型,让它识别并返回复选框在屏幕上的精确坐标,然后通过 CDP 进行点击。这个方案在技术上是完全可行的。目前没有采用的主要原因是,大模型的响应速度还不够快,而验证码的实时性非常重要,太慢了还不如自己动手点。

感谢能看到这里的各位!附上一张自动通过 Cloudflare 官网验证码的图片,给大家乐呵一下。

致谢 gemini-2.5-pro,gpt-5-high 🤣

后面先自用看看能维持多久不死,并且不知道还会不会有什么bug,再考虑给大伙用上,各位有什么其他过turnstile的好想法也欢迎交流!

8 posts - 6 participants

Read full topic

via LINUX DO - 最新话题 (author: tenacious)

Invalid media: image
楼主10年浏览器使用经验?谈谈浏览器最终选择chrome,,别家浏览器有哪些独特的功能谷歌迟迟不抄??/还有安卓浏览器打开次数为零这回事。。。。。。。

用到最后一定是chrome

别家真心慢没办法 倒不如说说别家哪些优点现在chrome没有的

safari 紧凑ui真心好看 慢 放弃了 chrome至今不出紧凑模式

firefox 多端安卓 插件都能同步 慢 放弃了 谷歌至今不在移动端放开扩展

arc zen 非常好的功能 尤其boost比stylus好用的多 可视化就是强 垂直标签页这个可能得习惯 个人懒得整了,个人认为垂直标签效率不如我滚轮切换多标签(也可能用的不熟)再者占用左边的面积有点膈应 遂放弃

安卓上一直在折腾 楼主主力折叠机,现在安卓chrome和浏览器终于支持标签栏了(谁记得很久前连标签栏都没 只能点一下再切换,当然竖屏手机可能也用不到)
一直期待全数据同步(包括插件),还有 收藏栏!!!!!收藏栏这一块谁能开发个插件啊

目前被迫用kiwi加bitwarden,floccus,,然后扩展还是没法同步

5 posts - 2 participants

Read full topic

via LINUX DO - 最新话题 (author: louishino)
【求指点】最近家里人介绍了一个小自己三岁的女孩聊天,大概23岁,不知道聊些什么,佬友们求建议

眼看着自己快28了,家里人催的越来越紧,从事于IT行业好几年了好久没有接触过女孩子,现在突然不知道聊些什么比较尴尬,佬们能给一些指导吗?

34 posts - 12 participants

Read full topic

via LINUX DO - 最新话题 (author: 枫枫 北)
费大厨有哪些好吃的

费大厨人好多啊!排队了一个多小时。都说他家的辣椒炒肉非常棒,佬友们有特别推荐的必吃菜吗?

7 posts - 5 participants

Read full topic

via LINUX DO - 最新话题 (author: 吃风筝的人)

Invalid media: image
zzzzzz加载中

cdk.linux.do

LINUX DO CDK

Linux Do 社区 CDK 快速分享平台 - 让分享变得更简单

11 posts - 10 participants

Read full topic

via LINUX DO - 最新话题 (author: YougLin)

Invalid media: image
发现个问题,IDEA 插件里,大家没有发布i18n方面的,一个都没有

多语言的都没有涉及吗,求大佬发布

2 posts - 2 participants

Read full topic

via LINUX DO - 最新话题 (author: richwxd)
我家的宽带突然变极度风险了是怎么回事?

前几天还是极度纯净,为什么今天突然变极度风险了,导致L站把我家的IP给ban了,我只能翻墙来访问L站了,请问有办法更换运营商IP吗?

3 posts - 3 participants

Read full topic

via LINUX DO - 最新话题 (author: icefrog)
是它自己说的‖学到了让不能全屏的程序全屏的方法

好吧我承认我自己说的
但是为什么一定要来呢 :bili_024:

7 posts - 5 participants

Read full topic

via LINUX DO - 最新话题 (author: 我是 林可欣!)

Invalid media:
image
image
image
佬们,图生图反推提示词模型有那些比较靠谱的或者可以在线推理的

我看到有很多好看的AI图但是尝试寻找提示词感觉不对劲,想问一下有没有这方面的佬有经验可以传授一下

1 post - 1 participant

Read full topic

via LINUX DO - 最新话题 (author: ChengX3)
又是抵御了攻击的一次

上一次将近1TB,今晚将近150G

1 post - 1 participant

Read full topic

via LINUX DO - 最新话题 (author: 山河)

Invalid media:
image
image
使用中转模型提供商的数据安全问题

在 xhs 上看见 mufy 和 rubbi 的模型提供商把它们的角色卡打包卖,甚至卖用户聊天记录。

去他们说的中转提供商网页看了以下,甚至有代码数据。

这有点太恐怖了,之前有在担心中转的这些产商暗中可能会倒卖用户数据,可以想象到中转提供商手里的用户数据会很值钱,没想到还有明着卖的。我们站里的中转产商那么多,有什么方式可以阻止这种情况的发生吗?

1 post - 1 participant

Read full topic

via LINUX DO - 最新话题 (author: zjy1412)

Invalid media: image
有人想做个一本正经胡说八道的AI蜜罐吗

我看到了这个帖子,受到了启发,全网最假的Claude来了 - #12,来自 Junxin
感觉挺有趣的,一个ai蜜罐,比如做公益站的那种大规模请求或者说自己搞得服务有人要滥用,就返回一堆废话回去 😂
但是这个大佬搞的是基于模板的,如果能够基于一个真正的非常小的模型或者一些远古NLP来做一些看似真实的句子,那就真正有用了
大佬有什么思路吗?或者想尝试做做吗 =)
懒得做的,可以给点清晰的思路我找时间试试,或者希望这个可以作为你的一个启发去做

37 posts - 6 participants

Read full topic

via LINUX DO - 最新话题 (author: Hendy Turtle)
【慢讯】RIkkaHub图标更新

上周,原生Android LLM 聊天客户端RikkaHub在1.6.8更新中更新了app的图标,变的更加帅气了捏:

在GitHub上的具体更新日志如下(1.6.8版本):

更新APP品牌图标
改进PDF处理稳定性,支持更多纯文本文件上传
优化整体稳定性和性能

Updates:

Updated app brand icon
Improved PDF processing stability and added support for more plain text file uploads
Enhanced overall stability and performance

github.com

GitHub - rikkahub/rikkahub: RikkaHub is a Android APP that supports for...

RikkaHub is a Android APP that supports for multiple LLM providers.

4 posts - 3 participants

Read full topic

via LINUX DO - 最新话题 (author: softwind)

Invalid media:
image
image
请问下GPT4.5 有什么强项吗?

这个东西有什么特别擅长的领域吗?

8 posts - 7 participants

Read full topic

via LINUX DO - 最新话题 (author: 老王)
这才是 AI coding 最强外设

我自己是 Mac pro 和 win 台式双开 AI coding,前后端就拿 Mac 整,要做算法的部分就上带4080的 win 台式。Mac 就很爽,直接语音输入法给 AI 下指令,然后等结果,但 win 之前带耳机,太痛苦了,湖北天气又热,待一会就很难受,只能把耳机的收音放在键盘旁边,很傻。然后去朋友家看到这个游戏外设,啥牌子的都行,我就选了最便宜的,放键盘旁边,语音收集超级清晰,感觉输入法质量都提升了一节,而且放桌上不是很突兀。
我工作的时候不太听歌,所以这个对我来说真的是天选外设哈哈哈哈。

4 posts - 4 participants

Read full topic

via LINUX DO - 最新话题 (author: Erix)

Invalid media: image
[请教]高级架构师 备考经验

之前考过高项了,今年想把高级架构师也考了,还没开始复习呢
打算从今天开始 一个月高强度备考(下班时间)

有没有通过的佬分享一下经验

1. 备考经验
2. 怎么少走弯路

1 post - 1 participant

Read full topic

via LINUX DO - 最新话题 (author: 吕相赫)
LandPPT叕更新了!支持并行生成PPT了!!!

继前贴

【LandPPT】耗时N天开发的开源 AIPPT 生成工具 资源荟萃
【LandPPT】开源的 AIPPT 生成工具 - 实在不想做PPT了,自己动手拼了个小工具 LandPPT 佬友们, 不知道大家平时是不是也和我一样,一听到要做PPT就头大。本来内容构思就够烦了,还得花大半天去网上找模板、调格式、对齐图标……一通操作下来,心力交瘁。 之前试了几个 AI 生成 PPT 的工具,感觉吧,总有点不够理想。有时会出现一本正经地胡说八道,有时页面大小不一,最后还得自己…

首先感谢大家支持,项目已有1k+star了 🤣
github.com

GitHub - sligter/LandPPT: 一个基于LLM的演示文稿生成平台,能够自动将文档内容转换为专业的PPT演示文稿。平台支持多种AI模型...

一个基于LLM的演示文稿生成平台,能够自动将文档内容转换为专业的PPT演示文稿。平台支持多种AI模型,提供丰富的模板和样式选择,让用户能够创建高质量的演示文稿。
截图 (click for more details)
这次更新主要是加了并行生成设置,提高生成速度

1.支持并行生成PPT
2.支持上传多个文件
3.支持自定义配置专项模型,(专项专做,控制成本)包括:

大纲生成模型
创意指导模型
幻灯片生成模型
AI编辑助手模型
演讲稿生成模型
模板生成模型

4.支持以图片导出PPT,同时嵌入演讲稿至备注
5.优化在线分享和演示PPT功能
6.修复一些已知bug

欢迎来 GitHub Issues 吐槽或Pr
spoiler
1 post - 1 participant

Read full topic

via LINUX DO - 最新话题 (author: Alixy)
TG必备的搜索引擎,极搜帮你精准找到,想要的群组、频道、音乐 、视频

👇👇👇点击下方按钮,进行搜索
薅干CF R2对象存储!建立负载均衡的对象存储服务

众所周知,CF大善人给每个绑卡账号提供了10G不限流量的对象存储空间。

也许10GB对某些项目来说太少了,也许不想手动管理多个对象存储桶…

于是我搞了个对象存储负载均衡项目,模拟S3服务端,向上提供统一的S3接口,向下负载到各个不同的存储桶:GitHub - DullJZ/s3-balance: S3对象存储自动负载均衡,向外暴露统一S3接口

10个号就是100G,再大的图床也装得下 🤣

另外,设置了代理模式后,只有上传经过服务器,下载直接302到存储桶的链接,不消耗服务器流量

示例配置:
github.com/DullJZ/s3-balance

config/config.example.yaml
main
# S3 Balance Service Configuration Example
# S3兼容负载均衡服务配置示例

# 服务器配置
server:
host: "0.0.0.0"
port: 8080
read_timeout: 30s
write_timeout: 30s
idle_timeout: 60s

# 数据库配置
database:
# 数据库类型: sqlite, mysql, postgres
type: "sqlite"

# 数据源名称 (DSN)
# SQLite 示例:
dsn: "data/s3-balance.db"

此文件已被截断。 显示原始文件
简单使用docker部署:
services:
s3-balance:
image: dulljz/s3-balance:latest
container_name: s3-balance
ports:
- "8080:8080"
volumes:
- ./config.yaml:/app/config/config.yaml
- ./data:/app/data
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
command: ["/app/s3-balance", "-config", "/app/config/config.yaml"]

15 posts - 7 participants

Read full topic

via LINUX DO - 热门话题 (author: DullJZ)
不是,L站的性压抑指数测试这么火了,给我干到B站首页通知书来了 😲

22 posts - 16 participants

Read full topic

via LINUX DO - 热门话题 (author: Megasoft)

Invalid media: image