| 
| 
 | Вопрос # 1 064/ вопрос открыт / | 
 |  Здравствуйте, эксперты!Доброго времени суток, уважаемые эксперты!
 Как получить доступ к объекту (кнопка, label,textedit) на любой интернет странице. Например чтобы получить текст который написан в поле textedit или в label или в поле где вводят пароль, к примеру на этом сайте (с коментариями)
 и не пишите что можно воспользовать ся какими то там программами если не знаете то не пишите не чего
 ЕСЛИ НЕ ЗНАЕТЕ НАПИШИТЕ ХОТЯБЫ ГДЕ МОЖНО НАЙТИ
 
|  |   Вопрос задал: wolfworl-1427 (статус: Посетитель)Вопрос отправлен: 31 октября 2007, 20:58
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, wolfworl!На интернет странице нет никаких объектов типа кнопка, label, extedit. Если Вы имеете ввиду изменить текст в одном из полей ввода на загруженной Web-странице, то это нужно относить вопрос к работе с Internet Explorer, поскольку в других браузерах это вообще невозможно (я почти уверен в этом). Но даже в IE это не так просто - элементы на web-страницах в IE это вовсе не кнопки и не поля ввода в Windows смысле, т.е. это не "окно", оно не имеет Handle и вообще, только изображает работу нормальных элементов.
 
 Используя OLE можно получить доступ к этим элементам (интерфейсы) и работать с ними. В приложении пример, который выводит содержимое активного элемента всех запущенных копий IE, а также дает возможность изменить это содержимое (innerHTML). Покопавшись в MSHTML_TLB.pas (я моленько подправил его под себя, т.к. компилятор ругался на IHTMLDocument, должно быть это связанно с IE 7) можно добавить и большую функциональность, например обрабатывать события.
 К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 Приложение:Переключить в обычный режим procedure TForm1.Button1Click(Sender: TObject);var  ShellWindow: IShellWindows;  WB: IWebbrowser2;  spDisp: IDispatch;  IDoc1: IHTMLDocument2;  k: Integer;  ws : WideString; begin Memo1.Lines.Clear;  ShellWindow := CoShellWindows.Create; 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;        ws := (iDoc1.activeElement as IHTMLElement).Get_innerHTML;        Memo1.Lines.Add(WB.LocationURL);        Memo1.Lines.Add('--------------');        Memo1.Lines.Add(ws);        Memo1.Lines.Add('');      end;    end; end;end; procedure TForm1.Button2Click(Sender: TObject);var  ShellWindow: IShellWindows;  WB: IWebbrowser2;  spDisp: IDispatch;  IDoc1: IHTMLDocument2;  k: Integer;  ws : WideString; begin  ShellWindow := CoShellWindows.Create; 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;        ws := Memo2.Lines.Text;        (iDoc1.activeElement as IHTMLElement).Set_innerHTML(ws);      end;    end; end;end;
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |