Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > mshtml.IHTMLElement периодически исключение


Автор: psn 19.10.2009, 09:26
Периодически выскакивают исключения при получении атрибута:
UnauthorizedAccessException (Exception from HRESULT: 0x80070005)

Например:

Код

url = (string)((from element in GetTags(base.htmlManager.GetHtmlDocument(url).all, Tag.img)
                      where (int)element.getAttribute("hspace", 0) == 2
                      select element).ElementAt<IHTMLElement>(0).getAttribute("SRC", 0));



В строке:

Код

(int)elements.getAttribute("hspace", 0) == 2


Проявляется нестабильно, т.е. может выскочить может нет, данные теже.

Используется: Framework 3.5 sp1
OC: Windows XP (IE v6) и Windows 7 (IE версию не посмотрел)

Может кто сталкивался с подобным, в нете есть подобные вопросы но без ответов (http://www.aspnetmania.com/Forums/ForumMessage/365114.html).




Автор: diadiavova 19.10.2009, 11:50
Возможно двойку в кавычки надо взять.

Автор: psn 19.10.2009, 12:11
тоже подумал убрать преобразование к int, сегодня протестирую, теперь так:

Код

         url = (string)((from elements in GetTags(base.htmlManager.GetHtmlDocument(url).all, Tag.img)
                                    where string.Equals(elements.getAttribute("hspace", 0), "2")
                                    select elements).ElementAt<IHTMLElement>(0).getAttribute("SRC", 0));




Автор: psn 19.10.2009, 18:17
Не помогло, стало реже но все равно вылетает

Автор: diadiavova 19.10.2009, 21:46
Я посмотрел, что за ошибка - "access denied error". То бишь доступ запрещён. Уж не знаю, с чем это связанно, наверно в отладчике надо смотреть, но для начала можно прото обработать ошибку, может всё и будет работать без проблем.

Автор: psn 20.10.2009, 06:47
Я сделал игнорировать исключение, некоторые картинка при этом с сайта не загрузятся, придется вручную, будет время, перепишу все. При использовании условия string.Equals(elements.getAttribute("hspace", 0), "2") в некоторых случае возникает исключение, что возвращаемый объект имеет тип System.Int32 и к строке преобразован, не может, хотя структура html везде одинакова. 

Автор: diadiavova 20.10.2009, 11:36
Вообще-то в хтмл есть 2 тэга отображающих картинку. В mshtml это - два разных класса
mshtml.HTMLImgClass
mshtml.htmlInputImageClass

Возможно картинки не грузятся из-за того, что ты только один тэг извлекаешь, а в документе присутствуют оба. Тут в коде не всё понятно, но картинки можно вытащить при помощи свойства документа

mshtml.HTMLDocumentClass.images

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)