现在前端反爬虫,还有办法检测出来是不是无头浏览器吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeeReamond
V2EX    问与答

现在前端反爬虫,还有办法检测出来是不是无头浏览器吗?

  •  
  •   LeeReamond 2021-04-05 02:47:46 +08:00 3627 次点击
    这是一个创建于 1708 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,前两天看论坛里一个老哥说了几种无头跟正常用户不一样的特征,今天搜了一些信息仔细了解了一下,感觉似乎随着 chromedriver 升级,原先检测区别的特征全都消失了,现在的 headless 跟普通用户几乎是完全一样的。唯一区别可能是 navigater 里 webdriver = ture,但是这点也可以通过简单的方式修改。

    现在还有靠谱的反爬虫方式吗?还是只能靠接入验证码一类的服务。像淘宝那样的,正常用户用着用着都会卡,才是现在唯一靠谱的反爬虫方式?

    20 条回复    2025-06-26 09:15:10 +08:00
    jim9606
        1
    jim9606  
       2021-04-05 06:06:45 +08:00
    前端特征检测永远有被骗的可能,只能提高爬虫成本。
    有一种方法是引入 HashCash PoW 机制,增大爬虫计算成本,不过还是需要一个坚实的后端做验证。
    LeeReamond
        2
    LeeReamond  
    OP
       2021-04-05 06:44:10 +08:00
    @jim9606 简单查了一下 pow,感觉是个挺有意思的机制。不过似乎不太好实现,一个简单的方法是后端找一个随机数,生成 hash,告诉前端 hash 的结果和随机数大概的生成范围,让前端用穷举法算出原始数值。这种实现有两个问题,一个是前端算力不同,不同用户访问同一个网页可能有的人 0.5 秒就算完了,有的人 5 秒钟也算不完,比较影响体验。

    再一个是这种没法在单次连接里验证,需要发起两次连接。后端需要处理多连接状态同步的问题,其实也提高了后端成本,感觉不是很划算。不过应该是确实能有效提高爬虫成本,是一个有意思的思路
    feiniu
        3
    feiniu  
       2021-04-05 08:22:32 +08:00 via Android
    我感觉,阿里的云盾,是真的牛批
    renmu123
        4
    renmu123  
       2021-04-05 08:28:23 +08:00 via Android
    之前看到过一种手动是检查鼠标轨迹,不过需要把这个判断逻辑好好隐藏起来,不然被发现后还是有可能被破解
    LeeReamond
        5
    LeeReamond  
    OP
       2021-04-05 08:55:52 +08:00
    @renmu123 不太容易实现,打开 A 页面的同时需要根据鉴定是否为爬虫,决定是否返回正确信息,此时 js 脚本刚刚加载。想实现只能保留 B 页面执行的结果,并让这个结果不随页面刷新改动,可能整个网站都要用 ajax 异步加载的方式才能做,成本太高了。
    BeautifulSoap
        6
    BeautifulSoap  
       2021-04-05 10:25:45 +08:00
    无脑简单点那就加个 recaptcha v3
    Dreax
        7
    Dreax  
       2021-04-05 11:06:47 +08:00
    CF 最近刚好上线了 [Super Bot Fight Mode]( https://blog.cloudflare.com/super-bot-fight-mode/)
    3dwelcome
        8
    3dwelcome  
       2021-04-05 13:44:25 +08:00 via Android   2
    以前千里码有道题,就是页面反爬,把页面关键数据做成图片返回,或者文字由 css 自定义字体构建,至少能避免数据被直接利用。
    我写爬虫,就是正常开个隐藏浏览器,用 GoogleDevP 协议里 websocket 来控制鼠标,操作 DOM,对前端真是无感知。就连 webdriver 都检测不出来。
    tsutomu
        9
    tsutomu  
       2021-04-05 14:40:44 +08:00 via Android
    前端有些操作在无头浏览器中无法直接运行,比如截图录制视频之类的,特征应该都很轻松进行模仿。
    LeeReamond
        10
    LeeReamond  
    OP
       2021-04-05 20:34:43 +08:00
    @3dwelcome 隐藏浏览器怎么理解,与无头有何不同?百度没什么有效信息
    LeeReamond
        11
    LeeReamond  
    OP
       2021-04-05 20:35:15 +08:00
    @Dreax 看起来很吊,然而都是国内用户,他这个没意义啊
    3dwelcome
        12
    3dwelcome  
       2021-04-05 23:15:31 +08:00 via Android
    @LeeReamond 就是写个外挂人为操作窗口句柄,把浏览器给隐藏掉,和普通用户没明显差别,前端没办法检测。
    而无头就是启动 chrome 时,传个 headless 参数,或者用 webdriver,多少会留下一点痕迹。
    TongNianShanHe
        13
    TongNianShanHe  
       2021-04-06 01:01:21 +08:00 via Android
    @3dwelcome 之前在研究这个的时候留意到 cdp 协议,就想着有什么办法检测本地连接,目前看来不好检测呀
    LeeReamond
        14
    LeeReamond  
    OP
       2021-04-06 02:43:00 +08:00
    @TongNianShanHe 确实,大部分时候作为开发者都是不希望自己数据被爬取的,写博客之类的当然随便,商业应用通常贵在数据
    lusi1990
        15
    lusi1990  
       2021-04-06 08:01:24 +08:00 via iPhone
    搜下浏览器指纹,这个更靠谱。
    要隐藏浏览器的无头模式,对客户端来说只要一句话。
    TongNianShanHe
        16
    TongNianShanHe  
       2021-04-06 08:59:22 +08:00 via Android
    @tsutomu 不啊,我用 puppeteer 可以自动授权摄像头和录音,况且这么做涉及用户的隐私,不太可行
    TongNianShanHe
        17
    TongNianShanHe  
       2021-04-06 09:29:39 +08:00 via Android
    @LeeReamond 其实反爬虫做到一定程度就不需要再做了(边际效应)
    tsutomu
        18
    tsutomu  
       2021-04-06 21:06:00 +08:00 via Android
    @TongNianShanHe 录制浏览器内容,不是视频。。。
    TongNianShanHe
        19
    TongNianShanHe  
       2021-04-06 21:15:55 +08:00 via Android
    @tsutomu 那就不太清楚了,下次折腾的时候试一试
    ashen114
        20
    ashen114  
       165 天前
    @3dwelcome 除了用 GoogleDevP ,还有其他方案来操控 headless 的页面么,请教一下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3504 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 52ms UTC 04:26 PVG 12:26 LAX 20:26 JFK 23:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86