none
Как получить DOM html из AxWebBrowser RRS feed

  • Общие обсуждения

  • ЗДРАВСТВУЙТЕ.

    Как получить DOM, котрый строит веббраузер ?

    Для некоторого случая я делаю так:

     IHTMLDocument3 html3 = (IHTMLDocument3)axWebBrowser2_Knowledge.Document;
    
     
    
       IHTMLElementCollection coll = (IHTMLElementCollection)html3.getElementsByTagName("frame");
    
    
    
       foreach (IHTMLElement el in coll)
    
       {
    
        textBox1.Text += ((HTMLFrameElement)el).contentWindow.document.body.outerHTML;
    
    
    
        tbKnowledgeText.Text += objKnowledgeslide.Deltag(objKnowledgeslide.DelLinkTextforKnowledge(((HTMLFrameElement)el).contentWindow.document.body.outerHTML));
    
       }
    
    

    Но он не уневерсален.

    Например для такого случая он уже не работает

    <html>
    
     <head>
    
     <frameset {какие-то аттрибуты}>
    
      <frame {...}>
    
       <html>
    
       ...
    
       </html>
    
      <frame>
    
       <html>
    
       ...
    
       </html>
    
    

    Я делаю

    Проект Windows Form

    Язык: C#

    Использую библиотеку mshtml.dll

    Заранее спасибо за любую помощь.

     

    30 января 2011 г. 9:58

Все ответы

  • А количество найденный фреймов правильное? У вас во фреймах задается html код или html страница с помощью атрибута src? Если html разментка - то работают ли эта страница в браузере? Если задается атрибут scr = html страница, то скорее всего придется загружать ее в веб браузер и после уже брать ее html разметку, т.к. при попытке доступа к содержимому фрейма напрямую возникает исключение Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).


    Для связи [mail]
    1 февраля 2011 г. 12:50
  • Во фреймах содержится код.

    Если сделать вот так

    foreach (IHTMLElement el in col3)
          {
            try
            {
              textBox1.Text += objContentSlide.Deltag(((HTMLFrameElement)el).contentWindow.document.body.outerHTML, patt_array);
            }
            catch
            {
              continue;
            }

    то можно получить содержимое фрейма, но не все. Как получить весь DOM для меня загадка.

    Я сильно извиняюсь, но тему наверное стоит удалить так как она почти копирует вот эту http://social.msdn.microsoft.com/Forums/ru-RU/fordesktopru/thread/76ca9114-4a68-47e8-9a45-d94761e50b26/#17165ef3-821b-4290-93c7-f6dd661b9804

     

    1 февраля 2011 г. 14:03
  • Давайте не будем удалять, а переведем ее в обсуждение, может кто-нибудь напишет по делу. Или вы сами после напишите решение, как получить весь DOM.
    Для связи [mail]
    1 февраля 2011 г. 14:09