C#打開瀏覽器。關閉瀏覽器


-----------------------------------------

  /// <summary>
    /// 調用前端的靜態頁面的類 (調用ie的內核)
    /// </summary>
    public class FinalHtml
    {
        private String htmlString;
        private String url;
        private String htmlTitle;
        // 獲得html title標簽的內容
        public String HtmlTitle
        {
            get
            {
                if (success == false) return null;
                return htmlTitle;
            }
        }
        private List<string> linkList;
        private List<string> imageList;
        private bool success; // 是否成功運行
        ///
        /// 獲得網頁所有鏈接的鏈表, 一定要在Run之后進行
        ///
        public List<string> LinkList
        {
            get
            {
                if (success == false) return null;
                return linkList;
            }
        }
        ///
        /// 獲得所有圖像的標簽, 一定要在Run之后進行
        ///
        public List<string> ImageList
        {
            get
            {
                if (success == false) return null;
                return imageList;
            }
        }
        ///
        /// 獲得執行完js之后的網頁body 部分的html代碼
        ///
        public String HtmlBody
        {
            get
            {
                if (success == false) return null;
                return htmlString;
            }
        }
        public FinalHtml()
        {
            linkList = new List<string>();
            imageList = new List<string>();
            htmlString = "";
            success = false;
        }
        ///
        /// 檢查並補充設置url
        ///
        ///
        private void CheckURL(String url)
        {
            if (!url.StartsWith("http://") && !url.StartsWith("https://") && !url.StartsWith("file:///"))
                url = "http://" + url;
            this.url = url;
        }
        ///
        /// 加載指定文件
        ///
        /// 文件URL
        /// 超時時限
        /// 是否成功運行,沒有超時
        public bool Run(String url, int timeOut = 10000)
        {
            CheckURL(url);
            Thread newThread = new Thread(NewThread);
            newThread.SetApartmentState(ApartmentState.STA);/// 為了創建WebBrowser類的實例 必須將對應線程設為單線程單元
            newThread.Start();
            //監督子線程運行時間
            while (newThread.IsAlive && timeOut > 0)
            {
                Thread.Sleep(100);
                timeOut -= 100;
            }
            // 超時處理
            if (newThread.IsAlive)
            {
                if (success) return true;
                newThread.Abort();
                return false;
            }
            return true;
        }

        private void NewThread()
        {
            new FinalHtmlPerThread(this);
            Application.Run();// 循環等待webBrowser 加載完畢 調用 DocumentCompleted 事件
        }
        ///
        ///  用於處理一個url的核心類
        ///
        class FinalHtmlPerThread : IDisposable
        {
            FinalHtml master;
            WebBrowser web;

            public FinalHtmlPerThread(FinalHtml master)
            {
                this.master = master;
                DealWithUrl();
            }
            private void DealWithUrl()
            {
                String url = master.url;
                web = new WebBrowser();
                bool success = false;
                try
                {
                    web.Url = new Uri(url);
                    web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted); // 對事件加委托
                    success = true;
                }
                finally
                {
                    if (!success)
                        Dispose();
                }

            }
            public void Dispose()
            {
                if (!web.IsDisposed)
                    web.Dispose();
            }
            private void ToList(HtmlElementCollection collection, List<string> list)
            {
                System.Collections.IEnumerator it = collection.GetEnumerator();
                while (it.MoveNext())
                {
                    HtmlElement htmlElement = (HtmlElement)it.Current;
                    list.Add(htmlElement.OuterHtml);
                }
            }
            private void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                //微軟官方回答一個網頁有多個Ifram元素就有可能觸發多次此事件, 並且提到了
                // vb 和 C++ 的解決方案, C# 沒有提及,經本人嘗試,發現下面的語句可以判斷成功
                // 如果未完全加載 web.ReadyState = WebBrowserReadyState.Interactive
                if (web.ReadyState != WebBrowserReadyState.Complete) return;
                master.htmlTitle = web.Document.Title;
                ToList(web.Document.Links, master.linkList);
                ToList(web.Document.Images, master.imageList);
                master.htmlString = web.Document.Body.InnerHtml;
                master.success = true;
                Thread.CurrentThread.Abort();
            }
        }
    }

-----------調用---------------

            //用IE執行運行相應的連接
            StringBuilder sb = new StringBuilder();
            try
            {

                FinalHtml html = new FinalHtml();

      //打開的連接。
                if (html.Run("http://192.168.0.145:8080/webPhone/test_canvas/1.html"))
                {

                }

            }
            catch (Exception ex)
            {

                throw;
            }

------------------------------------

     var d = Process.Start(@"D:\安裝軟件\Mozilla Firefox\firefox.exe", "http://192.168.0.145:8080/webPhone/test_canvas/1.html");//本地的火狐瀏覽器



---------------------------------------關閉進程----
                foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcessesByName("firefox"))
                {
                    p.Kill();
                }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM