Гуру и знатоки, помогите дельным словом...
Выполняю задачу по заполнению web-формы в запущенном IE.
Доступ к IE затруднения не вызывает:
procedure TpmMain.GetWebDocument;
var
//hIE: HWND;
ShellWindow: IShellWindows;
WB: IWebbrowser2;
spDisp: IDispatch;
IDoc1: IHTMLDocument2;
//Document: Variant;
k: Integer;
begin
ShellWindow := CoShellWindows.Create;
// Получаем инстанс запущего IE
for k := 0 to ShellWindow.Count do
begin
spDisp := ShellWindow.Item(k);
if spDisp = nil then Continue;
spDisp.QueryInterface(iWebBrowser2, WB);
if WB <> nil then
begin
WB.Document.QueryInterface(IHTMLDocument2, iDoc1);
if iDoc1 <> nil then
begin
WB := ShellWindow.Item(k) as IWebbrowser2;
begin
if ScriptFile.SectionExists(Variant(WB.Document).url) then
FillForm(WB.Document);
end;
end;
end;
end;
end;
Заполнение обычный текстовых полей тоже:
procedure TpmMain.FillForm(ADocument: Variant);
var
ovElements: OleVariant;
//ovForms: idispatch;
i, m: integer;
Options: IHTMLSelectElement;
Element: IHTMLElement;
begin
// Перебираем формы на странцие браузера
for m := 0 to ADocument.Forms.Length - 1 do
begin
//ovForms := ADocument.forms.item(m, 0);
ovElements := ADocument.Forms.item(m).elements ;
//Перебираем элементы формы
for i := 0 to ovElements.Length - 1 do
begin
try
//Для текстовых полей
//Element := ovElements.item(i,0) as IHTMLElement;
if (CompareText(ovElements.item(i).tagName, 'INPUT') = 0) and
(CompareText(ovElements.item(i).type, 'text') = 0) then
begin
ovElements.item(i).Value := GetElementValue(ADocument.url, ovElements.item(i).name);
end;
//Для комбобоксов
if (CompareText(ovElements.item(i).tagName, 'SELECT') = 0) then
begin
end;
except
end;
end;
end;
end;
А вот как заполнить элементы типа SELECT (комбобоксы) и РадиоБаттоны - затрудняюсь. С радостью приму любую помощь по моему вопросу.