首页
/ 在streetmerchant项目中实现Chromium无头模式下持久化Cookie设置的技术方案

在streetmerchant项目中实现Chromium无头模式下持久化Cookie设置的技术方案

2025-06-07 01:26:31作者:凌朦慧Richard

背景介绍

streetmerchant是一个基于Node.js和Puppeteer的电商商品库存监控工具,它使用Chromium浏览器自动化技术来抓取各大电商网站的商品信息。在实际使用过程中,用户发现某些电商网站(如Newegg)会通过Cookie识别爬虫行为并返回403错误或验证码。

问题分析

经过用户测试发现,当Chromium浏览器设置为"阻止所有Cookie"时,可以有效避免被目标网站识别为爬虫。这是因为:

  1. 阻止Cookie后网站无法建立用户会话跟踪
  2. 每次访问都被视为首次访问,降低了触发反爬机制的概率
  3. 避免了基于Cookie的行为分析

当前streetmerchant的主要限制在于:

  • 无法在无头模式下持久化Cookie设置
  • 每次启动都会重置浏览器设置
  • 现有隐身模式(INCOGNITO)仅阻止第三方Cookie,无法完全禁用所有Cookie

技术解决方案

方案一:使用持久化用户数据目录

通过Puppeteer启动参数配置持久化的用户数据目录,可以保存浏览器设置:

args.push('--user-data-dir=/path/to/profile');
args.push('--disable-dev-profile');

这种方法:

  1. 创建固定位置的用户配置文件
  2. 禁用开发人员配置文件(避免设置重置)
  3. 允许手动配置浏览器设置并保持

方案二:通过Puppeteer API设置Cookie策略

虽然Puppeteer没有直接设置"阻止所有Cookie"的API,但可以通过以下方式间接实现:

  1. 启动时设置内容设置规则:
await client.send('Network.setCookieBlockingEnabled', {
  enabled: true
});
  1. 或者通过Protocol直接修改内容设置:
await client.send('Browser.setPermission', {
  origin: '',
  setting: 'block'
});

方案三:拦截和清除网络请求中的Cookie

可以在页面加载前清除所有Cookie:

await page.setRequestInterception(true);
page.on('request', request => {
  const headers = request.headers();
  delete headers['cookie'];
  request.continue({headers});
});

实现建议

对于streetmerchant项目,推荐采用以下改进方案:

  1. 扩展环境变量配置,增加:

    • USER_DATA_DIR:自定义用户数据目录路径
    • BLOCK_ALL_COOKIES:完全阻止Cookie的开关
  2. 修改浏览器启动逻辑,根据配置:

    • 设置持久化用户目录
    • 应用Cookie阻止策略
    • 确保无头模式兼容性
  3. 增加启动时的Cookie清理功能:

    const client = await page.target().createCDPSession();
    await client.send('Network.clearBrowserCookies');
    await client.send('Network.clearBrowserCache');
    

注意事项

  1. 不同网站对无Cookie访问的反应不同,需测试调整
  2. 持久化用户目录会增加磁盘使用
  3. 完全阻止Cookie可能影响某些网站功能
  4. 需要平衡反爬规避与合法爬取边界

总结

通过合理配置Chromium的用户数据目录和Cookie策略,可以在streetmerchant项目中实现更稳定的爬取体验。这些技术方案不仅适用于Newegg,也可扩展到其他具有类似反爬机制的电商网站。开发者可以根据实际需求选择最适合的实现方式,或组合多种技术来达到最佳效果。

登录后查看全文
热门项目推荐

项目优选

收起
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
852
505
kernelkernel
deepin linux kernel
C
21
5
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
240
283
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
UAVSUAVS
智能无人机路径规划仿真系统是一个具有操作控制精细、平台整合性强、全方向模型建立与应用自动化特点的软件。它以A、B两国在C区开展无人机战争为背景,该系统的核心功能是通过仿真平台规划无人机航线,并进行验证输出,数据可导入真实无人机,使其按照规定路线精准抵达战场任一位置,支持多人多设备编队联合行动。
JavaScript
78
55
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
vue-devuivue-devui
基于全新 DevUI Design 设计体系的 Vue3 组件库,面向研发工具的开源前端解决方案。
TypeScript
614
74
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
175
260
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
331
1.07 K