ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: inbruk
4. августа 2011 19:42

Материал взят с блога IL_Agent см. C#. WebBrowser. Доступ к содержимому фреймов.

Недавно пришлось решать задачу - получение всех ссылок с web-страницы, включая те, котрые находятся внутри фреймов. И, как выяснилось, не так это просто :).

Решение в лоб выглядело так:

void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

{

/* links from pages */

foreach (HtmlElement elem in browser.Document.Links)

{

var link = (elem.DomElement as HTMLAnchorElement).href;

/* ... */

}

/* links from frames */

foreach (HtmlWindow win in browser.Document.Window.Frames)

{

foreach (HtmlElement elem in win.Document.Links)

{

var link = (elem.DomElement as HTMLAnchorElement).href;

/* ... */

}

}

}

Создал на диске С страничку с фреймами, проверил на ней - работает !

Однако при проверке на реальных сайтах выяснилось, что код неработоспособен.

Оказывается, если страница, содержащая фрейм, и сам фрейм расположены в разных доменах, то обращение к полю Document фрейма кидает System.UnauthorizedAccessExeption.

Решение нашёл ЗДЕСЬ. Автору - респект. Суть его выглядит так:

/* links from frames */
foreach (HtmlWindow win in browser.Document.Window.Frames)
{
var iWin2 = win.DomWindow as IHTMLWindow2;
var iDoc2 = null;
try
{
iDoc2 =iWin2.document ;
}
catch (System.UnauthorizedAccessException)
{
var sp = (IServiceProvider)iWin2 ;

Object brws = null;
sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out brws);

var browser = (SHDocVw.IWebBrowser2)(brws);

iDoc2 = (IHTMLDocument2)browser.Document;

}
var links = iDoc2.links;

foreach (HTMLAnchorElement elem in links)
{
var link = elem.href;
"color: #999999;"> /* ... */
}
}

Пространство имён SHDocVw содержится в сборке Interop.SHDocVw.dll , которую можно скачать или попробовать найти у себя на диске.

Похожие записи


Вопросы на собеседовании C#, Net, ASP.NET, SQL
Продолжая тему вопросов на собеседовании. Нашел еще одну подборку. Оригинал лежит здесь . Перенес, чтобы не затерялось. Есть вполне вменяемые ответы (хотя, на некоторые вопросы ответил бы по-другому). Ответы находятся после списка вопросов, я их не менял. 23. Что такое шаблон проектирования Model/View/Controller? Как и зачем его применяют? 2...

Способы заработка на сайте
На этом блоге было много постов про производство и раскрутку сайтов. Но пока не было про заработок на них. Пора исправить этот недочет. Здесь будут описаны по возможности не фантастичные, и не супер низко прибыльные способы. Также упор будет сделан именно на организацию процесса, а не технических деталях, которых в обилии в интернете. Несмотря на то, что как пр...

Silverlight, HTML5 и непрозрачная стратегия развития Microsoft
Оригинал статьи взят отсюда: Silverlight, HTML5 и непрозрачная стратегия развития Microsoft Автор: Peter Bright Переводчик: Mairon     По непонятным мне на данный момент причинам, похоже, что многие разработчики, присутствовавшие на недавней конференции PDC-2010 (Крупнейшая конференция Microsoft для разработчиков — Прим. переводчика), были сильн...

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий