WorkBuddy写的这个神脚本快把我折腾疯了!
目录一、拾枝杂谈二、WorkBuddy 写的脚本好奇心很重三、爬虫脚本“如何判断当前是否需要登录”四、为什么加了 DOM 检测就解决了Δ总结一、拾枝杂谈WorkBuddy 的干活能力没有让我失望。我之前让 WorkBuddy 实现一个比较复杂的需求就是分别收集7个平台的文章数据然后写入到飞书表格中方便我进行数据统计。这是一个典型的“多平台内容矩阵——数据采集自动化”项目我和 WorkBuddy 经过多轮探讨和尝试最终敲定了“Playwright 模拟用户登录态和点击行为精简 profile 持久化登陆数据”的方式。但是之所以说它是一个“复杂”的需求我认为原因主要有三点第一每个平台的反爬策略和风控方式都不一样比如 小红书 和 搜狐号对登录状态更加敏感刚开始可能你本地的 Google Chrome 窗口 以及 Playwright 启动的窗口都可以同时登录但是一段时间后你就会发现这两个平台同时只允许登录一个窗口。这个窗口登录就会强制另一个窗口的登出。第二每个平台的后台统计数据不一样比如在 CSDN 中“展现量”是一个很重要的统计指标而在 微信公众号 里面则没有“展现量”的说法反而有“在看”、“转载”这样的特有字段。不同的统计字段意味着爬虫脚本映射字段以及飞书表格的格式都会受到影响。第三飞书表格的字段和格式不统一。我让 WorkBuddy 做的这个需求并不是我一时起意的决定某种程度上说是“被逼无奈”。因为我之前是手动统计的但是当我仅仅统计了两篇文章后我就放弃了“古法统计”。太tm费事儿了我不仅需要手动去7个平台的后台一篇篇文章的查看还需要一篇篇对应到飞书表格。我的飞书表格的格式是这样设置的每个平台对应一个主表每个平台下面的每一篇文章都要单独创建一个新的子表“子结点”进行单独统计。所以当文章越写越多的时候这个工作量可想而知了。但是问题就在于我之前没想到 WorkBuddy 能干成这个事儿所以我自己手动统计的时候采取了“省事儿”办法就是直接自己先写了几个比较常见的统计字段比如“展现量”“阅读量”“点赞量”等等但是这么统计的话每个平台都千篇一律了而且也不符合实际。因此用 WorkBuddy 写入飞书的时候还必须考虑如何解决多平台字段不一致的问题。此外表格单元格的格式也得我来定还得让 WorkBuddy 听懂我的需求比如表头的单元格怎么展现日期格式选哪种。综上这三个主要问题让“WorkBuddy搭建多平台数据矩阵”这件事变得复杂复杂不是因为“困难”而是因为“繁琐”。二、WorkBuddy 写的脚本好奇心很重之前我已经通过 WorkBuddy成功收集了自己在CSDN微信公众号和知乎上的文章的数据并且也成功写入到了飞书表格。于是我开始进行第四个平台“今日头条”的统计。因为 chrome-auto-profile 是复制过来的精简 profile所以每个平台第一次收集数据的时候都需要我先登录一下然后 playwright 再将登陆数据持久化到本地。但是在头条这个平台上出了点幺蛾子。当我正常通过手机验证码登录时发现还没等我来得及输入手机号页面自己就开始划来划去的不知道在找什么然后它还会随便点开一篇首页的臭新闻装模做样的看看然后再关闭窗口。完事儿后还更我来一句“探索结果显示脚本始终停留在今日头条公共首页没有登录进去”。尝试了两三次后都是这样于是乎我忍无可忍告诉 WorkBuddy“你先让脚本不要乱点乱划拉先等我登陆成功再继续操作”。WorkBuddy 听懂了我的话可能它也觉得有点不好意思先是和气地给我解释了一番“之前的脚本逻辑是 打开页面 - 立刻检测登陆状态 - 没检测到登录弹窗就直接往下点。现在的逻辑改了打开页面后如果发现没登陆就先乖乖等待不动任何按钮。其实这里面有一个爬虫脚本“判断页面状态”的细节。非常值得说道。三、爬虫脚本“如何判断当前是否需要登录”当时的场景大概是这样的我打开今日头条首页后页面弹出了一个登录窗口但是脚本没看到它以为“没检测到登陆弹窗”于是它就继续往下执行导航逻辑包括到处点按钮、划页面、甚至点进一篇新闻又关掉直到最后它发现还是没到“创作者后台”于是就报错了。这是因为脚本最初使用的是一种很原始很粗糙的方式检测方式大概长这样page_textawaitpage.content()# 或者 page.inner_text()if登录inpage_text:returnTrue# 认为是登录页这个逻辑很简单就是把整个页面的文字部分拿过来检查比对其中有没有“登录”两个字。但是在头条首页的HTML中到处都可能有“登录”这俩字比如顶部导航栏、页面的底部链接、JavaScript代码里面的字符、甚至是隐藏的div里面。所以这就导致了脚本会陷入一种“二极管”的状态要么是 false positive即只是发现了某处文本中有“登录”二字就误判为“已经弹出了登录框”要么是 false negative即弹窗出来了但是脚本扫描文本时没匹配到正确的关键词就以为没弹误判为“已经登录了”。但是之后 WorkBuddy 给脚本改了逻辑改为了DOM元素检测就是把浏览器解析为一棵DOM树每个HTML标签都是树上的一个节点。DOM元素检测就是不只看文字而是直接查找页面上有没有某个具体的元素节点并且这个节点是可见的。具体来说头条登录弹窗外层的 div 类名大概长这样divclassttp-modal-wrapperstyledisplay:block;divclasslogin-modaldiv扫码登录/divdiv手机登录/div.../div/div所以检测代码就要变成这样const modalsdocument.querySelectorAll(.ttp-modal-wrapper);for(const m of modals){if(m.offsetParent!null)returntrue;//弹窗可见 → 需要登录}其中offsetParent ! null是判断一个元素是否真的显示在页面上不是 display: none 或藏在某个隐藏父元素里。四、为什么加了 DOM 检测就解决了因为脚本的检测逻辑变了从“文字游戏” 变成了 “逮捕特定UI组件”。.ttp-modal-wrapper这个类名是头条的登陆弹窗特有的只有登陆弹窗真正显示出来时这个元素才可见。所以当弹窗没出来的时候找不到这个可见元素脚本会认为已经登陆或者无需登录便不会乱点而当弹窗出来的时候可以找到这个可见元素这时候脚本会乖乖等待我扫码登陆登陆成功后再继续。相关代码是这样的const modalsdocument.querySelectorAll(.ttp-modal-wrapper, .ttp-login-modal, [class*login-modal]);可以说更改后的脚本实际上是同时检查了三种情况1类名完全等于 ttp-modal-wrapper 的元素2类名完全等于 ttp-login-modal 的元素3class 属性里包含 login-modal 这几个字的元素。最后的“[class*“login-modal”]”这玩意儿我们管它叫做属性包含选择器意思是 只要元素的 class 属性里面出现了 “login-modal” 这个子串它就匹配。这样的话就提高了检测的容错率。Δ总结OK以上就是本篇文章的全部内容了感谢阅读。这篇文章主要和大家分享了一个 up 在通过 WorkBuddy 操作头条时遇到的一个有趣的事情脚本不听使唤左滑右划的经过排查才发现时之前写的脚本偷懒了用了原始检测方式后面改成 DOM检测就好多了。关注迅高AI实验室学习AI不迷路

相关新闻

内容重发布实验:提升数字营销效果的系统方法

内容重发布实验:提升数字营销效果的系统方法

1. 重发布实验概述 重发布实验(Republishing Experiment)是内容运营和数字营销领域的一种测试方法,主要用于评估内容在不同平台、不同时间或不同形式下的表现差异。作为一名从业十年的数字营销专家,我发现很多团队在内容分发策略上…

2026/8/4 7:19:57 阅读更多 →
OpenClaw智能体框架下提示词注入的纵深防御体系构建

OpenClaw智能体框架下提示词注入的纵深防御体系构建

1. 项目概述:理解OpenClaw与提示词注入的攻防本质最近在折腾OpenClaw,一个挺有意思的AI智能体框架,相信不少朋友也在部署和尝试用它来搞自动化。但玩得越深,一个老生常谈却又至关重要的问题就越绕不开:提示词注入。这玩…

2026/8/4 7:19:57 阅读更多 →
Unity网络通信中Curl error 60的根源分析与安全解决方案

Unity网络通信中Curl error 60的根源分析与安全解决方案

1. 项目概述:当Unity的WWW/UnityWebRequest撞上Curl error 60 如果你在用Unity开发需要网络通信的功能,比如从服务器拉取配置、下载资源包,或者调用某个Web API,那么你大概率用过 WWW 类或者更现代的 UnityWebRequest 。一切顺…

2026/8/4 7:19:57 阅读更多 →

最新新闻

Kettle表输入多线程并行抽取:原理、配置与性能优化实战

Kettle表输入多线程并行抽取:原理、配置与性能优化实战

1. 项目概述:当Kettle表输入遇上“多线程”如果你用过Kettle(现在叫Pentaho Data Integration,但老伙计们还是习惯叫它Kettle)做数据抽取,尤其是从数据库表里拉数据,那你肯定对“表输入”这个步骤熟得不能再…

2026/8/4 8:08:21 阅读更多 →
Excel数据转置:用FILTER+TRANSPOSE实现动态列转行

Excel数据转置:用FILTER+TRANSPOSE实现动态列转行

1. 项目概述:从“竖着看”到“横着排”的数据重组需求在日常的数据处理工作中,我们经常会遇到一种让人头疼的表格布局:数据像排队一样,一列一列地向下延伸。比如,一份产品在不同季度的销售数据,可能被记录为…

2026/8/4 8:08:21 阅读更多 →
基于Hadoop的南宁美食大数据分析与可视化实践

基于Hadoop的南宁美食大数据分析与可视化实践

1. 项目背景与核心价值 南宁作为广西首府,其饮食文化融合了壮族特色与东南亚风味,形成了独特的美食地图。传统的美食推荐往往依赖主观评价或有限样本,难以反映真实消费趋势。这个项目通过大数据技术抓取、清洗和分析南宁市公开的美食数据&…

2026/8/4 8:08:21 阅读更多 →
AI编程副驾驶:基于项目上下文的代码操作与自动化实践

AI编程副驾驶:基于项目上下文的代码操作与自动化实践

如果你是一名开发者,最近在关注 AI 编程工具,可能会发现一个现象:GitHub 上那些“一键生成代码”、“全自动开发”的明星项目,热度来得快,去得也快。很多项目在演示视频里无所不能,但当你真正 clone 下来&a…

2026/8/4 8:08:21 阅读更多 →
AI自动化实战:用豆包生成微信二维码,实现智能渠道管理

AI自动化实战:用豆包生成微信二维码,实现智能渠道管理

最近,一个“用豆包做微信二维码”的项目在开发者圈子里小火了一把。乍一看标题,你可能会觉得有点“标题党”——豆包不是字节跳动的AI对话助手吗?微信二维码不是用来加好友的吗?这俩怎么能扯上关系? 但如果你点进去&a…

2026/8/4 8:08:21 阅读更多 →
UE4/UE5 Pak文件分析器:资源管理、哈希校验与自动化实战

UE4/UE5 Pak文件分析器:资源管理、哈希校验与自动化实战

1. 项目概述:为什么我们需要一个Pak文件分析器? 如果你在UE4/UE5项目开发中摸爬滚打过一段时间,尤其是涉及到内容打包、热更新或者资源安全,那么“Pak文件”这个词对你来说绝对不陌生。它本质上就是虚幻引擎用来打包游戏资源&…

2026/8/4 8:07:21 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/3 5:19:38 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →