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 n 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 n 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
}
}
|

Một số lưu ý khi bình luận
Mọi bình luận sai nội quy sẽ bị xóa mà không cần báo trước (xem nội quy)
Bấm Thông báo cho tôi bên dưới khung bình luận để nhận thông báo khi admin trả lời
Để bình luận một đoạn code, hãy mã hóa code trước nhé