В общем, такая задача: написать программулину, которая заполняет web-форму и нажимает кнопку Submit. Собственно, делается это всё для того, чтобы автоматически заполнить большой каталог описаний товаров из БД. Поэтотму собственно RoboForm - не вариант. Понятно, что делать это проще всего через ActiveX интернет эксплорер, но тут у меня возникли вопросы, каким образом можно получить с загруженной страницы все текстовые поля типа INPUT, изменить их свойство text, и нажать на кнопку? Начал я писать программу на C# (можно и на C++, тут просто C# нагляднее), но что-то как-то не разобрался как можно докопаться до полей и кнопочек. Фрагмент: Код: //... private void browser_NavigateComplete(...) mshtml.IHTMLDocument2 HTMLDoc = (mshtml.IHTMLDocument2)browser.Document; mshtml.IHTMLElementCollection ElementsCollection = (mshtml.IHTMLElementCollection)HTMLDoc.all; foreach (mshtml.IHTMLElement element in ElementsCollection) { string sName = element.getAttribute("name", 0).ToString(); MessageBox.Show(sName); } выдаёт лишь встречающиеся в документе теги HTML, META... Тут всплывает первый вопрос: чем различаются интерфейсы HTMLDocument, HTMLDocument2, HTMLDocument3, HTMLDocument4 и HTMLDocument5? Что-то в MSDN не нашёл толкового разъяснения на эту тему. И чем также различаются команды Navigate и Navigate2. Что-то мне подсказывает, что всё довольно просто...
в приведенном примере после mshtml.IHTMLDocument2 HTMLDoc = (mshtml.IHTMLDocument2)browser.Document надо посмотреть коллекцию HTMLDoc.Forms и затем для Forms просматривать коллекцию elements, вылавливая все с tagName="INPUT" и анализируя свойство type. если type="text" присвоить значение св-ву Value, если type="submit" то сделать Click или сделать submit всей форме. А можно через Navigate, вручную сформировав PostData.Примеры есть в msdn.
Спасибо Собственно, главная загвоздка окзалась в NavigateComplete. Оказывается, нужно было обрабатывать DocumentComplete. И тогда уже всё ок. Кому интересно: Код: private void browser_DocumentComplete(object sender, Microsoft.InternetExplorer.ActiveX.NavigateEventArgs e) { lstDebug.Items.Add("DocumentComplete: " + browser.HtmlDocument.url + " (" + browser.HtmlDocument.all.length + ") elements"); foreach (mshtml.IHTMLElement el in browser.HtmlDocument.all) { if (el.tagName == "INPUT") { string sValue = el.getAttribute("value", 0).ToString(); lstDebug.Items.Add(" value = " + sValue + ", type = " + el.ToString()); } } }