Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.21;
Скачать: CL | DM;

Вниз

Работа с htm- страницами, загруженными браузером.   Найти похожие ветки 

 
Kisha ©   (2006-02-26 14:21) [0]

Вот проблема. Пишу программу, которая обращается к Internet Explorer (6.0), при этом в браузере загружена страница, html-код которой содержит:
1)  <INPUT name=ans><INPUT type=hidden value=txt name=qtype>

2). <INPUT type=radio value=1 name=ans>
    ......................................................
    <INPUT  type=radio value=6 name=ans>

3). <INPUT  type=CheckBox value=1 name=ans>
    ...........................................................
    <INPUT  type=CheckBox value=6 name=ans>

Как заставить свою программу выставлять галочки и писать значения в такие htm-овские CheckBox, Radio и txt?
Заранее благодарен.


 
n0name   (2006-02-26 19:00) [1]

Тебе надо отправлять данные на веб-сервер?
Ил на локальной странице помечать чекбоксы?


 
Kisha ©   (2006-02-26 22:32) [2]

На локальной странице помечать надо. А потом сам буду отправлять на сервер по нажатии кнопки "Отправить".


 
n0name   (2006-02-27 10:09) [3]

А как ты будешь отлавливать это событие?
Я веду всё это к тому, что можно просто послать POST/GET запрос с помошью WinInet.


 
Style ©   (2006-02-27 11:42) [4]


> На локальной странице помечать надо. А потом сам буду отправлять
> на сервер по нажатии кнопки "Отправить".


Если нужно заполнить локальную страницу, то проще будет
эмулировать нажатия клавиш...

keybd_event
Для начала только нужно найти окно explorera и сделать его активным, а потом переключатся между "контролами" - элементами формы, можно с помощью клавиши табуляции.

НО!


> <INPUT type=hidden value=txt name=qtype>


значение этого параметра тебе не поменять.
qtype - Это скрытый параметр - изменить его с помощью интерфейса пользователя нельзя...

Поэтому самое правильное решение - это

1) Изучить протокол http.
2) Понять что такое GET и POST параметры
3) Самому сформировать GET/POST запрос, заполнить необходимые данные  и отправить на сервер -  причем уже не важно как ты это будешь делать, через WinInet или через напрямую через SocketAPI, или вообще воспользуешся сторонними сторонними компонентами... Главное в первую очередь понять как работает http протокол.

Но если тебе вдруг уж действительно так нужно именно заполнять форму...
То я бы воспользовался JavaScript"ом, а не локальной программой...
Cоздал бы свою html страницу, которая в новом окне бы открывала необходимую форуму и заполняла бы все параметры...


 
NIck Denry ©   (2006-02-27 16:51) [5]

2All, а разве нельзя управлять эксплорером, если создать его как COM-объект? Потом ведь можно получать доступ почти ко всему содердимому, и даже скрипты вызывать ит т.д.


 
Kisha ©   (2006-02-27 19:34) [6]

Мне нужно чтобы именно проставлялись значения, я должен их видеть перед отправкой, чтобы изучить. Это важно.


 
Ihor Osov'yak ©   (2006-02-28 00:15) [7]

see, please, mshtml.pas

Потом по всяким умным идентификаторам, обнаруженым там - поиск в гугле, или сразу в msdn - там в секции реюзинг ие браузер или что то типа того - очень много умных и интересных  вещей написано.. Или мою статью на Королевстве, писалось давно, не все аккуратно написано - то для начала может быть полезной.. Кажется, в подземелье Магов, название - использование функциональности IE. Правда, там в основном вокруг TWebBrowser, но работа с внешним IE почти не отличается, ньюансы лишь в получении начального IHTMLDocument2


 
Nick Denry ©   (2006-02-28 00:29) [8]

[5],[7]

на чистом апи это будет примерно как:


var
  hr : HRESULT;
  lpUnk : IUnknown;
  WebBr : IWebBrowser2;
  EmptyParam : OleVariant;

procedure InitWebBrowserl;
begin
{* Init WebBrowser *}
CoInitialize(nil);
//WebBr := CreateComObject(CLASS_InternetExplorer) as IWebBrowser2;}

lpUnk := nil;
WebBr := nil;

//OleInitialize(nil);

hr := CoCreateInstance(CLASS_InternetExplorer, nil, CLSCTX_SERVER, IUnknown, lpUnk);
hr := lpUnk.QueryInterface(IWebBrowser2, WebBr);
//if Failed(hr) then ShowMessage("Query failed");

WebBr.AddressBar := false;
WebBr.StatusBar := false;
WebBr.MenuBar := false;
WebBr.ToolBar := 0;
WebBr.Left := xPos;
WebBr.Top := yPos;
WebBr.Width := nWidth;
WebBr.Height := nHeight;

WebBr.Visible := true;
WebBr.Navigate(GetARootDir+ szInfoShellPath+"start.htm",
EmptyParam,EmptyParam,EmptyParam,EmptyParam);
end;


 
Nick Denry ©   (2006-02-28 00:33) [9]

Правда для ТWebBrowser"a но все же:


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, OleCtrls, SHDocVw, StdCtrls, MSHTML, ExtCtrls;

type
 TForm1 = class(TForm)
   WebBrowser1: TWebBrowser;
   Button1: TButton;
   Button2: TButton;
   Timer1: TTimer;
   Button3: TButton;
   Button4: TButton;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure WebBrowser1NavigateComplete2(Sender: TObject;
     const pDisp: IDispatch; var URL: OleVariant);
   procedure Button2Click(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure Button4Click(Sender: TObject);
 private
   { Private declarations }
   PageLoaded : boolean;
   document : IHTMLDocument2;
   img1 : IHTMLImgElement;
   n : integer;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  curPage : string;
begin
curPage := GetCurrentDir+"\HTML_02\"+ "index.html";
WebBrowser1.Navigate(curPage);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
PageLoaded := false;
n := 0;
end;

procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;
 const pDisp: IDispatch; var URL: OleVariant);
begin
PageLoaded := true;
end;

procedure TForm1.Button2Click(Sender: TObject);

begin
if PageLoaded = false
then ShowMessage("You must load the page")
else begin
     if WebBrowser1.Document  <> nil then begin
      form1.webBrowser1.Document.QueryInterface(IHTMLDocument2, document);
      document.images.item("img1",0).QueryInterface(IHTMLImgElement, img1);
      if Timer1.Enabled = false then Timer1.Enabled := true;
     end;
    end;
document._Release;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if n = 0 then begin
              img1.src := GetCurrentDir+"\HTML_02\pyramid_sm_h.jpg";
              n := 1;
             end
             else
             begin
                img1.src := GetCurrentDir+"\HTML_02\pyramid_sm.jpg";
                n := 0;
             end;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Timer1.Enabled := false;
img1.src :=  GetCurrentDir+"\HTML_02\pyramid_sm.jpg";
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Timer1.Enabled := false;
img1.src :=  GetCurrentDir+"\HTML_02\pyramid.jpg";
end;

end.


 
Игорь Шевченко ©   (2006-02-28 01:19) [10]


> на чистом апи


Это грязный апи


 
Nick Denry ©   (2006-02-28 01:31) [11]

Согласен, но не важно.



Страницы: 1 вся ветка

Текущий архив: 2006.05.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
4-1141220323
ionn
2006-03-01 16:38
2006.05.21
Как отследить момент закрытия внешнего приложения?


15-1145900987
Джо
2006-04-24 21:49
2006.05.21
Poll: Структурируете ли вы свой код?


2-1146471460
Yo-yo
2006-05-01 12:17
2006.05.21
Сравнение имен файлов


2-1146203130
Негодяй
2006-04-28 09:45
2006.05.21
Стереть саму себя


2-1146937202
Неуч
2006-05-06 21:40
2006.05.21
Типы данных