Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с фреймами в CppWebBrowser

9.5K
16 декабря 2006 года
zergman
53 / / 09.11.2006
Есть програма которая умеет вводить текск в поля,
чекалть боксы и нажимать кнопки.
На обычном сайте все работает ок.
Только вот не знаю как это организовать
на сайте с фреймами. Допустим есть 4 фрейма,
программа должна нажать Submit во втором фрейме.
Имя фрейма меняется с перезагрузкой страницы.

Есть какие либо идеи?
386
16 декабря 2006 года
newcss
297 / / 05.04.2005
Юзай поиск по моему нику, здесь я данную тему очень хорошо раассматривал.
А если в кратце, то тебе нужно:
у IHTMLDocument2 есть функция get_frames(IHTMLFramesCollection2 *pFrames);
далее
pFrames->get_length(&ilFramesCount);
ilFramesCount - количество фреймов на странице.
Далее в цикле перебираешь нужные тебе фреймы.
9.5K
16 декабря 2006 года
zergman
53 / / 09.11.2006
это я нашел давно вот только не знаю куда вставить сам код выполняющий сабмит(
9.5K
16 декабря 2006 года
zergman
53 / / 09.11.2006
если можешь приведи плз пример, вот код который заполняет:

IHTMLDocument2 *pHTMLDocument = NULL;
WideString Login = WideString(LoginString); //WideString(LoginPromt);
WideString Password = WideString(PasswordString); //WideString(PasswordPromt);
if(SUCCEEDED(CppWebBrowser1 -> Document -> QueryInterface ( IID_IHTMLDocument2, ( LPVOID* )&pHTMLDocument ) ) )
{if(pHTMLDocument != NULL ){IHTMLElementCollection *pAll = NULL;
if ( SUCCEEDED ( pHTMLDocument -> get_all ( &pAll ) ) && pAll )
{TVariant vName1 = "login", vName2 = "password";
TVariant vIndex = 0;


IDispatch *pDisp1 = NULL; // UserID
if ( SUCCEEDED ( pAll -> item ( vName1, vIndex, &pDisp1 ) ) && pDisp1 )
{IHTMLInputElement *pInput = NULL;
if ( SUCCEEDED ( pDisp1 -> QueryInterface ( IID_IHTMLInputElement, ( LPVOID* )&pInput ) ) && pInput )
{ pInput->put_value( Login ); pInput -> Release ();
} pDisp1 -> Release (); }

IDispatch *pDisp2 = NULL;
if ( SUCCEEDED ( pAll -> item ( vName2, vIndex, &pDisp2 ) ) && pDisp2 )
{IHTMLInputElement *pInput = NULL;
if ( SUCCEEDED ( pDisp2 -> QueryInterface ( IID_IHTMLInputElement, ( LPVOID* )&pInput ) ) && pInput )
{pInput -> put_value ( Password ); pInput -> Release ();}
pDisp2 -> Release (); } }
pAll -> Release (); }

// click SUBMIT Button
IHTMLElementCollection *HTMLForms = NULL;
if ( SUCCEEDED ( pHTMLDocument -> get_forms ( &HTMLForms ) ) && HTMLForms )
{
TVariant vName3 = "F1";
TVariant vIndex3 = 0;
IDispatch *pDisp3 = NULL;
if ( SUCCEEDED ( HTMLForms->item( vName3, vIndex3, &pDisp3 ) ) && pDisp3 )
{
IHTMLFormElement *HTMLForm = NULL;
if ( SUCCEEDED ( pDisp3 -> QueryInterface ( IID_IHTMLFormElement, ( LPVOID* )&HTMLForm ) ) && HTMLForm )
{
HTMLForm -> submit ();
HTMLForm -> Release ();
} pDisp3 -> Release (); } HTMLForms -> Release (); }

pHTMLDocument -> Release ();
}

фрейм по счету четвертый, но номер у него 3
386
16 декабря 2006 года
newcss
297 / / 05.04.2005
Код:
// полуяаем коллекцию фреймов
if(SUCCEEDED(iDoc->get_frames(&pFrames)))
{
  //узнаем сколько всего фреймов    
 pFrames->get_length(&ilFramesCount);
if(ilFramesCount < 2) ilFramesCount= 0;
VARIANT vFrame;
VARIANT ret;
vFrame.vt = VT_UINT;

//получаем доступ к каждому определенному фрейму
for(long ilFrameIndex = 0; ilFrameIndex < ilFramesCount; ilFrameIndex++)
{
vFrame.lVal = ilFrameIndex; // индекс фрейма
if(SUCCEEDED(pFrames->item(&vFrame, &ret)))
{
  IHTMLWindow2 *pWindow = NULL;
  IHTMLDocument2  *iDoc_go=NULL;
  IHTMLElementCollection *iEcol_go=NULL;
  IHTMLElement *Links_element=NULL;
  if(SUCCEEDED(ret.pdispVal->QueryInterface(IID_IHTMLWindow2,(LPVOID*)&pWindow)))
  {
      /*
       pWindow - через него можем управлять фреймом
  */
   
}
}
}
}
9.5K
16 декабря 2006 года
zergman
53 / / 09.11.2006
pishu s moba big thx kogda pridu domoi poprobuiu
9.5K
16 декабря 2006 года
zergman
53 / / 09.11.2006
млин вот я бот(

наверное тут все криво поставлено, подскажите плз чтоб зарботало
Код:
String Login = "testlogin";

IHTMLDocument2 *HTMLDocument = NULL;
LONG ilFramesCount = 0;


if(!Browser->Busy && Browser->Document &&
AnsiString(Browser->LocationURL) != "about :blank" &&
SUCCEEDED(Browser->Document->QueryInterface(
IID_IHTMLDocument2, (LPVOID*)&HTMLDocument)))
{

IHTMLFramesCollection2 *pFrames = NULL;
if(SUCCEEDED(HTMLDocument->get_frames(&pFrames)))
{

 pFrames->get_length(&ilFramesCount);
if(ilFramesCount < 2) ilFramesCount= 0;
VARIANT vFrame;
VARIANT ret;
vFrame.vt = VT_UINT;


vFrame.lVal = 3;//ilFrameIndex
if(SUCCEEDED(pFrames->item(&vFrame, &ret)))
{
  IHTMLWindow2 *pWindow = NULL;
  IHTMLDocument2  *iDoc_go=NULL;
  IHTMLElementCollection *iEcol_go=NULL;
  IHTMLElement *Links_element=NULL;
  if(SUCCEEDED(ret.pdispVal->QueryInterface(IID_IHTMLWindow2,(LPVOID*)&pWindow)))
  {


TVariant vName1 = "login", vIndex = 0;

IDispatch *pDisp1 = NULL;
if ( SUCCEEDED ( pWindow -> item ( vName1, vIndex) ) && pDisp1 )
{IHTMLInputElement *pInput = NULL;
if ( SUCCEEDED ( pDisp1 -> QueryInterface ( IID_IHTMLInputElement, ( LPVOID* )&pInput ) ) && pInput )
{pInput -> put_value (); pInput -> Release ();}
pDisp1 -> Release ();        }      }
     pWindow -> Release ( Login );    }

  }
  }
}*/
}
}
HTMLDocument->Release();

}


Надо работать только с 3им фреймом, остальные не нужны
9.5K
17 декабря 2006 года
zergman
53 / / 09.11.2006
спасибо всем сам разобрался
386
03 мая 2007 года
newcss
297 / / 05.04.2005
разобрался сАм помоги другим =). выложив окончательный рабочий вариант =)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог