Форум: "Corba";
Текущий архив: 2011.07.10;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Corba";
Текущий архив: 2011.07.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c