Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

парсинг содержимого iframe

67K
11 февраля 2011 года
miathe
3 / / 10.02.2011
Здравствуйте! Решение ищу уже довольно долго. На этом форуме есть похожие темы, но они немного не подходят.

Задача:

Программа 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......


Объясните, пожалуйста. До всего всегда сам докапывался, а тут - прям никак!

Спасибо большое за ответы.
67K
12 февраля 2011 года
miathe
3 / / 10.02.2011
Alexander92, спасибо за ответ, но он не подходит. Тем более, что это все опробовано:
Цитата:
с помощью WebBrowser.DocumentText ничего не достать, естественно


Описанным Вами способом содержимое iframe, которое загружается с помощью src не достать. Я постарался четко это объяснить в постановке вопроса. Извините, если не получилось.
Там все гораздо серьезнее. Покопавшись, я понял, что содержимое iframe, которое загружается с домена, отличного от домена страницы, на которой этот iframe расположен, достать в c# нельзя. Это политика безопасности Microsoft. И не только... Содержимое подобного iframe вообще нельзя программно просматривать, во всяком случае, известными мне способами, ибо даже с помощью javascript в подавляющем большинстве браузеров этого делать нельзя. Тоже политика безопасности. Называется это "cross-domain scripting", вроде, и считается это дело небезопасным, нежелательным и, в целом, "плохим".

Таким образом, вопрос встает немного по-другому:
- Можно ли как-то отключить эту безопасность на уровне языка, или на уровне VisualStudio?
- Если нет, то какими способами, методами, языками и т.п. вообще можно просматривать содержимое таких iframe'ов? Условия, однако, должны соблюдаться все те же: достать содержимое надо уже с полностью загруженной страницы, отправлять запросы по адресу, указанному в src iframe'а нельзя.

Вопрос мне показался нетривиальным, поэтому я и пишу на форуме.

Спасибо большое за ответы.

P.S.: Во избежание непонимания: я не занимаюсь кражей чужого контента и написанием всевозможных ботов для сомнительных целей. Разрабатываемая программа является сугубо аналитической и служит для сбора статистики, поиска и т.п.

278
12 февраля 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата:

Alexander92, спасибо за ответ, но он не подходит. Тем более, что это все опробовано:
[QUOTE]
с помощью WebBrowser.DocumentText ничего не достать, естественно


[/QUOTE]

Я прошу прощения, действительно не заметил этого сразу. Сходу пришел в голову такой вариант (если найду что-то лучшее - отпишусь): можно, например, просто сохранять содержимое WebBrowser как временный mht-архив и обрабатывать уже его.

29K
16 марта 2011 года
Quiet as ice
52 / / 14.10.2008
 
Код:
IHTMLDocument2 doc = (IHTMLDocument2)webBrowser1.Document.DomDocument;
int index = 1; \\номер фремйа который парсим
IHTMLWindow2 frame = (IHTMLWindow2)doc.frames.item(index);
string content = frame.document.body.innerHTML;

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог