Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите кто знает, работа с браузером 
:(
    Опции темы
Miha_086
Дата 18.6.2007, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.6.2007

Репутация: нет
Всего: нет



Мне нужно написать программу инфрмационный сборщик лучше на C  Sharp можно и на C++ Builder
Вопрос состоит в том как при нажатии кнопки на форме проги, контент html страницы записывался в файл?
PM MAIL   Вверх
Rickert
Дата 18.6.2007, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Miha_086, какой html страницы? Твоя прога - это браузер? Откуда берётся эта страница / где она лежит? smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Miha_086
Дата 18.6.2007, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.6.2007

Репутация: нет
Всего: нет



просто htm страница, адрес которой лежит в БД (я его туда сам заношу в виде http://xxxxxxxx.ru )
моя прога это не браузер, надо чтоб это была простая форма которая записывала контент со страницы в файл без ее непосредственного открытия в браузере и далее обрабатывала его. 
Если так нельзя сделать тогда может подскажете как это можно дергать через IE?
PM MAIL   Вверх
jonie
Дата 18.6.2007, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Для не управляемого кода доступна COM оснастка IE. В нем есть усе..
Код

// BSTR -> ANSI
char* ToAnsi(BSTR String)
{
    if (!String){
        return new char('\0');
    }
    int len = WideCharToMultiByte(CP_ACP, 0, String, -1, 0, 0, NULL, NULL);
    char* rv = new char[len];
    WideCharToMultiByte(CP_ACP, 0, String, -1, rv, len, NULL, NULL);
    SysFreeString(String);
    return rv;
}


char* GetHtmlBody(IHTMLDocument2* pDoc)
{
    if(pDoc){
        IHTMLElement *spHtmlElement = 0;
        if(SUCCEEDED(pDoc->get_body(&spHtmlElement))){
            if(spHtmlElement != 0){
                BSTR bstr;
                //spHtmlElement->get_outerHTML(&bstr);
                spHtmlElement->get_outerText(&bstr);
                spHtmlElement->Release();
                return ToAnsi(bstr);        //all ok.
            }
        }

    }
    return new char('\0');    //error
}

// НЕ (!) Рекурсивная обработка всех фреймов в документе
char* GetFrameHTMLBodyByName(IHTMLDocument2* pDoc , char framename[])
{
    IHTMLFramesCollection2* FramesCollection;
    if (SUCCEEDED(pDoc->get_frames(&FramesCollection)))    {    // Получаем коллекцию фреймов
        long count;
        if (SUCCEEDED(FramesCollection->get_length(&count))) {
            for (int i = 0; i < count; i++)    {
                VARIANT out_var , in_var;
                in_var.vt = VT_I4;    in_var.lVal = i;

                if (SUCCEEDED(FramesCollection->item(&in_var, &out_var))) {
                    IHTMLWindow2* HtmlWindow;
                    if (SUCCEEDED(out_var.pdispVal->QueryInterface(IID_IHTMLWindow2, (void**)&HtmlWindow)))    {
                        _bstr_t name;
                        HtmlWindow->get_name(&name.GetBSTR());
                        if(name==_bstr_t(framename)){
                            IHTMLDocument2 * lpDocWindow;
                            if(SUCCEEDED(HtmlWindow->get_document(&lpDocWindow))){
                                char* rv = GetHtmlBody(lpDocWindow);
                                //чистим за собой перед выходом
                                HtmlWindow->Release();
                                VariantClear(&out_var);
                                FramesCollection->Release();
                                lpDocWindow->Release();
                                return rv;
                            }
                        }
                        HtmlWindow->Release();
                    }
                    VariantClear(&out_var);
                }

            }
        }
        FramesCollection->Release();
    }
    return new char('\0');            //error
}

char* FindSiteFrameByName(char*site,char* name)
{
    IShellWindows* m_spSHWinds;
    if (SUCCEEDED(CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_ALL, IID_IShellWindows, (void **)&m_spSHWinds))){
        VARIANT v;
        v.vt = VT_I4;

        m_spSHWinds->get_Count(&v.lVal);
        for (long i = 0; i < v.lVal; i++){
            _variant_t va(i, VT_I4);
            IDispatch* spDisp;
            if (SUCCEEDED(m_spSHWinds->Item(va, &spDisp)) && spDisp)
            {
                IWebBrowser2* spBrowser;
                if(SUCCEEDED(spDisp->QueryInterface(__uuidof(IWebBrowser2),(void**)&spBrowser)) && spBrowser != NULL){
                    BSTR strURL;
                    if(SUCCEEDED(spBrowser->get_LocationURL(&strURL))){
                        char* docURL = ToAnsi(strURL);
                        if(!strstr(docURL,site)) {
                            free(docURL);
                            continue;        //не наш сайт -> пропускаем
                        }
                        free(docURL);
                        IDispatch* spDisp2;
                        if(spBrowser->get_Document(&spDisp2) == S_OK && spDisp!= 0){

                            IHTMLDocument2 *spHtmlDocument;
                            if(SUCCEEDED(spDisp2->QueryInterface(IID_IHTMLDocument2, (void**) &spHtmlDocument)))    {
                                char* rv = GetFrameHTMLBodyByName(spHtmlDocument,"voc_shower_priv");
                                //чистимся перед выходом
                                spDisp2->Release();
                                spBrowser->Release();
                                spDisp->Release();
                                m_spSHWinds->Release();
                                return rv;
                            }
                            spDisp2->Release();
                        }
                    }
                    spBrowser->Release();
                }
                spDisp->Release();
            }
        }
        m_spSHWinds->Release();
    }
    return new char('\0');    //error?
}

код немного кривоват.. стоит использоветь С++ врапперы всеже...а то ручками счиитать ссылки эээх...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Rickert
Дата 18.6.2007, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



А почему нельзя просто закачать эту страницу как обычный файл?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Miha_086
Дата 18.6.2007, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.6.2007

Репутация: нет
Всего: нет



потому что это должен быть информационный сборщик, который авоматически загружает инфу с данных ему страниц
PM MAIL   Вверх
Kill_em_all
Дата 26.6.2007, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.4.2005

Репутация: нет
Всего: нет



А не проще будет, если страница будет загружаться непосредственно
с сервера ( по протоколу http ). Почитай RFC.

Тем более в VC# есть специальный класс для работы с http.   
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.