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

Вниз

InternetExplorer.Application link Click   Найти похожие ветки 

 
ustas   (2007-03-28 09:59) [0]

Очень срочно!!!
Помогите завершить начатое. Не могу выполнить (имитировать) клик по ссылке в IE при использовании InternetExplorer.Application, причем если использовать компонет TWebBrowser клик выполнить (имитировать) достаточно просто. Буду благодарен дельным советам или примерам реализации. Ниже куски кода по теме:

uses windows, Comobj, ActiveX, MiniMSHTML, KOLSHDocVw;
....
const PROCESS_TERMINATE = $0001;
....
var Pid: Cardinal;
   ProcessHandle : THandle;
   IE: IWebBrowser2;
   Doc: IHtmlDocument2;
   iColl:IHTMLElementCollection;
   iElement:IHTMLElement;
   iDisp:IDispatch;
   temp,ov: OleVariant;
   i: Integer;
   str: String;
....
function MessageBoxA(hWnd: cardinal; lpText, lpCaption: PAnsiChar; uType: Cardinal): Integer; stdcall; external "user32.dll" name "MessageBoxA" index 452;

function IsOLEObjectInstalled(Name: String): boolean;
var
 ClassID: TCLSID;
 Rez : HRESULT;
begin
 // Ищем CLSID OLE-объекта
 Rez := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID);
 if Rez = S_OK then  // Объект найден
   Result := true
 else
   Result := false;
end;

begin
 CoInitialize(nil);
 if not IsOLEObjectInstalled("InternetExplorer.Application") then Exit;
 IE := CreateOleObject("InternetExplorer.Application") as IWebBrowser2;
 IE.Visible := True;
 GetWindowThreadProcessId(IE.HWND, @Pid);
 IE.Navigate("www.ya.ru", temp, temp, temp, temp);
 while IE.ReadyState <> READYSTATE_COMPLETE do begin
   Sleep(1);
 end;
 Doc := IE.Document as IHtmlDocument2;
 if (Assigned(Doc)) then begin
   ov := "a";
   IDisp := Doc.all.tags(ov);
   IDisp.QueryInterface(IHTMLElementCollection,iColl);
   for i := 0 to iColl.get_length-1 do begin
     iDisp := iColl.item(i, 0);
     iDisp.QueryInterface(IHTMLElement,iElement);
     str := ielement.getattribute("href",0);
     MessageBoxA(0, PChar(str), PChar("Test"), MB_ICONINFORMATION);
     //сообщение так для примера просто, здесь вот как раз и нужно проверить ссылку и если та что нужна по не кликнуть
  end;//for
 end;
 ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, Pid);
 TerminateProcess(ProcessHandle,4);
 CoUninitialize;
end.


 
tesseract ©   (2007-03-28 11:40) [1]


>  Не могу выполнить (имитировать) клик по ссылке в IE при
> использовании


А зачем? нельзя просто по ссылке перейти?


 
ustas   (2007-03-28 12:01) [2]

Можно и просто по ссылке, но требуется именно клик.
Уже почти расковырял.


 
cannibaloidos ©   (2007-04-03 12:07) [3]


function HTMLLinkClick (Webbrowser1:Twebbrowser;link_text:string):boolean;
var
HtmlDocument: IHtmlDocument2;
 HtmlCollection: IHtmlElementCollection;
 HtmlElement: IHtmlElement;
 I: Integer;
begin
  HtmlDocument := WebBrowser1.Document as IHtmlDocument2;
 HtmlCollection := HtmlDocument.All;
 for I := 0 to HtmlCollection.Length - 1 do begin
   HtmlElement := HtmlCollection.Item(i, 0) as IHtmlElement;
   while htmlelement.innerText=link_text do
   begin
   htmlelement.click;
   Result:=True;
     exit;
   end;
end;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.007 c
15-1300913792
Handbrake
2011-03-23 23:56
2011.07.10
Динамическая пакетная архитектура и БД


15-1300896940
Palladin
2011-03-23 19:15
2011.07.10
Делегаты, анонимные методы, C#


8-1213456540
cavalera
2008-06-14 19:15
2011.07.10
Как отобразить текст в Delphi &amp; DX8


2-1301495507
harisma
2011-03-30 18:31
2011.07.10
TAnimate в Windows 7


15-1301355051
KilkennyCat
2011-03-29 03:30
2011.07.10
как-то мы о много-мониторности говорили...