Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BHO и получение ссылок на веб-странице, программный переход по ссылкам 
V
    Опции темы
MANAB
  Дата 17.5.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 17.5.2009
Где: Беларусь, Минск

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



У меня задача написать программу, которая бы переходила по ссылкам на сайте в заданном порядке. Начал курить BHO, нашел как переходить по ссылке. А вот как получить все ссылки на открытой странице - не знаю. Подскажите, что искать или как делать. smile 
PM MAIL ICQ   Вверх
MANAB
Дата 25.5.2009, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 17.5.2009
Где: Беларусь, Минск

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



Вот собственно, сделал что нужно. Сильно помог топик http://forum.vingrad.ru/forum/topic-248465.html (хоть бы кто отправил туда^^):

Код

//обработка загруженной страницы
void STDMETHODCALLTYPE CHelloWorldBHO::OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL)
{
    //***********Возможно-полезный код^^)********
    // Retrieve the top-level window from the site.
    /*HWND hwnd;
    HRESULT hr = m_spWebBrowser->get_HWND((LONG_PTR*)&hwnd);*/

    //Получаем URL открытого документа/папки
    USES_CONVERSION;
    CComBSTR bsUrl;
    m_spWebBrowser->get_LocationURL( &bsUrl );     
    LPSTR lpstrUrl = W2A( bsUrl );
    if ( strstr( lpstrUrl, "myspace.com" ) != NULL )
    //MessageBox( NULL, lpstrUrl, L"BHO", MB_OK );
    //if (SUCCEEDED(hr))
    {
        // Output a message box when page is loaded.
        MessageBox( NULL, A2T( lpstrUrl ), L"BHO", MB_OK );

        //******Код для переходы по ссылке***********
        /*CComVariant postData("userid=me;password=test");
        char* postDataString = "userid=me;password=test";
        int len = strlen(postDataString);
        postData.vt = VT_ARRAY;
        postData.parray = SafeArrayCreateVector(VT_UI1, 0, len);
        void HUGEP* safeData;
        hr = SafeArrayAccessData(postData.parray, &safeData);
        memcpy(safeData, postDataString, len);
        hr = SafeArrayUnaccessData(postData.parray);

        CComVariant targetFrame(L"_blank");
        CComVariant vNull;
        CComVariant flags((int)navNoReadFromCache); // workaround

        // Use a different window to navigate.
        //hr = m_spWebBrowser->Navigate(L"http://www.yahoo.com", &vNull, &targetFrame, &postData, &vNull);

        // Use the original window to navigate. 
        //*******Нам нужно это***********
        hr = m_spWebBrowser->Navigate(L"http://www.yahoo.com", &vNull, &vNull, &vNull, &vNull);

        // Use the workaround to navigate.
        hr = m_spWebBrowser->Navigate(L"http://www.yahoo.com", &flags, &vNull, &vNull, &vNull);*/
        //********************************************

        // Пробуем получить html-документ
        CComPtr<IDispatch> pDispDoc;
        m_spWebBrowser->get_Document( &pDispDoc );
        CComQIPtr<IHTMLDocument2> pHtmlDoc( pDispDoc );

        //Получаем гиперссылки
        IHTMLElementCollection *pLinksCollection = NULL;
        pHtmlDoc->get_links( &pLinksCollection );
        LPSTR lpstrLink;
        long iLength = 0;
        pLinksCollection->get_length( &iLength );
        VARIANT varName, varIndex;
        //пробегаемся по всем и смотрим инфу
        for ( int i = 0; i < iLength; i++ )
        {
            varName.vt = VT_I4;
            varName.lVal = i;
            varIndex.vt = VT_I4;
            varIndex.lVal = 1;
            IDispatch *pdisp2 = NULL;

            if ( pLinksCollection->item( varName, varIndex, &pdisp2 ) != S_OK )
                break;

            if ( pdisp2 == NULL )
                break;

            IHTMLElement *pItem = NULL;
            pdisp2->QueryInterface( IID_IHTMLElement, ( LPVOID* ) &pItem );
            if ( pItem == NULL )
                break;

            VARIANT varVal;
            pItem->getAttribute( L"href", 4, &varVal );
                                                
                                                //Наш линк
            lpstrLink = OLE2A( varVal.bstrVal );
            LPCTSTR lpctstrLink = A2W( lpstrLink );
            //MessageBox( NULL, lpctstrLink, L"", MB_OK );
        }
    }
}

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


 




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


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

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