吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3041|回复: 46
收起左侧

[其他原创] 可见即可抓,可视即可爬,cefsharp响应拦截

[复制链接]
TZ糖纸 发表于 2023-12-19 14:44
本帖最后由 TZ糖纸 于 2023-12-27 16:19 编辑

先上图

0524cc7448cec9bd7bd6a6d8ae52ec9.png
这里用的语言是C#
使用的谷歌内核
直接在nuget
image.png    
然后安装即可
创建一个winform项目,然后对cefsharp 进行配置
[C#] 纯文本查看 复制代码
public partial class Form1 : Form {
        ChromiumWebBrowser browser;
        public void InitBrowser() {
            CefSettings settings = new CefSettings();

            // Note that if you get an error or a white screen, you may be doing something wrong !
            // Try to load a local file that you're sure that exists and give the complete path instead to test
            // for example, replace page with a direct path instead :
            // String page = @"C:\Users\SDkCarlos\Desktop\afolder\index.html";

            // String page = string.Format(@"{0}\html-resources\html\index.html", Application.StartupPath);
            String url = "http://www.html5test.com";

            // Initialize cef with the provided settings
            Cef.Initialize(settings);
            // Create a browser component
            browser = new ChromiumWebBrowser(url);

            // Add it to the form and fill it to the form window.
            this.Controls.Add(browser);
            browser.Dock = DockStyle.Fill;

            // Allow the use of local resources in the browser
            BrowserSettings browserSettings = new BrowserSettings();
            browserSettings.FileAccessFromFileUrls = CefState.Enabled;
            browserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
            browser.BrowserSettings = browserSettings;
        }

        public Form1() {
            InitializeComponent();
            InitBrowser();
        }
}





然后要进行资源的拦截

创建文件ResourceRequestHandler对IResourceRequestHandler进行实现

修改GetResourceResponseFilter方法
[C#] 纯文本查看 复制代码
public IResponseFilter GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response) {

        var url = new Uri(request.Url);
        if (url.AbsoluteUri.Contains("douyin.com/aweme/v1/web/aweme/post"))
        {
        return DouYinResponseFilter.CreateFilter(request.Identifier.ToString());
    }
        
    return null;
}


修改OnResourceLoadComplete 方法
[C#] 纯文本查看 复制代码
public void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) {

    var url = new Uri(request.Url);

    if (url.AbsoluteUri.Contains("douyin.com/aweme/v1/web/aweme/post"))
    {
        var filter = DouYinResponseFilter.GetFileter(request.Identifier.ToString()) as DouYinResponseFilter;
        if (filter != null)
        {
            var encode = !string.IsNullOrEmpty(response.Charset)
                ? Encoding.GetEncoding(response.Charset)
                : Encoding.UTF8;
            using (var read = new StreamReader(filter.GetStream(), encode))
            {
                var text = read.ReadToEnd();
                Debug.WriteLine(text);//捕获的响应 
            }
        }
    }


   

}


DouYinResponseFilter 具体实现
[C#] 纯文本查看 复制代码
  internal class DouYinResponseFilter : IResponseFilter
  {
      private MemoryStream Stream;

      public DouYinResponseFilter()
      {
          Stream = new MemoryStream();
      }
      public Stream GetStream()
      {
          Stream.Seek(0, SeekOrigin.Begin);
          return Stream;
      }
      private static Dictionary<string, IResponseFilter> _dictionary = new Dictionary<string, IResponseFilter>();

      public static IResponseFilter CreateFilter(string id)
      {
          var filter = new DouYinResponseFilter();
          _dictionary[id] = filter;
          return filter;
      }

      public static IResponseFilter GetFileter(string id)
      {
          if (_dictionary.ContainsKey(id))
          {
              var filter = _dictionary[id];
              _dictionary.Remove(id);
              return filter;
          }
          return null;
      }
      public void Dispose()
      {
          
      }

      public FilterStatus Filter(Stream dataIn, out long dataInRead, Stream dataOut, out long dataOutWritten)
      {
          try
          {
              if (dataIn == null || dataIn.Length == 0)
              {
                  dataInRead = 0;
                  dataOutWritten = 0;

                  return FilterStatus.Done;
              }

              dataInRead = dataIn.Length;
              dataOutWritten = Math.Min(dataInRead, dataOut.Length);

              dataIn.CopyTo(dataOut);
              dataIn.Seek(0, SeekOrigin.Begin);
              byte[] bs = new byte[dataIn.Length];
              dataIn.Read(bs, 0, bs.Length);


              Stream.Write(bs, 0, bs.Length);
              dataInRead = dataIn.Length;
              dataOutWritten = dataIn.Length;

              return FilterStatus.NeedMoreData;
          }
          catch (Exception ex)
          {
              dataInRead = dataIn.Length;
              dataOutWritten = dataIn.Length;

              return FilterStatus.Done;
          }
      }

      public bool InitFilter()
      {
          return true;
      }
  }



拿到我们在OnResourceLoadComplete  捕获的text(响应数据)
长这样
image.png
后边我们就可以拿着json数据进行处理
提取出来作品描述和作品链接
[C#] 纯文本查看 复制代码
var item = JObject.Parse(data);
var aweme_list = item["aweme_list"];
foreach (var item1 in aweme_list)
{
    var desc = item1["desc"];//作品标题
    if (desc.ToString() == "")
    {
        desc= item1["aweme_id"];//没有作品标题使用作品的id 
    }
    var playaddr = item1["video"]["play_addr"]["url_list"][0];//作品链接
}


然后就可以拿到这样的数据
image.png
然后自己写一个下载器
image.png   
进行下载即可
image.png
然后就能看到下载的作品啦


使用教程
1703124707778.png

image.png


image.png

默认的下载位置在D:\XDownload

下载地址https://tangzhizzz.lanzouq.com/inYT21izum1i

免费评分

参与人数 7吾爱币 +14 热心值 +6 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
LiAmu369 + 1 + 1 热心回复!
AutumnTiger + 1 + 1 热心回复!
6565668 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
jacky520510 + 2 + 1 我很赞同!
Angelee999 + 1 + 1 用心讨论,共获提升!
zrf1980 + 1 + 1 用心讨论,共获提升!求成品

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

flybird2007 发表于 2023-12-27 18:14

运行 xbrowser.exe 出错
问题签名:
  问题事件名称:        CLR20r3
  问题签名 01:        XBrowser.exe
  问题签名 02:        1.0.0.0
  问题签名 03:        db51a119
  问题签名 04:        CefSharp.WinForms
  问题签名 05:        120.1.110.0
  问题签名 06:        badc7076
  问题签名 07:        1
  问题签名 08:        0
  问题签名 09:        System.IO.FileLoadException
  OS 版本:        6.1.7601.2.1.0.256.48
文西思密达 发表于 2023-12-19 14:53
 楼主| TZ糖纸 发表于 2023-12-19 14:55
文西思密达 发表于 2023-12-19 14:53
这个很强大啊 ,谢谢分享,学习一下源码

源码自己写,主要的都贴出来了
逐雅斋 发表于 2023-12-19 14:57
感谢分享,思路学习了,成品能否分享!
 楼主| TZ糖纸 发表于 2023-12-19 14:58
逐雅斋 发表于 2023-12-19 14:57
感谢分享,思路学习了,成品能否分享!

不白嫖哈
zqyyr8013 发表于 2023-12-19 15:02
66666666666666666
小木槿 发表于 2023-12-19 15:03
这么厉害
ss258b 发表于 2023-12-19 15:08
PC端IDM,手机端1DM,汇报完毕。
慕浟佳〃井少年 发表于 2023-12-19 15:09
上个成品就更方便了。
 楼主| TZ糖纸 发表于 2023-12-19 15:10
ss258b 发表于 2023-12-19 15:08
PC端IDM,手机端1DM,汇报完毕。

批量呢??
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表