парсинг содержимого iframe
Задача:
Программа 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 уже готовой, загруженной странички, в которой уже выполнены все скрипты и загружены все картинки и т.п. Или его можно как-то получить. Но я путаюсь в окнах, фреймах и приведениях. Я уже писал "монстроподобные" цепочки типа
Или совсем уже извращенные на подобие
Объясните, пожалуйста. До всего всегда сам докапывался, а тут - прям никак!
Спасибо большое за ответы.
Описанным Вами способом содержимое iframe, которое загружается с помощью src не достать. Я постарался четко это объяснить в постановке вопроса. Извините, если не получилось.
Там все гораздо серьезнее. Покопавшись, я понял, что содержимое iframe, которое загружается с домена, отличного от домена страницы, на которой этот iframe расположен, достать в c# нельзя. Это политика безопасности Microsoft. И не только... Содержимое подобного iframe вообще нельзя программно просматривать, во всяком случае, известными мне способами, ибо даже с помощью javascript в подавляющем большинстве браузеров этого делать нельзя. Тоже политика безопасности. Называется это "cross-domain scripting", вроде, и считается это дело небезопасным, нежелательным и, в целом, "плохим".
Таким образом, вопрос встает немного по-другому:
- Можно ли как-то отключить эту безопасность на уровне языка, или на уровне VisualStudio?
- Если нет, то какими способами, методами, языками и т.п. вообще можно просматривать содержимое таких iframe'ов? Условия, однако, должны соблюдаться все те же: достать содержимое надо уже с полностью загруженной страницы, отправлять запросы по адресу, указанному в src iframe'а нельзя.
Вопрос мне показался нетривиальным, поэтому я и пишу на форуме.
Спасибо большое за ответы.
P.S.: Во избежание непонимания: я не занимаюсь кражей чужого контента и написанием всевозможных ботов для сомнительных целей. Разрабатываемая программа является сугубо аналитической и служит для сбора статистики, поиска и т.п.
Alexander92, спасибо за ответ, но он не подходит. Тем более, что это все опробовано:
[QUOTE]
с помощью WebBrowser.DocumentText ничего не достать, естественно
[/QUOTE]
Я прошу прощения, действительно не заметил этого сразу. Сходу пришел в голову такой вариант (если найду что-то лучшее - отпишусь): можно, например, просто сохранять содержимое WebBrowser как временный mht-архив и обрабатывать уже его.
int index = 1; \\номер фремйа который парсим
IHTMLWindow2 frame = (IHTMLWindow2)doc.frames.item(index);
string content = frame.document.body.innerHTML;