Практическое руководство. Доступ к исходному коду HTML с использованием управляемой объектной модели документов HTML
Свойства DocumentStream и DocumentText в элементе управления WebBrowser возвращают HTML текущего документа в том виде, в котором он существовал при первом отображении. Если вы измените страницу, используя вызовы таких методов и свойств, как AppendChild и InnerHtml, то при вызове DocumentStream и DocumentText эти изменения отображаться на будут. Чтобы получить актуальный HTML-источник DOM, необходимо вызвать свойство OuterHtml по элементу HTML.
В следующей процедуре показано, как получить динамический источник и отобразить его в отдельном контекстном меню.
Получение динамического источника с помощью свойства OuterHtml.
Создайте новое приложение Windows Forms. Для начала создайте одну форму Form и присвойте ей имя
Form1
.Создайте элемент управления WebBrowser в приложении Windows Forms и присвойте ей имя
WebBrowser1
. Дополнительные сведения см. в статье Практическое руководство. Добавление функциональности веб-браузера в приложения Windows Forms.Создайте вторую форму Form с именем
CodeForm
.Добавьте элемент управления RichTextBox для
CodeForm
и присвойте его свойству Dock значениеFill
.Создайте в
CodeForm
общедоступное свойство с именемCode
.public string Code { get { if (richTextBox1.Text != null) { return (richTextBox1.Text); } else { return (""); } } set { richTextBox1.Text = value; } }
Public Property Code() As String Get If (RichTextBox1.Text IsNot Nothing) Then Code = RichTextBox1.Text Else Code = "" End If End Get Set(ByVal value As String) RichTextBox1.Text = value End Set End Property
Добавьте элемент управления Button с именем
Button1
в Form и пронаблюдайте за событием Click. Дополнительные сведения о наблюдении за событиями см. в разделе События.Добавьте следующий код в обработчик событий Click.
private void button1_Click(object sender, EventArgs e) { HtmlElement elem; if (webBrowser1.Document != null) { CodeForm cf = new CodeForm(); HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("HTML"); if (elems.Count == 1) { elem = elems[0]; cf.Code = elem.OuterHtml; cf.Show(); } } }
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim elem As HtmlElement If (WebBrowser1.Document IsNot Nothing) Then Dim cf As New CodeForm() Dim elems As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("HTML") If (elems.Count = 1) Then elem = elems(0) cf.Code = elem.OuterHtml cf.Show() End If End If End Sub
Отказоустойчивость
Всегда тестируйте значение Document, прежде чем пытаться его извлечь. Если текущая страница не закончила загружаться, значит, Document либо один или несколько дочерних объектов еще не инициализированы.
См. также
.NET Desktop feedback