zoukankan      html  css  js  c++  java
  • C# webBrowser.DocumentCompleted 解决之道

    最近学习devexpress,视频都在http://tv.devexpress.com,一个一个下载又嫌麻烦,于是费劲千辛万苦写了个DEMO来半自动下载,相信还可以再完善。

    遇到的一个最困难的问题是:如何判断C#的webBrowser的是否文档加载完成,参考了很多资料,配合某些特定的状态字段判断,完美解决了如何解析AJAX加载的文档内容。

    上图效果图:1、输入分类地址,2、点击下载,自动下载分类下的视频。

    C#代码

    using System;
    using System.IO;
    using System.Windows.Forms;
    using Yejq;
    
    namespace devexpresstv
    {
        public partial class Form1 : Form
        {
    
            public Form1()
            {
                InitializeComponent();
            }
    
            String[] movies = new string[100];
            int i = 0;
    
            private void button_downNow_Click(object sender, EventArgs e)
            {
                // 添加事件响应函数 
                webBrowser1.DocumentCompleted +=
                    new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted_downNow);
                webBrowser1.Url = new Uri(textBox_url.Text);
            }
            private void webBrowser_DocumentCompleted_downNow(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                movies = new string[100];
                i = 0;
                int pages = 0;
                label_log.Text = "开始解析……";
                HtmlElementCollection collection = webBrowser1.Document.Links;
                label_log.Text = "开始解析…………";
                foreach (HtmlElement elem in collection) //遍历所有元素
                {
                    string href = elem.GetAttribute("href");
                    if (href.EndsWith(".movie") && !href.StartsWith("mailto:") &&
                        !href.Contains("ClinicalTrialASPNET") && !href.Contains("DevelopMultiChannelApps") &&
                        !href.Contains("DevToolsROIForrester") && !href.Contains("SchedulingSnap"))
                    {
                        movies[i] = href;
                        i++;
                    }
                    if (href.StartsWith("javascript:ChangePage"))
                    {
                        pages++;
                    }
                }
    
                label_log.Text = "视频数:" + i + ",页数:" + pages;
                string fileContent = "";
                for (int j = 0; j < i; j++)
                {
                    fileContent += movies[j] + System.Environment.NewLine;
                }
    
                if (i > 0)
                {
                    StreamWriter writer = new StreamWriter("1.txt");
                    writer.Write(fileContent + "pages:" + pages);
                    writer.Flush();
                    writer.Close();
    
                    for (int x = i - 1; x >= 0; x--)
                    {
                        label_log.Text = "正在下载:" + movies[x];
                        webBrowser1.DocumentCompleted +=
                            new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(
                                webBrowser_DocumentCompleted_downMovice);
                        webBrowser1.Url = new Uri(movies[x]);
                    }
                }
            }
            
            private int downTimes = 1;
            string link = "";
            private void webBrowser_DocumentCompleted_downMovice(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                label_log.Text = "开始解析……";
                string title = webBrowser1.DocumentTitle;
                label_log.Text = "标题:" + title;
    
                HtmlElementCollection collection = webBrowser1.Document.Links;
                foreach (HtmlElement elem in collection) //遍历所有元素
                {
                    string href = elem.GetAttribute("href");
                    if (href.EndsWith(".mp4"))
                    {
                        link = href;
                        break;
                    }
                }
                if (!string.IsNullOrEmpty(link))
                {
                    title = title.Substring(0, title.IndexOf(" - DevExpress Channel Movie"));
                    label_log.Text = "下载地址:" + link;
                    HttpDownLoad downLoad = new HttpDownLoad();
                    string filePath = @"G:\temp\" + downTimes + " " + title;
                    if (!Directory.Exists(filePath))
                    {
                        Directory.CreateDirectory(filePath);
                    }
                    string path = filePath + "\\" + link.Substring(link.LastIndexOf("/") + 1);
                    label_log.Text = "下载到:" + path;
                    downLoad.httpDownFile(link, path, progressBar1, label_progress);
                    downTimes++;
                }
            }
    
        }
    }

     循环下载的时候还是有问题 ~~~ 真麻烦

     

  • 相关阅读:
    设置navigationbar透明度时的坑
    NSOprationQueue 与 GCD 的区别与选用
    CALayer及其子类
    ARC基本原理
    drawRect:和layoutSubview的区别
    NSDictionary 和NSArray 排序(sort)
    iOS常用动画
    项目托管到Github上
    解析歌词
    计算字符串的长度值
  • 原文地址:https://www.cnblogs.com/yejq/p/2785479.html
Copyright © 2011-2022 走看看