Элемент управления веб-браузера не показывает HTML, но показывает веб-страницу - PullRequest
0 голосов
/ 11 февраля 2012

Я автоматизирую задачу с помощью веб-браузера, страницы отображают страницы с помощью фреймов.Моя проблема в том, что я попадаю в точку, где я могу видеть, что веб-страница загружена правильно в элементе управления веб-браузера, но когда он попадает в код и я вижу HTML, я ничего не вижу.

Я видел другие примеры здесьтоже, но все они не возвращают все html браузера.

Что я получаю, используя это:

                    HtmlWindow frame = webBrowser1.Document.Window.Frames[1];
                    string str = frame.Document.Body.OuterHtml;

Просто:

Основной тег кадра сатрибуты, такие как SRC , тэг и т. д., есть ли способ справиться с этим? Потому что, поскольку я вижу полностью загруженную веб-страницу, почему я не вижу html? AS, когда я делаю это в Internet Explorer, я вижуисточник страниц после загрузки, почему бы и нет?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

На странице есть два кадра:

Я использую это, как указано выше:

HtmlWindow frame = webBrowser1.Document.Window.Frames [0];

        string str = frame.Document.Body.OuterHtml;

И я получаю правильный HTMl для первого кадра, но для второго я вижу только:

<FRAMESET frameSpacing=1 border=1 borderColor=#ffffff frameBorder=0 rows=29,*><FRAME title="Edit Search" marginHeight=0 src="http://web2.westlaw.com/result/dctopnavigation.aspx?rs=WLW12.01&amp;ss=CXT&amp;cnt=DOC&amp;fcl=True&amp;cfid=1&amp;method=TNC&amp;service=Search&amp;fn=_top&amp;sskey=CLID_SSSA49266105122&amp;db=AK-CS&amp;fmqv=s&amp;srch=TRUE&amp;origin=Search&amp;vr=2.0&amp;cxt=RL&amp;rlt=CLID_QRYRLT803076105122&amp;query=%22LAND+USE%22&amp;mt=Westlaw&amp;rlti=1&amp;n=1&amp;rp=%2fsearch%2fdefault.wl&amp;rltdb=CLID_DB72585895122&amp;eq=search&amp;scxt=WL&amp;sv=Split" frameBorder=0 name=TopNav marginWidth=0 scrolling=no><FRAME title="Main Document" marginHeight=0 src="http://web2.westlaw.com/result/dccontent.aspx?rs=WLW12.01&amp;ss=CXT&amp;cnt=DOC&amp;fcl=True&amp;cfid=1&amp;method=TNC&amp;service=Search&amp;fn=_top&amp;sskey=CLID_SSSA49266105122&amp;db=AK-CS&amp;fmqv=s&amp;srch=TRUE&amp;origin=Search&amp;vr=2.0&amp;cxt=RL&amp;rlt=CLID_QRYRLT803076105122&amp;query=%22LAND+USE%22&amp;mt=Westlaw&amp;rlti=1&amp;n=1&amp;rp=%2fsearch%2fdefault.wl&amp;rltdb=CLID_DB72585895122&amp;eq=search&amp;scxt=WL&amp;sv=Split" frameBorder=0 borderColor=#ffffff name=content marginWidth=0><NOFRAMES></NOFRAMES></FRAMESET>

ОБНОВЛЕНИЕ

Два URL-адреса фреймовs следует:

Frame1, html которого я вижу

http://web2.westlaw.com/nav/NavBar.aspx?RS=WLW12.01&VR=2.0&SV=Split&FN=_top&MT=Westlaw&MST=

Frame2, html которого я не вижу:

http://web2.westlaw.com/result/result.aspx?RP=/Search/default.wl&action=Search&CFID=1&DB=AK%2DCS&EQ=search&fmqv=s&Method=TNC&origin=Search&Query=%22LAND+USE%22&RLT=CLID%5FQRYRLT302424536122&RLTDB=CLID%5FDB6558157526122&Service=Search&SRCH=TRUE&SSKey=CLID%5FSSSA648523536122&RS=WLW12.01&VR=2.0&SV=Split&FN=_top&MT=Westlaw&MST=

И свойства второго фрейма, html iне получить находятся на картинке ниже:

enter image description here

Спасибо

Ответы [ 4 ]

0 голосов
/ 13 февраля 2012

Я заплатил за решение вопроса выше, и он работает на 100%.

Я использовал следующую функцию, и она вернула мне счетчик тега, который я искал, который я не смог найти:S .. Используйте это для вызова функции, перечисленной ниже:

FillFrame(webBrowser1.Document.Window.Frames);



private void FillFrame(HtmlWindowCollection hwc)
        {


            if (hwc == null) return;
            foreach (HtmlWindow hw in hwc)
            {
                HtmlElement getSpanid = hw.Document.GetElementById("mDisplayCiteList_ctl00_mResultCountLabel");
                if (getSpanid != null)
                {

                    doccount = getSpanid.InnerText.Replace("Documents", "").Replace("Document", "").Trim();

                    break;
                }

                if (hw.Frames.Count > 0) FillFrame(hw.Frames);
            }


        }

Надеюсь, что это помогает людям.

Спасибо

0 голосов
/ 11 февраля 2012

Это прекрасно работает ... получает элемент BODY со всеми внутренними элементами:

Где-то в вашем коде формы:

wb.Url = new Uri("http://stackoverflow.com");
wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wbDocumentCompleted);

А вот wbDocumentCompleted:

void wb1DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var yourBodyHtml = wb.Document.Body.OuterHtml;
}

wb - это System.Windows.Forms.WebBrowser

ОБНОВЛЕНИЕ:

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

0 голосов
/ 12 февраля 2012

Наиболее вероятная причина в том, что индекс фрейма 0 имеет то же доменное имя, что и главная / родительская страница, тогда как индекс фрейма 1 имеет другое доменное имя.Я прав?

Это создает проблему безопасности между кадрами, а элемент управления WB просто оставляет вас в плохом настроении и не говорит вам, что на самом деле пошло не так, а просто оставляет ваши объекты, свойства и данныепусто (при попытке развернуть объект в окне просмотра будет указано «Нет переменных»).

В этой ситуации вы можете получить доступ только к свойствам URL и iFrame, но внутри iFrame ничего нет.

Конечно, есть способы преодоления проблем безопасности между кадрами, но они не встроены в элемент управления WebBrowser и являются внешними решениями, в зависимости от того, какой элемент управления WB вы используете (например,Версия .NET или предварительная версия .NET).

Дайте мне знать, правильно ли я идентифицировал вашу проблему, и если да, то если вы хотите, чтобы я рассказал вам о решении, адаптированном к вашей установке и экземпляруУправление WB.

ОБНОВЛЕНИЕ : я заметил, что вы делаете .getElementByTagName ("HTML") (0) .outerHTML, чтобы получить HTML, все, что вам нужно сделать, это вызвать это для объекта документа или объекта .body, и это должно сделать это.MyDoc.Body.innerHTML должен получить нужный вам контент.Также обратите внимание, что в этих документах есть дополнительные iFrames, на случай, если это актуально.Можете ли вы дать нам основной URL документа, в котором есть эти два URL, чтобы мы / я могли повторить то, что вы здесь делаете?Кроме того, не уверен, почему вы используете DomElement, но вы должны просто привести его к собственному объекту, к которому он хочет быть приведен, либо к IHTMLDocument2, либо к объекту, который вы видите в окне просмотра, которое я считаю IHTMLFrameElement (если я правильно помнюно вы поймете, что я имею в виду, когда увидите это).Если вы пытаетесь использовать объект XML, это может быть причиной того, что вы не можете получить содержимое HTML, изменить объявление объекта и приведение типов, если оно есть, и дать ему понять, и дайте нам знать :).Теперь мне тоже любопытно:).

0 голосов
/ 11 февраля 2012

Для получения html вы должны сделать это следующим образом:

        WebClient client = new WebClient();
        string html = client.DownloadString(@"http://stackoverflow.com");

Это пример, конечно, вы можете изменить адрес.Кстати, вам нужно использовать System.Net;

...