Thứ Năm, 26 tháng 12, 2019

Winforms Webbrowser

Winforms Webbrowser


iên hệ cho công việc, yêu cầu dự án: raimund.popp@microsoft-programmierer.de

rang mã C # này hiển thị cách viết robot dưới dạng một ứng dụng trong Windows Forms (viết tắt: Winforms), duyệt các trang internet và thu thập dữ liệu từ các trang internet.
Về nguyên tắc, dữ liệu có thể được thu thập theo hai cách,

1.)    Với điều khiển WebBrowser
Trình duyệt được điều khiển từ xa và thông tin được lấy từ trình duyệt dưới dạng điều khiển

2.)   Sử dụng WebRequest và WebResponse
Chỉ các địa chỉ web được truy vấn và văn bản HTML của trang web được đánh giá.

Tại sao Winforms?
Là một nền tảng, tôi sử dụng Windows Forms với Microsoft .Net Framework, vì Winforms chạy ở đây ổn định nhất. Trong WPF, người ta vẫn không thể triệt tiêu bất kỳ scripterrors nào và trong UWP Universal Windows Platform, chức năng được giảm thêm.
Cuối cùng, chương trình này không chỉ là một cỗ máy và chỉ yêu cầu một giao diện trực quan hạn chế.

mục:
Bạn tạo một ứng dụng Windows Classic Desktop trong Visual Studio.
Sau đó dán vào Forms1 tạo thành nút bắt đầu, hộp văn bản cho URL và một hoặc nhiều trường đầu ra dưới dạng hộp văn bản với Multiline = true.

Đánh giá HTML với HtmlAgilityPack
Sau đó thêm HTMLAgiltiyPack để đánh giá thông tin HTML. Để thực hiện việc này, hãy thêm một tham chiếu bổ sung vàoHTMLAgilityPack trong Tài liệu tham khảo với Thêm tài liệu tham khảo.


Để sử dụng các chức năng của HtmlAgilityPack, bạn phải chèn chúng vào vùng đầu của trang mã
// <thêm bằng>
sử dụng html = HtmlAgilityPack;
// </ thêm bằng>
Oder
sử dụng HtmlAgilityPack;


Đọc trang web với C #

Đọc trang HTML
Đầu tiên, bạn sẽ tìm thấy văn bản HTML hoàn chỉnh của một trang web.

Để làm điều này, bạn tạo một đối tượng WebRequest và HttpWebResponse.
WebRequest objRequest = WebRequest .Create (sURL);
HttpWebResponse objResponse = ( HttpWebResponse ) objRequest.GetResponse ();

Sau đó, bạn đọc trang web vào một HtmlDocument cục bộ
Truyền phát objDataStream = objResponse.GetResponseStream ();
StreamReader TextReader = new StreamReader (objDataStream);

chuỗi sHTML = TextReader.ReadToEnd ();
_doc = html mới HtmlDocument ();
_doc.LoadHtml (sHTML);


Phương pháp C # để đọc văn bản HTML dưới dạng trang
khoảng trống riêng tư fl_Test ()
        {
            // ---------------- <fl_Test ()> ----------------
            chuỗi sURL = tbxURL.Text;

            WebRequest objRequest = WebRequest .Create (sURL);
            HttpWebResponse objResponse = ( HttpWebResponse ) objRequest.GetResponse ();

           
            // <Webseite auslesen>
            Truyền phát objDataStream = objResponse.GetResponseStream ();
            StreamReader TextReader = new StreamReader (objDataStream);
           
            // <lấy HTMLdocument>
            chuỗi sHTML = TextReader.ReadToEnd ();
            _doc = html mới HtmlDocument ();
            _doc.LoadHtml (sHTML);
            // </ nhận HTMLdocument>


            // <Abschluss>
            TextReader.C Đóng ();
            objDataStream. Đóng ();
            objResponse. Đóng ();
            // </ Abschluss>

            // <auswerten>

            get_Results ();
            // ---------------- </ fl_Test ()> ----------------
        }



Đánh giá
Mã để đánh giá các yếu tố HTML riêng lẻ của tài liệu HMTL
Với .SelectNodes (xPath), bạn xác định tất cả các thành phần có HTMLType nhất định và nếu có thể đồng nghĩa với tên hoặc mô tả lớp CSS
Sau đó, bạn có thể đi qua tất cả các nút của bộ sưu tập và đánh giá chúng riêng lẻ
            Các nút HtmlNodeCollection = _doc.DocumentNode.SelectNodes ( "// h2 [@ class = 'text-module- started ']" );


            foreach HtmlNode trong các nút)
            {
                HtmlNode a = n.SelectSingleNode ( "a" );
               
                chuỗi sTitel = a.InnerText;
                chuỗi sURL = a.GetAttributionValue ( "href" "" );

                sys_Add_Result (sTlist);
            }

Các phần tử HTML được tìm kiếm
Trong ví dụ hiển thị, tất cả các yếu tố HTML phải được thu thập, có chứa các liên kết và tiêu đề của quảng cáo Ebay.
Nếu bạn tìm kiếm trang web bằng Alt-F12, bạn sẽ tìm thấy cấu trúc HTML của trang web một lần nữa. Trong ví dụ này, bạn có thể thấy rằng tất cả các kết quả được hiển thị dưới dạng <h2 class = text-module-started> .. </ h2> và trong nút HTML này là liên kết <a href=...> với tiêu đề và URL Tên.

Bằng cách thực thi mã C # trên biểu mẫu, tất cả các liên kết của trang web được tải và trong trường hợp này chỉ cần xuất ra hộp văn bản



Như một video hướng dẫn


Hoàn thành mã C #
sử dụng HtmlAgilityPack;
sử dụng hệ thống;
sử dụng System.Collections.Generic;
sử dụng System.ComponentModel;
sử dụng System.Data;
sử dụng System.Drawing;
sử dụng System.IO;
sử dụng System.Linq;
sử dụng System.Net;
sử dụng System.Text;
sử dụng System.Threading.T Nhiệm vụ;
sử dụng System.Windows.Forms;

// <thêm bằng>
sử dụng html = HtmlAgilityPack;
// </ thêm bằng>

không gian tên webrobot_ebayKleinanzeigen
{
    lớp công khai một phần frmWebRoboter Mẫu
    {
        // ---------- <toàn cầu> ----------
        html. HtmlDocument _doc;
        // ---------- </ toàn cầu> ----------


        Mẫu #region
        // ------------------- <vùng: Biểu mẫu> ---------- --------
        công cộng frmWebRoboter ()
        {
            Khởi tạoComponent ();
        }
        // ------------------- </ khu vực: Biểu mẫu> ---------- --------
        #endregion / Hình thức

        Nút #region
        // ------------------- <vùng: Nút> ---------- --------
        tin trống btnRead_Click ( object sender, EventArgs e)
        {
            fl_Test ();
        }
        // ------------------- </ area: Nút> ---------- --------
        #endregion

        Phương pháp #region
        // ------------------- <vùng: Phương thức> ------------------
        khoảng trống riêng tư fl_Test ()
        {
            // ---------------- <fl_Test ()> ----------------
            chuỗi sURL = tbxURL.Text;

            sys_Add_Log ( "Nhận trang web" );
            WebRequest objRequest = WebRequest .Create (sURL);
            HttpWebResponse objResponse = ( HttpWebResponse ) objRequest.GetResponse ();

            sys_Add_Log ( "/ Nhận trang web" );
            sys_Add_Log ( "Văn bản auslesen" );
           
            // <Webseite auslesen>
            Truyền phát objDataStream = objResponse.GetResponseStream ();
            // </ Webseite auslesen>

            // <Văn bản auslesen>
            StreamReader TextReader = new StreamReader (objDataStream);
            // </ Văn bản auslesen>
           
            // <lấy HTMLdocument>
            chuỗi sHTML = TextReader.ReadToEnd ();
            _doc = html mới HtmlDocument ();
            _doc.LoadHtml (sHTML);
            // </ nhận HTMLdocument>

            sys_Add_Log ( "/ Văn bản auslesen" );



            // <anzeigen>
            tbxHTML.Text = sHTML;
            // </ anzeigen>

            sys_Add_Log ( "/ anzeigen );


            // <Abschluss>
            TextReader.C Đóng ();
            objDataStream. Đóng ();
            objResponse. Đóng ();
            // </ Abschluss>

            // <auswerten>

            get_Results ();
            // ---------------- </ fl_Test ()> ----------------
        }

       

        #region Auswerten
        khoảng trống riêng get_Results ()
        {
            // ------------------- <get_Results ()> -------------------
            Các nút HtmlNodeCollection = _doc.DocumentNode.SelectNodes ( "// h2 [@ class = 'text-module- started ']" );


            foreach HtmlNode trong các nút)
            {
                HtmlNode a = n.SelectSingleNode ( "a" );
               
                chuỗi sTitel = a.InnerText;
                chuỗi sURL = a.GetAttributionValue ( "href" "" );

                sys_Add_Result (sTlist);
            }

            // ------------------- </ get_Results ()> -------------------
        }
        #endregion


        // ------------------- </ area: Phương thức> ------------------
        #endregion


        Hệ thống #region
        // ------------------- </ area: Phương thức hệ thống> ------------------
        private void sys_Add_Log ( chuỗi parText = "" )
        {
            // ---------------------- <sys_Add_Log ()> --------------------- -
            chuỗi sText = tbxLog.Text;
            sText = DateTime .Now.ToLongTimeString () + "" + parText + Môi trường .NewLine + sText;
            // <automatisch kuerzen>
            if (sText. Chiều dài> 10000)
            {sText = sText.Sub chuỗi (1, 10000); }
            // </ automatisch kuerzen>
            tbxLog.Text = sText;
            // ---------------------- </ sys_Add_Log ()> -------------------- -
        }

        private void sys_Add_Result ( chuỗi parText = "" )
        {
            // ---------------------- <sys_Add_Log ()> --------------------- -
            chuỗi sText = tbxResult.Text;
            sText = DateTime .Now.ToLongTimeString () + "" + parText + Môi trường .NewLine + sText;
            // <automatisch kuerzen>
            if (sText. Chiều dài> 10000)
            {sText = sText.Sub chuỗi (1, 10000); }
            // </ automatisch kuerzen>
            tbxResult.Text = sText;
            // ---------------------- </ sys_Add_Log ()> -------------------- -
        }
        // ------------------- </ area: Phương thức hệ thống> ------------------
        #endregion
    }
}








Build better sites faster with Chrome DevTools

xpath


Screenshot.png

https://archive.codeplex.com/?p=xpath

XPath Visualiser Công cụ này cho phép bạn phát triển và kiểm tra các biểu thức XPath 1.0. Bạn có thể hình dung kết quả của biểu thức XPath trên một đoạn văn bản, có thể là bất kỳ dạng đánh dấu nào, bao gồm HTML, SOAP và XML. Tại sao công cụ này khác với các công cụ hiển thị XPath khác? Ưu điểm lớn của công cụ này là rất tha thứ cho cấu trúc của đánh dấu đang được sử dụng. Bạn thậm chí có thể sử dụng các đoạn đánh dấu không đầy đủ mà không có yếu tố phù hợp! Vấn đề với nhiều công cụ trực quan XPath khác là chúng yêu cầu đánh dấu phải là 100 cú pháp hợp lệ. Điều này là do đằng sau hậu trường họ sử dụng thư viện .NET XML có các yêu cầu rất nghiêm ngặt về XML mà nó sẽ xử lý. Vấn đề là, nhiều HTML và các nguồn đánh dấu khác không hoàn hảo, có nghĩa là chúng không thể được sử dụng trong các công cụ như vậy. Trong các cảnh, công cụ này sử dụng Gói Agility HTML tuyệt vời, rất dễ tha thứ khi xử lý đánh dấu và cho phép hầu như bất kỳ nguồn được sử dụng và thử nghiệm
dơloat
https://github.com/Xcalllibur/XPath