|
Вопрос # 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;
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|