Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > TWebBrowser + получить HTML


Автор: Artemon 28.2.2010, 18:47
Каким образмо из компонента TWebBrowser ролучить HTML,

содержащий результаты выполнения JavaScript,

Поясню, если к примеру через JS динамически создается input, то нужно именно его и получить, а не сам JavaScript код.

Автор: 586 28.2.2010, 19:15
Код
<html><body><input type="text" value="its_work" size="70" id="aaa" /></body></html>

Код
#include <mshtml.h>


void __fastcall TForm1::Button1Click(TObject *Sender)
{
    IHTMLDocument2 *htm = 0;
    CppWebBrowser1->Document->QueryInterface(&htm);
    if(htm)
    {
        IHTMLElementCollection *col = 0;
        htm->get_all(&col);
        if(col)
        {
            IDispatch *el_disp = 0;
            col->item(TVariant(L"aaa"), TVariant(0), &el_disp);
            if(el_disp)
            {
                IHTMLElement *el = 0;
                el_disp->QueryInterface(&el);
                if(el)
                {
                    TVariant value;
                    el->getAttribute(L"value", 0, value);

                       ShowMessage(value);    // message: "its_work"

                    el->Release();
                    el = 0;
                }
                el_disp->Release();
                el_disp = 0;
            }
            col->Release();
            col = 0;
        }
        htm->Release();
        htm = 0;
    }
}

Автор: Artemon 28.2.2010, 19:33
586, практически то, что нужно, но как получить HTML целиком, а не конкретный элемент и его значение ?

Автор: 586 28.2.2010, 20:36
Код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    IHTMLDocument2 *htm = 0;
    CppWebBrowser1->Document->QueryInterface(&htm);
    if(htm)
    {
        IHTMLElement *body = 0;
        htm->get_body(&body);

        if(body)
        {
            BSTR str = 0;
            body->get_innerHTML(&str);

            ShowMessage(str);

            SysFreeString(str);
            str = 0;
            body->Release();
            body = 0;
        }

        htm->Release();
        htm = 0;
    }
}

Автор: Artemon 28.2.2010, 21:31
Что могу сказать, 585 - уважаемый человек ;)

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