Парсинг содержимого iframe - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Решение ищу уже довольно долго. На этом форуме есть похожие темы, но они немного не подходят.

Задача:

Программа c# загружает страницу сайта site1.com, на которой, помимо прочего, расположен iframe с некоторыми данными. Так вот эти самые данные нужно оттуда программно "достать" и обработать.

Проблема и условия:

1. В указанный iframe данные загружаются автоматически с сайта site2.com, то есть на загружаемой страничке есть код: <iframe src="site2.com/stuff..."></iframe> 2. Через запрос по адресу, указанному в src, данные не достать, там какая-то хитрая внутри система javascript'ов и черт знает чего еще. 3. Если страницу загружать с помощью компонента WebBrowser, в нем все отлично отображается, однако с помощью WebBrowser.DocumentText ничего не достать, естественно.

Вопрос:

Как достать данные из iframe? Я пробовал по-разному через WebBrowser.Document, даже пытался что-то сделать с помощью mshtml, - ни в какую! Мне не хватает знаний, я не понимаю,

где лежит то, что реально отображается в WebBrowser?

. Он ведь уже все отображает, все внутренности, как до них докопаться? На сколько я понимаю, где-то, в каком-то свойстве лежит DOM уже готовой, загруженной странички, в которой уже выполнены все скрипты и загружены все картинки и т.п. Или его можно как-то получить. Но я путаюсь в окнах, фреймах и приведениях. Я уже писал "монстроподобные" цепочки типа
HTMLFrameBase frame = myWebBrowser.Document.GetElementsByTagName("IFrame")[0].DomElement as HTMLFrameBase;
Или совсем уже извращенные на подобие
myWebBrowser.Document.Window.Document.Window......
Объясните, пожалуйста. До всего всегда сам докапывался, а тут - прям никак! Спасибо большое за ответы.

Решение задачи: «Парсинг содержимого iframe»

textual
Листинг программы
if ( webBrowser1.Document == null )
{
    return;
}
HtmlElementCollection elements = webBrowser1.Document.GetElementsByTagName( "HTML" );
if ( elements.Count == 1 )
{
    var htmlElement = elements[ 0 ];
    string pageSource = htmlElement.OuterHtml;
    File.WriteAllText( "C:\\code.html", pageSource );
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5