V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

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

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

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

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

    19 条回复    2021-04-06 21:15:55 +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 那就不太清楚了,下次折腾的时候试一试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5421 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 03:35 · PVG 11:35 · LAX 20:35 · JFK 23:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.