Конференция "Corba" » InternetExplorer.Application link Click [Delphi, 5, Windows, xp]
 
  • ustas (28.03.07 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 © (28.03.07 11:40) [1]

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


    А зачем? нельзя просто по ссылке перейти?
  • ustas (28.03.07 12:01) [2]
    Можно и просто по ссылке, но требуется именно клик.
    Уже почти расковырял.
  • cannibaloidos © (03.04.07 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;

 
Конференция "Corba" » InternetExplorer.Application link Click [Delphi, 5, Windows, xp]
Есть новые Нет новых   [134431   +9][b:0][p:0.002]