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++;
                }
            }
    
        }
    }

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

     

  • 相关阅读:
    Codeforces 877 C. Slava and tanks
    Codeforces 877 D. Olya and Energy Drinks
    2017 10.25 NOIP模拟赛
    2017 国庆湖南 Day1
    UVA 12113 Overlapping Squares
    学大伟业 国庆Day2
    51nod 1629 B君的圆锥
    51nod 1381 硬币游戏
    [JSOI2010]满汉全席
    学大伟业 2017 国庆 Day1
  • 原文地址:https://www.cnblogs.com/yejq/p/2785479.html
Copyright © 2011-2022 走看看