Здравствуйте, Flamer, Вы писали:
F>Здравствуйте, jer2, Вы писали:
J>>доброго времени суток
J>>задача такая: открыть IE, ввести ему нужный урл и перейти по нему (с этим справился), а дальше надо как-то автоматически заполнить поля формы и нажать сабмит. Как получить загрузившийся документ разобрался, а вот как что-то в нём набрать, нажать?
F>В общем, если у вас есть IHTMLDocument2*, то можно получить у него коллекцию форм (IHTMLDocument2::get_forms), затем для каждого элемента коллекции получить IHTMLFormElement*, пройтись по всем полям (IHTMLFormElement::length и IHTMLFormElement::item), для каждого элемента получить его тип (например, привести полученный с помощью IHTMLFormElement::item IDispatch* к IHTMLInputTextElement), сделать, что нужно (заполнить текстом, например), а потом вызвать IHTMLFormElement::submit.
F>Вот такой алгоритм. Если что непонятно, то можно запустить поиск по сайту, введя в строку поиска один из упоминающихся интерфейсов и сразу найдутся даже куски кода, которые я неоднократно постил в ответ на подобные вопросы. Удачи.
Один из способов запустить IE и получить интерфейс IWebBrowser2 в свои руки (имея IWebBrowser2 очень просто добраться к IHTMLDocument2) — (примеры — на делфи, в случае необходимости реализации на си — ищите по именам функций, методов и интерфейсов)
var
iWB: IWebBrowser2;
..
iWB := CreateOleObject('InternetExplorer.Application.1') as IWebBrowser2;
iWB.Set_Visible(TRUE);
далее запускаем навигацию
var
ov: olevariant;
..
ov := '
www.google.com';
iWB.Navigate2(ov, emptyparam, emptyparam, emptyparam, emptyparam);
по окончании навигации у iWB.Document попросим через QueryInterface дать нам IHTMLDocument2, далее — см. Flamer