Практическое руководство. Доступ к исходному коду HTML с использованием управляемой объектной модели документов HTML

Свойства DocumentStream и DocumentText в элементе управления WebBrowser возвращают HTML текущего документа в том виде, в котором он существовал при первом отображении. Если вы измените страницу, используя вызовы таких методов и свойств, как AppendChild и InnerHtml, то при вызове DocumentStream и DocumentText эти изменения отображаться на будут. Чтобы получить актуальный HTML-источник DOM, необходимо вызвать свойство OuterHtml по элементу HTML.

В следующей процедуре показано, как получить динамический источник и отобразить его в отдельном контекстном меню.

Получение динамического источника с помощью свойства OuterHtml.

  1. Создайте новое приложение Windows Forms. Для начала создайте одну форму Form и присвойте ей имя Form1.

  2. Создайте элемент управления WebBrowser в приложении Windows Forms и присвойте ей имя WebBrowser1. Дополнительные сведения см. в статье Практическое руководство. Добавление функциональности веб-браузера в приложения Windows Forms.

  3. Создайте вторую форму Form с именем CodeForm.

  4. Добавьте элемент управления RichTextBox для CodeForm и присвойте его свойству Dock значение Fill.

  5. Создайте в 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
    
  6. Добавьте элемент управления Button с именем Button1 в Form и пронаблюдайте за событием Click. Дополнительные сведения о наблюдении за событиями см. в разделе События.

  7. Добавьте следующий код в обработчик событий 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 либо один или несколько дочерних объектов еще не инициализированы.

См. также