Практическое руководство. Доступ к исходному коду 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; } }
Добавить 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(); } } }
Отказоустойчивость
Всегда тестируйте значение Document, прежде чем пытаться его извлечь. Если текущая страница не закончила загружаться, значит, Document либо один или несколько дочерних объектов еще не инициализированы.