V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sofukwird
V2EX  ›  程序员

浏览器爬虫再进化

  •  
  •   sofukwird · 27 天前 · 7986 次点击

    通过 http proxy server 暴露浏览器资源, 基于 webrtc, 是直连, 无需二次中转

    具体请看视频演示: https://youtu.be/czWW5xlfcS8

    当前测试版目标用户为使用 WireGuard 的 linux 用户 核心源码暂未公开, 建议在虚拟机中尝试. xhe-vpn 目前仅支持 linux(windows 端需求反响强烈的话速度肝出 windows 端)

    git 仓库: https://github.com/remoon-net/xhe-webvpn 社区讨论: https://github.com/remoon-net/xhe-webvpn/discussions 问题反馈: https://github.com/remoon-net/xhe-webvpn/issues


    相比上次的版本去除了中心化, 虽然导致了配置更加繁琐, 但独立部署更简单了

    第 1 条附言  ·  27 天前
    标准化了浏览器爬虫, 借助暴露 http proxy server 可以在应用程序中直接访问在浏览器中需要 Cookie 的各种接口

    ----
    youtube 视频短链好像不解析了, 再发一次
    50 条回复    2024-04-07 18:40:06 +08:00
    danbai
        1
    danbai  
       27 天前 via Android
    这个是用来抓包吗
    coinbase
        2
    coinbase  
       27 天前
    cloudflare 防得住吗
    cherryas
        3
    cherryas  
       27 天前   ❤️ 6
    不会爬虫的觉得很酷,会爬虫的觉得有点莫名其妙
    musi
        4
    musi  
       27 天前
    我找个抓包工具不行吗?
    R18
        5
    R18  
       27 天前
    不是很懂,你的这个东西的场景在哪里,原生不是支持通过 browserWSEndpoint 来访问浏览器资源吗
    macaodoll
        6
    macaodoll  
       27 天前 via Android
    自己搭个 HTTP 代理过滤流量?与浏览器插件有何区别?如果说访问 HTTP 请求,这块有现成的东西可以用,而且比你这套方便成熟
    sofukwird
        7
    sofukwird  
    OP
       27 天前   ❤️ 3
    @coinbase 就是用来过 cloudflare 首次验证的
    coinbase
        8
    coinbase  
       27 天前
    @sofukwird 悟了,等会儿试试,能过 cloudflare 就是牛逼
    iyiluo
        9
    iyiluo  
       27 天前
    浏览器爬虫效率很低吧,免去了解密,但是效率是真低啊,只能爬小批量的数据
    godleon
        10
    godleon  
       27 天前
    演示视频里的电脑系统 ui 是什么
    sofukwird
        11
    sofukwird  
    OP
       27 天前
    @godleon Debian 12 - KDE Plasma 5.27.5
    Jesmora
        12
    Jesmora  
       27 天前
    啊这,一个好点的 IP 开个 tun 也能过 cf 啊,再不济 py 库有个过 cf 的啊
    RangerWolf
        13
    RangerWolf  
       27 天前
    @Jesmora py 哪个库能过 CF ?
    LevineChen
        14
    LevineChen  
       27 天前
    没明白, chromium 本身不就提供远程访问的接口吗? 你这个绕了一圈是解决了什么特别的问题吗
    0o0O0o0O0o
        15
    0o0O0o0O0o  
       27 天前 via iPhone
    如果重点是浏览器与 VPN ,https://github.com/tailscale/tailscale/issues/3157 https://twitter.com/bradfitz/status/1451423386777751561 更酷更方便,是更应该研究的方向

    如果重点是过 cloudflare ,实际上你的设计中主要是借用 IP ,有太多方式可以将一台 Linux 电脑的 IP 共享给远程的应用程序使用,同样不需要 root 权限

    如果重点是方便应用程序自动化控制浏览器,容器与 selenium puppeteer playwright 更优雅也有更繁荣的生态,例如 https://github.com/FlareSolverr/FlareSolverr
    jones2000
        16
    jones2000  
       27 天前
    ”进化“ 不应该是什么配置都不用设,自适应最佳配置, 直接就能用。
    james122333
        17
    james122333  
       27 天前 via Android
    firefox 有 marionette
    sofukwird
        18
    sofukwird  
    OP
       27 天前 via Android   ❤️ 1
    @0o0O0o0O0o
    1. 浏览器与 VPN ,是的这很酷,我实现了
    2. 不是通过借 IP 的方式过 cloudflare ,而是接管通过了真人验证的浏览器页面来过
    3. 这个演示的重点是通过 http proxy 和应用程序集成,不依赖 puppeteer (这点蛮难解释,过段时间我把一个项目改造后开源就更清楚这是怎么做的
    ll5270
        19
    ll5270  
       27 天前
    没看明白用途是啥
    trigged
        20
    trigged  
       27 天前
    基于 devtools-protocol ?
    Pythoner666666
        21
    Pythoner666666  
       27 天前
    试试 RPA ,我觉得没有比这个更好用的了。
    flyqie
        22
    flyqie  
       27 天前 via Android   ❤️ 4
    你这项目是给黑灰产用的吧。。

    稍微靠谱点的爬虫项目哪有用这种模式的。。puppeteer 的很多优势你这种架构根本做不了。。

    被黑灰产拿来改改当肉鸡用倒是很合理。。
    c1985382
        23
    c1985382  
       27 天前
    @Pythoner666666 一般 RPA 用啥软件?
    sofukwird
        24
    sofukwird  
    OP
       27 天前 via Android
    @flyqie 你是看懂了的,这种架构对黑灰产确实非常好
    但工具只是工具,是好是坏要看人怎么使用它
    itIsUnbelievable
        25
    itIsUnbelievable  
       27 天前
    @sofukwird 是浏览器端和你本机建立了 wg 通道吗?请求所有网站都可以不用 cookie 吗?
    可以大麦抢票吗
    kuanat
        26
    kuanat  
       27 天前   ❤️ 2
    如果我没理解错的话,这个实现的是挺厉害的,只是应用场景非常受限。

    从功能上说,相当于被注入的页面向外提供 http 代理,该代理会复用浏览器环境,也就继承了相关 cookies 。

    使用这个方案,相比基于 webdriver/cdp 的方式,可以省去提取 cookies 、模拟登录的过程,通过人工在图形界面上操作一次即可。

    比较容易想到的局限在于:

    - 网站有多处或者基于访问频率的人机检测,就需要大量人工介入(甚至难以介入,因为通过代理触发的人机检测并不会显示在浏览器界面上)

    - 目标接口需要额外访问参数,一般反爬措施都会利用 vmp 混淆 js 代码来生成可以被服务器后端验证的动态参数

    如果我说错了还请 OP 指正一下,因为我确实想不到更好的应用场景了。
    stinkytofu
        27
    stinkytofu  
       27 天前
    @kuanat #26 你这么一解释我懂了, 就相当于软件逆向时注入进程了, 通过代理,可以使用网页当前所有的资源和权限。 那这个应用场景也很大啊, 特别是基于当前网页做一些功能增强,逆向啥的, 非常适合搞灰产。
    sml2h3
        28
    sml2h3  
       27 天前   ❤️ 2
    可以考虑走 chrome remote debugging 的方式哈,比如 DrissionPage 这个库~
    Rache1
        29
    Rache1  
       27 天前
    @sml2h3 #28

    好家伙,这个关键字往 Google 一丢,4 个赞助商广告,第 5 个才是 Github

    sml2h3
        30
    sml2h3  
       27 天前   ❤️ 1
    @Rache1 正常呀,因为这个方式好用而且很多人不知道哇,基本上没有指纹,秒过各大防御,API 也是 chrome 原生 API ,至于 DrissionPage 这个 py 库嘛也是一股清流,文档写的真好
    sofukwird
        31
    sofukwird  
    OP
       27 天前 via Android
    @kuanat 是的,就是这样(您说的好清晰呀)。基于访问频率的检测确实难过,目前是降低访问频率避免触发

    初始的应用场景是通过浏览器向其他人提供服务,如 p2p 文件共享,p2p 聊天,p2p 游戏联机
    fork3rt
        32
    fork3rt  
       27 天前   ❤️ 1
    @sml2h3 基本上没有指纹 这个不太理解哎, fonts / canvas / audio 这些常见的指纹 DrissionPage 不还是固定的吗?
    wuzzispacelake
        33
    wuzzispacelake  
       27 天前
    屌的,看来 WebRTC 能实现不少神奇效果
    Rache1
        34
    Rache1  
       27 天前
    @sml2h3 #30 🤩 看了一会儿,暂时没有使用场景,先收藏
    cdlnls
        35
    cdlnls  
       27 天前
    我之前也做过一个类似的浏览器爬虫。。。
    cdlnls
        36
    cdlnls  
       27 天前
    实现方式不一样,使用方式不一样,都是基于浏览器的
    Jirajine
        37
    Jirajine  
       27 天前
    @kuanat #26 这个应该等同于把浏览器里的 fetch 通过 rpc 暴露出来,简单点实现几十行代码都不用。其实意义不大,浏览器本身就可以通过 api 控制,那些 abuse as a service 厂商搞的花活比这恶心多了。
    qweruiop
        38
    qweruiop  
       27 天前
    很叼,一看就是专业的。这个场景肯定是。。。
    rozbo
        39
    rozbo  
       27 天前
    没明白什么优势,如果是浏览器环境,那个也没有处理浏览器指纹呀,直接用 playwright/puppeteer 不就直接完了?
    反正都是需要处理指纹和特征的。
    怎么说呢,小白用不了,大佬没必要用。。。小项目用不上,大项目也用不了。。
    sml2h3
        40
    sml2h3  
       27 天前
    @fork3rt 指的是没有那些特殊的自动化浏览器的特征
    march1993
        41
    march1993  
       27 天前
    这玩意儿和 https://github.com/chromedp/chromedp 有什么优势。。
    march1993
        42
    march1993  
       27 天前
    @march1993 chromedp 可以实现全自动/半自动爬虫,cookie 等行为也可以持久化,配合自己写个 proxy 还可以秒切代理。
    gongquanlin
        43
    gongquanlin  
       27 天前
    肉鸡的浏览器挂上这个脚本暴露出 http proxy server ;
    hacker 通过这个 proxy 直接拿着 cookie 请求,相当于实现了 csrf🤣

    既然都注入了,直接加上 eval 远程执行代码,不更好玩吗
    ignore
        44
    ignore  
       26 天前
    @sml2h3 #28 DrissionPage 真不错
    fork3rt
        46
    fork3rt  
       26 天前
    @sml2h3 了解了 谢谢大佬
    shermie
        47
    shermie  
       26 天前
    @sml2h3 又学到了一个新东西 感谢大佬
    sofukwird
        48
    sofukwird  
    OP
       24 天前
    @0o0O0o0O0o 原有的老项目使用 http proxy 改造成功了

    项目公开: https://github.com/remoon-cn/bbq

    我总结出来的优势有以下:

    http proxy 统一了接口地址, 不需要使用 chromdp 转来转去, 直接通过代理以用户身份访问接口

    程序里也不用引入爬虫相关的库, 使得代码量大大精简
    0o0O0o0O0o
        49
    0o0O0o0O0o  
       24 天前   ❤️ 1
    > 使用这个方案,相比基于 webdriver/cdp 的方式,可以省去提取 cookies 、模拟登录的过程,通过人工在图形界面上操作一次即可

    不这么认为,基于 webdriver/cdp 的方式一样可以让人工在图形界面介入,不要 headless 就可以
    - https://github.com/go-rod/rod/blob/main/lib/examples/launch-managed/main.go#L27
    - https://github.com/go-rod/rod/blob/main/lib/examples/use-rod-like-chrome-extension/main.go

    > 相当于被注入的页面向外提供 http 代理,该代理会复用浏览器环境,也就继承了相关 cookies

    cdp 方式注入一个 js 然后用别的语言暴露 API 不是更方便更强大吗?同样可以复用浏览器环境,同样可以暴露成 http proxy 。选择的库包装得够好就会让“程序里也不用引入爬虫相关的库, 使得代码量大大精简”没有太多说服力。

    所以这个项目在我眼里定位到爬虫相关有点奇怪,但我对 OP 的浏览器中的 VPN ( /t/961694 ) 很感兴趣,我觉得 OP 也可以往 VPN 与浏览器结合的常规应用上考虑
    james122333
        50
    james122333  
       22 天前 via Android
    @wuzzispacelake

    安装完浏览器前几件事情就是关掉 webrtc
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1023 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:53 · PVG 02:53 · LAX 11:53 · JFK 14:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.