V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
sofukwird
V2EX  ›  程序员

浏览器爬虫再进化

  •  
  •   sofukwird · 2024-04-02 08:17:48 +08:00 · 9946 次点击
    这是一个创建于 365 天前的主题,其中的信息可能已经有所发展或是发生改变。

    通过 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 条附言  ·  2024-04-02 08:53:55 +08:00
    标准化了浏览器爬虫, 借助暴露 http proxy server 可以在应用程序中直接访问在浏览器中需要 Cookie 的各种接口

    ----
    youtube 视频短链好像不解析了, 再发一次
    50 条回复    2024-04-07 18:40:06 +08:00
    danbai
        1
    danbai  
       2024-04-02 08:24:08 +08:00 via Android
    这个是用来抓包吗
    coinbase
        2
    coinbase  
       2024-04-02 08:31:00 +08:00
    cloudflare 防得住吗
    cherryas
        3
    cherryas  
       2024-04-02 08:34:41 +08:00   ❤️ 6
    不会爬虫的觉得很酷,会爬虫的觉得有点莫名其妙
    musi
        4
    musi  
       2024-04-02 08:39:44 +08:00
    我找个抓包工具不行吗?
    R18
        5
    R18  
       2024-04-02 08:45:38 +08:00
    不是很懂,你的这个东西的场景在哪里,原生不是支持通过 browserWSEndpoint 来访问浏览器资源吗
    macaodoll
        6
    macaodoll  
       2024-04-02 08:58:35 +08:00 via Android
    自己搭个 HTTP 代理过滤流量?与浏览器插件有何区别?如果说访问 HTTP 请求,这块有现成的东西可以用,而且比你这套方便成熟
    sofukwird
        7
    sofukwird  
    OP
       2024-04-02 09:04:46 +08:00   ❤️ 3
    @coinbase 就是用来过 cloudflare 首次验证的
    coinbase
        8
    coinbase  
       2024-04-02 09:07:14 +08:00
    @sofukwird 悟了,等会儿试试,能过 cloudflare 就是牛逼
    iyiluo
        9
    iyiluo  
       2024-04-02 09:07:38 +08:00
    浏览器爬虫效率很低吧,免去了解密,但是效率是真低啊,只能爬小批量的数据
    godleon
        10
    godleon  
       2024-04-02 09:13:27 +08:00
    演示视频里的电脑系统 ui 是什么
    sofukwird
        11
    sofukwird  
    OP
       2024-04-02 09:27:10 +08:00
    @godleon Debian 12 - KDE Plasma 5.27.5
    Jesmora
        12
    Jesmora  
       2024-04-02 09:28:48 +08:00
    啊这,一个好点的 IP 开个 tun 也能过 cf 啊,再不济 py 库有个过 cf 的啊
    RangerWolf
        13
    RangerWolf  
       2024-04-02 09:53:08 +08:00
    @Jesmora py 哪个库能过 CF ?
    LevineChen
        14
    LevineChen  
       2024-04-02 09:54:13 +08:00
    没明白, chromium 本身不就提供远程访问的接口吗? 你这个绕了一圈是解决了什么特别的问题吗
    0o0O0o0O0o
        15
    0o0O0o0O0o  
       2024-04-02 10:00:01 +08:00 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  
       2024-04-02 10:00:57 +08:00
    ”进化“ 不应该是什么配置都不用设,自适应最佳配置, 直接就能用。
    james122333
        17
    james122333  
       2024-04-02 10:03:41 +08:00 via Android
    firefox 有 marionette
    sofukwird
        18
    sofukwird  
    OP
       2024-04-02 10:10:50 +08:00 via Android   ❤️ 1
    @0o0O0o0O0o
    1. 浏览器与 VPN ,是的这很酷,我实现了
    2. 不是通过借 IP 的方式过 cloudflare ,而是接管通过了真人验证的浏览器页面来过
    3. 这个演示的重点是通过 http proxy 和应用程序集成,不依赖 puppeteer (这点蛮难解释,过段时间我把一个项目改造后开源就更清楚这是怎么做的
    ll5270
        19
    ll5270  
       2024-04-02 10:56:01 +08:00
    没看明白用途是啥
    trigged
        20
    trigged  
       2024-04-02 11:04:58 +08:00
    基于 devtools-protocol ?
    Pythoner666666
        21
    Pythoner666666  
       364 天前
    试试 RPA ,我觉得没有比这个更好用的了。
    flyqie
        22
    flyqie  
       364 天前 via Android   ❤️ 4
    你这项目是给黑灰产用的吧。。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    程序里也不用引入爬虫相关的库, 使得代码量大大精简
    0o0O0o0O0o
        49
    0o0O0o0O0o  
       361 天前   ❤️ 2
    > 使用这个方案,相比基于 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  
       359 天前 via Android
    @wuzzispacelake

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