Не как не могу понять что не так. тестировал с ya.ru и кнопка нажимает на <a href="http://www.artlebedev.ru" onclick="c(this,17,1084)">Студия Артемия Лебедева</a> и загружает эту ссылку. =((
Пробовал получить идентификаторы кнопок со страничке в лист бокс диалога, что-то не то получаю, не могу понять =(
// Получаем указатель на вид
CFrameWnd * pF = (CFrameWnd *)(AfxGetMainWnd());
ASSERT_VALID( pF );
CHtmlView * pHV = (CHtmlView *)(pF->GetActiveView());
ASSERT_VALID( pHV );
// Получаем указатель на диспетчерский интерфейс
// объекта документа
IDispatch * pDp = pHV->GetHtmlDocument();
if( pDp != NULL )
{
// Получаем указатель на интерфейс IHTMLDocument2
// для доступа к свойствам и методам объекта
IHTMLDocument2 * pHD2;
HRESULT hr;
hr = pDp->QueryInterface(IID_IHTMLDocument2,(void**)&pHD2 );
if(hr == S_OK)
{
// Получаем указатель на набор анкеров
IHTMLElementCollection * pColl = NULL;
hr = pHD2->get_all( &pColl );
if( hr == S_OK && pColl != NULL )
{
LONG nElem;
hr = pColl->get_length( &nElem );
for( long i = 0; i < nElem; i++ )
{
_variant_t vIndex( i );
_variant_t vName = vIndex;
IDispatch * pDisp2;
hr = pColl->item( vName, vIndex, &pDisp2 );
IHTMLElement *pElem;
hr = pDisp2->QueryInterface(IID_IHTMLElement, (void**) &pElem);
pElem ->click();
pDisp2->Release();
}
pColl->Release();
}
pHD2->Release();
}
pDp->Release();
}
Re: Как программно нажать кнопку на HTML странице в MFC
Блин что за неудобный интерфейс форума =((
мне нужно получить указатель на каждый из элементов <Anchor> для получения id кнопок и потом их можно будет включить в список?
Re[4]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, ny4ulo, Вы писали:
N>Блин что за неудобный интерфейс форума =(( N>мне нужно получить указатель на каждый из элементов <Anchor> для получения id кнопок и потом их можно будет включить в список?
Метод меняет текст на sText для элемента с id == sDivID. Только в случае с ya.ru у кнопки "Найти" нет id, но у нее есть value.
Я не пойму что тебе нужно, создать список (список чего?) или нажать на кнопку "Найти"?
Re[5]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, MTimur, Вы писали:
MT>Здравствуйте, ny4ulo, Вы писали:
N>>Блин что за неудобный интерфейс форума =(( N>>мне нужно получить указатель на каждый из элементов <Anchor> для получения id кнопок и потом их можно будет включить в список?
MT>В качестве примера MT>
MT>Метод меняет текст на sText для элемента с id == sDivID. Только в случае с ya.ru у кнопки "Найти" нет id, но у нее есть value. MT>Я не пойму что тебе нужно, создать список (список чего?) или нажать на кнопку "Найти"?
мне нужно найти на сайте кнопку и нажать ее программно
Re[6]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, ny4ulo, Вы писали:
N>Здравствуйте, MTimur, Вы писали: N>мне нужно найти на сайте кнопку и нажать ее программно
Ну так в исходном примере ты это и делаешь, только жмешь на все кнопки. Отфильтруй лишнее, проверяй свойства, которые идентифицируют нужную кнопку однозначно.
Re[7]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, MTimur, Вы писали:
MT>Здравствуйте, ny4ulo, Вы писали:
N>>Здравствуйте, MTimur, Вы писали: N>>мне нужно найти на сайте кнопку и нажать ее программно
MT>Ну так в исходном примере ты это и делаешь, только жмешь на все кнопки. Отфильтруй лишнее, проверяй свойства, которые идентифицируют нужную кнопку однозначно.
я не могу понять как это сделать
Re[8]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, ny4ulo, Вы писали:
N>Здравствуйте, MTimur, Вы писали:
MT>>Здравствуйте, ny4ulo, Вы писали:
N>>>Здравствуйте, MTimur, Вы писали: N>>>мне нужно найти на сайте кнопку и нажать ее программно
MT>>Ну так в исходном примере ты это и делаешь, только жмешь на все кнопки. Отфильтруй лишнее, проверяй свойства, которые идентифицируют нужную кнопку однозначно.
N>я не могу понять как это сделать
IHTMLElement::getAttribute Method
В случае с ya.ru нужно получить значение свойства value (strAttributeName = "value"), проверить результат (AttributeValue) на !NULL и на соответствие строке "Найти".
Re[9]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, fddima, Вы писали:
F>Здравствуйте, MTimur, Вы писали:
F>Эээ... а просвятите! F>Не проще все эти программные нажимания и поиск нужной кнопки делать через JS?
проще. но задание было такое=)
как я понимаю этими манипуляциями можно работать с IEplorerom, а как можно обратиться к объектам других браузеров, как я понял они все по разному работают с объектам и все зависит от движка браузера?
Re[11]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, ny4ulo, Вы писали:
N>как я понимаю этими манипуляциями можно работать с IEplorerom, а как можно обратиться к объектам других браузеров, как я понял они все по разному работают с объектам и все зависит от движка браузера?
Именно так — у всех свои ограничения / интерфейсы / свои правила игры. Но у всех есть возможность выполнить кусок JavaScript, — тем более что подобные задачи из JS решаются очень просто, и по факту вероятнее всего — будет даже быстрее, чем сканить DOM извне — это везде очень дорогое удовольствие.
Re[12]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, fddima, Вы писали:
F>Здравствуйте, ny4ulo, Вы писали:
N>>как я понимаю этими манипуляциями можно работать с IEplorerom, а как можно обратиться к объектам других браузеров, как я понял они все по разному работают с объектам и все зависит от движка браузера? F> Именно так — у всех свои ограничения / интерфейсы / свои правила игры. Но у всех есть возможность выполнить кусок JavaScript, — тем более что подобные задачи из JS решаются очень просто, и по факту вероятнее всего — будет даже быстрее, чем сканить DOM извне — это везде очень дорогое удовольствие.
Хочешь сказать, написать программу на JS которая будет работать с браузерами?
Re[13]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, ny4ulo, Вы писали:
F>> Именно так — у всех свои ограничения / интерфейсы / свои правила игры. Но у всех есть возможность выполнить кусок JavaScript, — тем более что подобные задачи из JS решаются очень просто, и по факту вероятнее всего — будет даже быстрее, чем сканить DOM извне — это везде очень дорогое удовольствие. N>Хочешь сказать, написать программу на JS которая будет работать с браузерами?
Я хочу сказать, что всё зависит от ситуации.
Если это собственные страницы, то проще что бы она сама предоставляла все необходимые сервисы для нативного кода: т.е. там например в window.view.XXXX был бы уже набор функций для взаимодействия.
Если страницы чужие и нам реально необходимо выполнять поиск, то выполняем простенькие срипты, например нажимаем на button, если id известен:
browser.InvokeScript("document.getElementById('myButton').click();"); // нажимаем кнопку, если её ID известен
И т.д. Опять же, во всех мажорных браузерах последних версий native css selector engine уже есть.
Хотя безусловно причины работать "напрямую" с DOM — могут быть, но едва ли это необходимо для того что бы программно нажать на кнопку.
Re[14]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, fddima, Вы писали:
F>Здравствуйте, ny4ulo, Вы писали:
F>>> Именно так — у всех свои ограничения / интерфейсы / свои правила игры. Но у всех есть возможность выполнить кусок JavaScript, — тем более что подобные задачи из JS решаются очень просто, и по факту вероятнее всего — будет даже быстрее, чем сканить DOM извне — это везде очень дорогое удовольствие. N>>Хочешь сказать, написать программу на JS которая будет работать с браузерами? F> Я хочу сказать, что всё зависит от ситуации. F>Если это собственные страницы, то проще что бы она сама предоставляла все необходимые сервисы для нативного кода: т.е. там например в window.view.XXXX был бы уже набор функций для взаимодействия.
F>Если страницы чужие и нам реально необходимо выполнять поиск, то выполняем простенькие срипты, например нажимаем на button, если id известен: F>
browser.InvokeScript("document.getElementById('myButton').click();"); // нажимаем кнопку, если её ID известен
F>И т.д. Опять же, во всех мажорных браузерах последних версий native css selector engine уже есть.
F>Хотя безусловно причины работать "напрямую" с DOM — могут быть, но едва ли это необходимо для того что бы программно нажать на кнопку.
хочешь сказать можно написать программу на с++ которая буде работать с браузерами посредством java?
Re[15]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, ny4ulo, Вы писали:
F>>Хотя безусловно причины работать "напрямую" с DOM — могут быть, но едва ли это необходимо для того что бы программно нажать на кнопку. N>хочешь сказать можно написать программу на с++ которая буде работать с браузерами посредством java?
Да, посредством javascript.
Re[16]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, fddima, Вы писали:
F>Здравствуйте, ny4ulo, Вы писали:
F>>>Хотя безусловно причины работать "напрямую" с DOM — могут быть, но едва ли это необходимо для того что бы программно нажать на кнопку. N>>хочешь сказать можно написать программу на с++ которая буде работать с браузерами посредством java? F> Да, посредством javascript.
бла я нуб в это, какой нибудь примерчик можно. или где посмотреть можно.
Re[17]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, ny4ulo, Вы писали:
N>>>хочешь сказать можно написать программу на с++ которая буде работать с браузерами посредством java? F>> Да, посредством javascript. N>бла я нуб в это, какой нибудь примерчик можно. или где посмотреть можно.
Я думаю в случае с IE плясать нужно от IHTMLWindow2::execScript().
Re[18]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, fddima, Вы писали:
F>Здравствуйте, ny4ulo, Вы писали:
N>>>>хочешь сказать можно написать программу на с++ которая буде работать с браузерами посредством java? F>>> Да, посредством javascript. N>>бла я нуб в это, какой нибудь примерчик можно. или где посмотреть можно. F> Я думаю в случае с IE плясать нужно от IHTMLWindow2::execScript().
ну а с другими браузерами?Спасибо за подсказку
Re[19]: Как программно нажать кнопку на HTML странице в MFC
Здравствуйте, ny4ulo, Вы писали:
N>>>бла я нуб в это, какой нибудь примерчик можно. или где посмотреть можно. F>> Я думаю в случае с IE плясать нужно от IHTMLWindow2::execScript(). N>ну а с другими браузерами?Спасибо за подсказку
Ну и в других есть аналогичные способы. В webkit, по идее у webframe, есть функции executeJavaScript/executeJavaScriptAndReturnValue.