����λ�ã���ҳ > �����̳� > �̳� > ʹ��C#��ȡ����������ҳ����������Ƶ/ͼ��(��Դ�뼰������������)

ʹ��C#��ȡ����������ҳ����������Ƶ/ͼ��(��Դ�뼰������������)

��Դ������������|��ʱ�䣺2024-08-26 10:15:38 |���Ķ���58��|�� ��ǩ�� �� ���� C ��ҳ ���� ���� ��Ƶ �� |����������

�������һЩ���ֵ����ߣ���Ʒ������������ѧϰ�о���Ŀ�ģ�������һ����ô��ȡ���ݡ�����������һЩ���湤�ߣ������󲿷ֶ�ʧЧ�ˣ����߲���Դ�������Լ���д��һ��С���ߡ��ȿ�һ�³ɹ��� ����ֻ��Ҫ��д����uid�Լ���ҳ�������Cookie������ʵ���Զ����أ�����Ŀ¼�ڳ����Ŀ¼�µ�Download�ļ��С�

�������һЩ���ֵ����ߣ���Ʒ������������ѧϰ�о���Ŀ�ģ�������һ����ô��ȡ���ݡ�����������һЩ���湤�ߣ������󲿷ֶ�ʧЧ�ˣ����߲���Դ�������Լ���д��һ��С���ߡ��ȿ�һ�³ɹ���
ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)
ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)
����ֻ��Ҫ��д����uid�Լ���ҳ�������Cookie������ʵ���Զ����أ�����Ŀ¼�ڳ����Ŀ¼�µ�Download�ļ��С�
���ڿ��ֵķ�رȽ�����������Ҳ����Ӧ�Դ�ʩ��������Ҫ�û���������е���ʾ���֣�����ճ������������������json���浽�����ļ���ʹ�������ṩ�Ľ�������json��ť�������ؼ��ɡ�������ص�json�ļ��̻ܶ���û�����ݣ���Ҫ�ڿ��ֵ�����һ��ҳ��ˢ��һ�£�Ҳ���Ǹ��߿��ַ�أ����������������û�л����˵���Ϊ��

����˵һ�¹�������App��˼·��

1. ������ҳ��׼��

  1. �� https://live.kuaishou.com/ ���ڶ���������Ҫ��ȡ�������dzƣ�����������ҳ��Ҳ���Դ�App�˷������ߵ���ҳ���ӣ�ճ��������������ҳ������ɺ󣬵�ַ���ĵ�ַһ��Ҫ�����ƣ� https://live.kuaishou.com/profile/xxxxxx�� �����xxxxxx�������ߵ�user id�������ס�����Ƴ�����������õ���

  2. ��F12��������Ŀ����߹��ߣ���֮ǰ��˵�������߹����Ǻö������о�����ر���һ��Ҫ�ú�ѧϰ����

  3. ѡ�񿪷��߹��߶����ġ����硱����ȫ��������ͼ��ʾ���������б����ҵ�user id�������������ͻ��������ı�ͷ�������и�Cookie����Ҫ��ס�����Ƴ��������û�еĻ����ǵ�ˢ��ҳ�档
    ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)

  4. ���б�������Կ����ܶ�����������Ҫ�����ҵ���ҳ��չʾ��Ʒ�б����������󣬼�public��ͷ�ģ�����ֱ�������Ͻ�����public�����ɹ��˾��󲿷��޹���������������Ӧ����������������Ʒ������json��Ӧ��
    ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)

������һ��������±�ǩҳ��򿪣��򿪺��ַ������ʾ��ɵ�����������ַ�������ַ��Ҫ��ס���������õ����Ǹ�countĬ����12����20�������õ�ʱ��ֱ��������9999���ɡ�
ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)
ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)

2. Postman��������ģ�����󣬲�����C#�������

  1. ��װpostman interceptor����������װ��ַ https://chromewebstore.google.com/detail/postman-interceptor/aicmkgpgakddgnaphhhpliifpcfhicfo ���ò�˵��������һ�����������俪���߹��ߣ������Ͽ��Ը㶨�������е����������ˡ�

  2. ��Postman��������½ǵ�Start Proxy��
    ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)
    �������غ����»ص���ҳ��������ҳ��ˢ��һ��ҳ�棬��ҳ�������ɺ󣬵��ֹͣ���ء������б���һֱ���࣬��Ϊ�������ص��Ե���������������ʱPostman�������ͻ����ص�һ�������ͬ�����ҵ�public���󣬻��������Ͻ�����public�����ɹ��˳���������Ҫ�ġ�
    ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)
    ��������������
    ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)
    ����Postman���һ���µĴ��ڣ�����������������ӵ����в����Լ���ͷ��Ϣ��
    ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)
    ���Postman������Ĵ��빤�߼�������������Ҫ�Ĵ��롣�����ѡ��C#��python��js��curl�ȵȡ�
    ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)

3. ʹ��WPFд�����Լ������߼�

  1. �½�WPF���̣�Ϊ�˽���ÿ�����������˿�Դ��WPF UI��֮ǰ�ù�HandyControl��MicaWPF����Щ���Dz�����UI�ؼ��⡣
    ����ʹ���˿�Դ��Downloader������ʹ����RestSharp������Jsonʹ��NewtonsoftJson�������Ƽ�һ����ѵ�ͼ���FlatIcon��
    �������£�
����鿴����
http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:local="clr-namespace:KuaishouDownloader"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
  Title="MainWindow"
  Width="900"
  Height="760"
  ExtendsContentIntoTitleBar="True"
  WindowBackdropType="Mica"
  WindowCornerPreference="Default"
  WindowStartupLocation="CenterScreen"
  mc:Ignorable="d">
  
    
      
      
    
    
    
    
    
      
        
      
      
      
        
        https://www.kuaishou.com/profile/xxxxxx/��ͷ�ģ�����xxxxxx����" />
      
      
        
        
      
      
        
        
      
      
      
        
          
          
        
      
    
    
      
      
    
    
    
      
    
  


  1. ��̨�߼�û��ʹ��MVVM������ͼ���㡣
����鿴����
using KuaishouDownloader.Models;
using Newtonsoft.Json;
using RestSharp;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows;
using Wpf.Ui;
using Wpf.Ui.Controls;

namespace KuaishouDownloader
{
    /// 
    /// Interaction logic for MainWindow.xaml
    /// 
    public partial class MainWindow
    {
        string downloadFolder = AppContext.BaseDirectory;
        SnackbarService? snackbarService = null;

        public MainWindow()
        {
            InitializeComponent();
            this.Loaded += MainWindow_Loaded;
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            snackbarService = new SnackbarService();
            snackbarService.SetSnackbarPresenter(snackbarPresenter);

            if (File.Exists("AppConfig.json"))
            {
                var model = JsonConvert.DeserializeObject(File.ReadAllText("AppConfig.json"));
                if (model != null)
                {
                    tbUid.Text = model.Uid;
                    tbCookie.Text = model.Cookie;
                }
            }
        }

        private void Theme_Click(object sender, RoutedEventArgs e)
        {
            if (Wpf.Ui.Appearance.ApplicationThemeManager.GetAppTheme() == Wpf.Ui.Appearance.ApplicationTheme.Light)
            {
                themeButton.Icon = new SymbolIcon(SymbolRegular.WeatherSunny48);
                Wpf.Ui.Appearance.ApplicationThemeManager.Apply(Wpf.Ui.Appearance.ApplicationTheme.Dark);
            }
            else
            {
                themeButton.Icon = new SymbolIcon(SymbolRegular.WeatherMoon48);
                Wpf.Ui.Appearance.ApplicationThemeManager.Apply(Wpf.Ui.Appearance.ApplicationTheme.Light);
            }
        }

        private async void Download_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                btnDownload.IsEnabled = false;
                btnParseJson.IsEnabled = false;

                if (string.IsNullOrEmpty(tbUid.Text) || string.IsNullOrEmpty(tbCookie.Text))
                {
                    snackbarService?.Show("��ʾ", $"������uid�Լ�cookie", ControlAppearance.Caution, null, TimeSpan.FromSeconds(3));
                    return;
                }

                var json = JsonConvert.SerializeObject(new AppConfig() { Uid = tbUid.Text, Cookie = tbCookie.Text }, Formatting.Indented);
                File.WriteAllText("AppConfig.json", json);

                var options = new RestClientOptions("https://live.kuaishou.com")
                {
                    Timeout = TimeSpan.FromSeconds(15),
                    UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
                };
                var client = new RestClient(options);
                var request = new RestRequest($"/live_api/profile/public?count=9999&pcursor=&principalId={tbUid.Text}&hasMore=true", Method.Get);
                request.AddHeader("host", "live.kuaishou.com");
                request.AddHeader("connection", "keep-alive");
                request.AddHeader("cache-control", "max-age=0");
                request.AddHeader("sec-ch-ua", "\"Not)A;Brand\";v=\"99\", \"Google Chrome\";v=\"127\", \"Chromium\";v=\"127\"");
                request.AddHeader("sec-ch-ua-mobile", "?0");
                request.AddHeader("sec-ch-ua-platform", "\"Windows\"");
                request.AddHeader("upgrade-insecure-requests", "1");
                request.AddHeader("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7");
                request.AddHeader("sec-fetch-site", "none");
                request.AddHeader("sec-fetch-mode", "navigate");
                request.AddHeader("sec-fetch-user", "?1");
                request.AddHeader("sec-fetch-dest", "document");
                request.AddHeader("accept-encoding", "gzip, deflate, br, zstd");
                request.AddHeader("accept-language", "zh,en;q=0.9,zh-CN;q=0.8");
                request.AddHeader("cookie", tbCookie.Text);
                request.AddHeader("x-postman-captr", "9467712");
                RestResponse response = await client.ExecuteAsync(request);
                Debug.WriteLine(response.Content);

                var model = JsonConvert.DeserializeObject(response.Content!);
                if (model == null || model?.Data?.List == null || model?.Data?.List?.Count == 0)
                {
                    snackbarService?.Show("��ʾ", $"��ȡʧ�ܣ����ܴ����˿��ֵķ�ػ��ƣ����һ��ʱ�����ԡ�", ControlAppearance.Danger, null, TimeSpan.FromSeconds(3));
                    return;
                }

                await Download(model!);
            }
            finally
            {
                btnDownload.IsEnabled = true;
                btnParseJson.IsEnabled = true;
            }
        }

        private async void ParseJson_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                btnDownload.IsEnabled = false;
                btnParseJson.IsEnabled = false;

                var dialog = new Microsoft.Win32.OpenFileDialog();
                dialog.Filter = "Json�ļ�(.Json)|*.json";
                bool? result = dialog.ShowDialog();
                if (result == false)
                {
                    return;
                }
                var model = JsonConvert.DeserializeObject(File.ReadAllText(dialog.FileName)!);
                if (model == null || model?.Data?.List == null || model?.Data?.List?.Count == 0)
                {
                    snackbarService?.Show("��ʾ", $"������ȷ��json", ControlAppearance.Caution, null, TimeSpan.FromSeconds(3));
                    return;
                }

                await Download(model!);
            }
            finally
            {
                btnDownload.IsEnabled = true;
                btnParseJson.IsEnabled = true;
            }
        }

        private async Task Download(KuaishouModel model)
        {
            progress.Value = 0;
            progress.Minimum = 0;
            progress.Maximum = (double)model?.Data?.List?.Count!;
            snackbarService?.Show("��ʾ", $"������{model?.Data?.List?.Count!}����Ʒ����ʼ����", ControlAppearance.Success, null, TimeSpan.FromSeconds(5));

            imgHeader.Source = new System.Windows.Media.Imaging.BitmapImage(new Uri(model?.Data?.List?[0]?.Author?.Avatar!));
            tbNickName.Text = model?.Data?.List?[0]?.Author?.Name;

            string pattern = @"\d{4}/\d{2}/\d{2}/\d{2}";

            for (int i = 0; i < model?.Data?.List!.Count; i++)
            {
                DateTime dateTime = DateTime.Now;
                string fileNamePrefix = "";
                var item = model?.Data?.List[i]!;
                Match match = Regex.Match(item.Poster!, pattern);
                if (match.Success)
                {
                    dateTime = new DateTime(int.Parse(match.Value.Split("/")[0]), int.Parse(match.Value.Split("/")[1]),
                        int.Parse(match.Value.Split("/")[2]), int.Parse(match.Value.Split("/")[3]), 0, 0);
                    if (cbAddDate.IsChecked == true)
                        fileNamePrefix = match.Value.Split("/")[0] + "-" + match.Value.Split("/")[1] + "-" + match.Value.Split("/")[2]
                            + " " + match.Value.Split("/")[3] + "-00-00 ";
                }
                downloadFolder = Path.Combine(AppContext.BaseDirectory, "Download", item?.Author?.Name! + "(" + item?.Author?.Id! + ")");
                Directory.CreateDirectory(downloadFolder);

                switch (item?.WorkType)
                {
                    case "single":
                    case "vertical":
                    case "multiple":
                        {
                            await DownLoadHelper.Download(item?.ImgUrls!, dateTime, downloadFolder, fileNamePrefix);
                        }
                        break;
                    case "video":
                        {
                            await DownLoadHelper.Download(new List() { item?.PlayUrl! }, dateTime, downloadFolder, fileNamePrefix);
                        }
                        break;
                }

                progress.Value = i + 1;
                tbProgress.Text = $"{i + 1} / {model?.Data?.List!.Count}";
                Random random = new Random();
                if (cbLongInterval.IsChecked == true)
                    await Task.Delay(random.Next(5000, 10000));
                else
                    await Task.Delay(random.Next(1000, 5000));
            }

            snackbarService?.Show("��ʾ", $"������ɣ�������{model?.Data?.List!.Count}����Ʒ", ControlAppearance.Success, null, TimeSpan.FromDays(1));
        }

        private void CopyUrl(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            if (string.IsNullOrEmpty(tbUid.Text))
            {
                snackbarService?.Show("��ʾ", "������uid�Լ�cookie", ControlAppearance.Caution, null, TimeSpan.FromSeconds(3));
                return;
            }
            Clipboard.SetText($"https://live.kuaishou.com/live_api/profile/public?count=9999&pcursor=&principalId={tbUid.Text}&hasMore=true");

            snackbarService?.Show("��ʾ", "������ɣ���ճ�����������", ControlAppearance.Success, null, TimeSpan.FromSeconds(3));
        }

        private void Info_Click(object sender, RoutedEventArgs e)
        {
            flyout.IsOpen = true;
        }
    }
}
  1. �����࣬�������ļ��󣬽��ļ�����־�޸�Ϊ������־�����������Լ����ݷ�����
����鿴����
public static async Task Download(List urls, DateTime dateTime, string downloadFolder, string fileNamePrefix)
{
    string file = string.Empty;
    try
    {
        var downloader = new DownloadService();
        foreach (var url in urls)
        {
            Uri uri = new Uri(url);
            file = downloadFolder + "\\" + fileNamePrefix + Path.GetFileName(uri.LocalPath);
            if (!File.Exists(file))
                await downloader.DownloadFileTaskAsync(url, file);

            //�޸��ļ�����ʱ��Ϊ������ʱ��
            File.SetCreationTime(file, dateTime);
            File.SetLastWriteTime(file, dateTime);
            File.SetLastAccessTime(file, dateTime);
        }
    }
    catch
    {
        Debug.WriteLine(file);
        Trace.Listeners.Add(new TextWriterTraceListener(downloadFolder + "\\_FailedFiles.txt", "myListener"));
        Trace.TraceInformation(file);
        Trace.Flush();
    }
}
  1. Դ�����
    ������������ϴ���Github https://github.com/hupo376787/KuaishouDownloader ��ϲ���ĵ�һ��Starлл��

4. ����ʹ��

�� https://github.com/hupo376787/KuaishouDownloader/releases/tag/1.0 ���������zip�ļ�����ѹ���󣬾Ϳ�����ͷ����ʹ���ˡ�
ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)
ʹÓÃC#ÅÀÈ¡¿ìÊÖ×÷ÕßÖ÷Ò³£¬²¢ÏÂÔØÊÓÆµ/ͼ¼¯(¸½Ô´Âë¼°Èí¼þÏÂÔØÁ´½Ó)

С���Ƽ��Ķ�

�������������Ľ�Ϊ������Ϣ����������������ͬ���޹۵��֤ʵ��������

ÅÀ 1.0
�� 1.0
���ͣ���������������Ӫ״̬����ʽ��Ӫ�������ԣ����� ����

��Ϸ����

��Ϸ���

��Ϸ��Ƶ

��Ϸ����

��Ϸ�

��������SYPLAYER�����ҿ�����һ��dz�������ˮī�������ϵ����Ϸ����Ϸ����������鵽��Υ����������ð
Á´½Ó 1.0
���� 1.0
���ͣ���������������Ӫ״̬����ʽ��Ӫ�������ԣ� Ӣ�� ����

��Ϸ����

��Ϸ���

��Ϸ��Ƶ

��Ϸ����

��Ϸ�

�����ӡ�����Ϸ��KishorBerde������һ��Ȥζ��������������Ϸ����Ϸ���淨�dz��򵥣������Ҫ����ͬ��ɫ

�����Ƶ����

����

ͬ������

����

ɨ��ά�����������ֻ��汾��

ɨ��ά����������΢�Ź��ںţ�

��վ�������������������ϴ��������ַ���İ�Ȩ���뷢�ʼ�[email protected]

��ICP��2022002427��-10 �湫��������43070202000427��© 2013~2025 haote.com ������