Agent Skills实战:基于GKE与Genkit构建可复用技能调用链路
2026/10/7 16:06:54
我以前也以为,只要页面是 JS 渲染的,上 Playwright 或 Selenium,问题基本就解决了。
后来在一个真实项目里,我用同一个目标站点做了三组对比实验,结论非常清楚:
浏览器自动化解决的是页面执行问题,而不是反爬识别问题。
下面是完整过程。
这其实是一条很自然的推理链:
在功能层面,这个逻辑没问题。
但在反爬层面,它恰恰是最容易出错的地方。
网站真正判断的从来不是:
你是不是 Chrome
你能不能跑 JavaScript
而是:
你是不是一个可信、正常、长期存在的访问者。
实验目标很明确:
抓取一个不需要登录,但存在反爬的动态页面。
为了避免干扰,我严格控制了变量:
只对比三种常见方案:
这是最朴素的一种方式,很多人反而会低估它。
importrequests proxy_host="proxy.16yun.cn"proxy_port="8000"proxy_user="你的用户名"proxy_pass="你的密码"proxies={"http":f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}","https":f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",}headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}resp=requests.get("https://example.com/data",headers=headers,proxies=proxies,timeout=10)print(resp.status_code)实验结果出乎意料地稳定:
前提只有一个:
这个站点的数据本身能通过接口或半静态方式拿到。
这是很多人眼中的“终极方案”。
fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:browser=p.chromium.launch(headless=True)page=browser.new_page()page.goto("https://example.com/data")print(page.title())browser.close()结果却非常典型:
页面确实能打开,但访问身份并不被信任。
这也是很多爬虫项目“看起来能跑,但跑不久”的根本原因。
fromplaywright.sync_apiimportsync_playwright proxy_config={"server":"http://proxy.16yun.cn:8000","username":"你的用户名","password":"你的密码"}withsync_playwright()asp:browser=p.chromium.launch(headless=True,proxy=proxy_config)page=browser.new_page(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64)")page.goto("https://example.com/data")print(page.title())browser.close()这一次结果非常稳定:
| 方案 | 成功率 | 被封风险 | 成本 |
|---|---|---|---|
| requests + 代理 IP | 高 | 低 | 低 |
| 浏览器无代理 | 低 | 高 | 高 |
| 浏览器 + 代理 IP | 最高 | 最低 | 中 |
这次实验让我彻底改掉了一个认知误区:
反爬防的不是 JavaScript,防的是异常身份。
浏览器自动化只能解决这些问题:
但解决不了这些问题:
适合用的场景:
不适合滥用的场景:
浏览器自动化不是万能钥匙。
它只负责执行页面,而真正决定爬虫生死的,是你的网络身份。
如果你只升级工具,却不设计网络层,
那迟早会发现一个现实问题:
跑得越像人,反而死得越快。