那些年,我被奇葩需求逼成全栈的血泪史

胡思宇
2025-12-25 02:42
阅读 888

去年秋招刚上岸那会儿,我还天真地以为“前端”就是切页面、调样式、写点交互逻辑。大专毕业、自学出身、简历上除了几个 GitHub 项目和一段实习经历外几乎空白——能进杭州这家中型互联网公司已经谢天谢地。入职第一天,leader 递给我一杯瑞幸,笑着说:“小张啊,咱们这儿讲究‘综合能力’,你前端强,但别把自己框死了。”

我当时还傻乎乎地点头,心想:不就是偶尔帮后端联调接口嘛,能有多难?

结果现实狠狠扇了我一耳光。


爬虫?不是后端的事吗!

事情发生在今年3月。产品经理在周会上抛出一个“轻量级需求”:为了做竞品分析,需要每天抓取某电商平台的商品价格、评论数、促销信息,然后可视化展示。他说得云淡风轻:“就几百个链接,前端跑个脚本定时抓一下就行,不用动后端。”

我当场瞳孔地震。

爬虫?这不该是 Python 老哥的活儿吗?
况且人家网站有反爬机制,登录态、验证码、动态加载……更别说还有 IP 封禁风险。我一个连 Node.js 都没正经用过的前端,凭啥干这个?

但转念一想:拒绝?简历刚投出去就被拒了三次,好不容易有个 offer,这时候说“不会”,怕是要被贴上“能力单一”的标签。再说了,leader 嘴里那个“综合能力”,大概就是指这种时候能顶上吧。

于是我硬着头皮接了。


边听《晴天》边写 Puppeteer,结果被 Cloudflare 拦在门外

我选了 Puppeteer——毕竟前端熟悉浏览器环境,无头 Chrome 听起来很“原生”。代码写得还挺顺:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  await page.goto('https://competitor.com/product/123');
  const price = await page.$eval('.price', el => el.textContent);
  console.log(price);
  await browser.close();
})();

本地跑得飞起。可一部署到服务器,立马 403。Cloudflare 的盾牌图标赫然在目:“Access denied. You are being rate limited.

我这才意识到:人家根本不认你这个“浏览器”,因为你的请求没有真实的用户行为轨迹——鼠标移动、滚动、点击延迟统统没有。更致命的是,我的 VPS IP 被标记为数据中心 IP,直接进了黑名单。

那几天晚上,我一边戴着耳机听周杰伦(写代码提神神器),一边疯狂 Google “绕过 Cloudflare 爬虫”。试了各种方案:

  • stealth-plugin 隐藏 Puppeteer 特征
  • 模拟人类操作:随机等待、滚动页面、移动鼠标
  • 用代理池轮换 IP
  • 甚至尝试用 Playwright 替代 Puppet

全!部!失!败!

最崩溃的是周五晚上 9 点,测试催着要数据,而我的脚本还在返回“人机验证请滑动拼图”。那一刻我真的想砸键盘——大专出身本来就底气不足,现在连个爬虫都搞不定,是不是真不适合干这行?


转折:从“对抗”到“合作”

绝望之际,我厚着脸皮去找了后端同事老李。他听完直摇头:“兄弟,你这是拿前端思维硬刚后端问题啊。”

他一句话点醒我:为什么非要自己爬?

原来,公司内部其实有个合规的数据采购渠道——第三方 API 提供商已经拿到了授权,可以合法获取这些数据。只是之前没人提,产品经理也懒得走流程。

于是我们改了方案:

  1. 前端不再直接爬,而是调用内部封装好的数据服务接口
  2. 我负责写一个定时任务(用 Node.js + cron),每天凌晨拉取数据存入 MongoDB
  3. 前端只做可视化展示,用 ECharts 渲染趋势图

技术栈瞬间清爽了,而且完全规避了法律和封 IP 风险。

上线那天,leader 拍我肩膀:“干得不错,有全局观了。”
我心里苦笑:哪是什么全局观,分明是被奇葩需求逼出来的求生欲。


简历上的“综合能力”,原来是这么炼成的

这件事之后,我重新审视了自己的简历。以前写的都是“精通 Vue3”、“熟悉 Webpack”,看起来花里胡哨,但缺乏“解决问题”的上下文。

现在我改成这样:

  • 主导竞品数据监控系统开发,整合第三方 API 与内部数据服务,实现日级自动化采集与可视化,支撑产品决策
  • 从零搭建 Node.js 定时任务体系,解决原始爬虫方案的合规与稳定性问题,降低运维成本 70%

你看,“爬虫”两个字根本没出现,但背后的技术深度和业务理解全在里面了。

这也让我明白:所谓“综合能力”,不是你会多少框架,而是你能不能在模糊甚至错误的需求中,找到最优解。


杭州互联网圈的“潜规则”:前端早就不只是切图仔了

在杭州,尤其是阿里、网易辐射圈,中小厂对前端的要求早就变了味。你不仅要会 React/Vue,还得懂:

  • 基础的 Node.js 服务开发(比如写个 mock server)
  • 性能监控(Lighthouse + Sentry)
  • 甚至 CI/CD 流程(Jenkins/GitLab Runner)

有一次团建,隔壁组的哥们吐槽:“我们 PM 说,既然你们能写 Chrome 插件,那做个内部工具把 Excel 自动转成 JSON 应该不难吧?”
全场苦笑——这哪是需求,这是把前端当瑞士军刀使啊!

但反过来想,这种“混乱”恰恰是成长的机会。大专出身没有名校光环,简历上就必须有“故事”。而每一个奇葩需求,都是你讲好故事的素材。


给同样自学出身的朋友几点建议

  1. 别死磕“职责边界”
    初期别太在意“这不是前端该干的”。先解决问题,再谈分工。等你有了话语权,自然能推动流程规范化。

  2. 把“救火”变成“基建”
    比如那次爬虫事故后,我顺手写了个内部文档《前端数据采集避坑指南》,还封装了一个通用的数据拉取 SDK。现在新同事接手类似需求,直接 copy-paste,团队效率提升明显。

  3. 用输出倒逼输入
    我开始写技术博客,不是为了装逼,而是逼自己把零散经验系统化。写完才发现:原来我这一年真的学了不少东西。

  4. 保护自己的情绪带宽
    遇到离谱需求,先深呼吸,别立刻反驳。问清楚背景:“这个数据最终给谁看?用来做什么决策?” 往往能发现需求背后的真问题。


写在最后

现在我依然会在写代码时放《七里香》,依然会在 PR 被打回时骂一句“这破需求谁提的”,但心态稳多了。

大专学历曾让我自卑,但现在我觉得:正是没有被“科班框架”束缚,才更愿意跨界折腾。分布式系统?我啃过 Raft 论文;Docker?自己搭过 Jenkins;甚至最近还在研究怎么用 WebAssembly 加速前端计算——这些都不是工作要求,但它们让我的简历有了厚度。

那些奇葩需求,像一块块磨刀石。刚开始觉得疼,后来才发现,自己早已锋利。

所以,如果你也在被离谱需求折磨——别慌,这说明你正在被需要。
坚持下去,总有一天,你会笑着把这些故事写进博客,标题就叫:

“感谢当年那个让我写爬虫的产品经理”

评论 0

最热最新
暂无评论
胡思宇Lv.1
0
影响力
0
文章
0
粉丝