如何强制Facebook打开移动端版本?Puppeteer跳转报错解惑
Puppeteer访问m.facebook.com失效的原因分析
UA不是唯一的检测维度
Facebook判断设备类型不止看User Agent字符串,还会校验浏览器的硬件特征(比如设备内存、CPU核心数)、屏幕参数(分辨率、像素比)、触摸事件支持情况这些。你只改了UA,但Puppeteer默认的无头浏览器还是桌面端的配置,这些矛盾的特征会被Facebook识别,要么重定向到桌面版,要么直接拦截请求返回net::ERR_ABORTED。反爬机制识别了无头浏览器
Facebook的反爬系统能检测到Puppeteer无头模式的特有标记,比如navigator.webdriver属性为true,或者请求头里的Sec-Ch-Ua字段带有无头浏览器的标识。就算换了UA,这些底层特征藏不住,直接触发请求终止。m.facebook.com的重定向逻辑更严格
m.facebook.com的重定向策略比mbasic版本严苛得多,它会综合多个维度验证是否是真实移动设备,只要有一项不符合就强制跳转桌面版。而mbasic.facebook.com只做基础的UA匹配,检测逻辑简单,所以能绕过。请求头不完整导致异常
移动端请求除了UA,还有其他专属的请求头字段,比如Accept的取值、Sec-Fetch-Mode这些,和桌面版差异很大。你只修改了UA,其他请求头还是桌面端默认值,Facebook会判定请求不合法,直接拒绝。
内容的提问来源于stack exchange,提问作者Ooker
相关产品推荐
相关产品推荐

