inververs
AutoIT Гуру
- Сообщения
- 2,135
- Репутация
- 465
Нужно перевести код (видимо делфи) на autoit.
Мне бы хотелось, получить доступ к фреймам другого домена в IE. Можно другим известным вам способом. Вся загвоздка в том, что бы победить Access Denied.
Нужно получить интерфейс IHTMLWindow2 для фрейма.
Цена вопроса, 3000 рублей.
Вот ссылка на страницу где это обсуждается http://www.programmersforum.ru/showthread.php?t=207446
Код:
procedure TForm1.Button1Click(Sender: TObject);
// Эта функция была найдена на просторах Интернета
// Один из авторов - Rik Barker
function CrossDomainFrame(Doc : IHTMLDocument2;
nFrame : Integer) : IWebBrowser2;
var
theContainer : IOLEContainer;
Enumerator : IEnumUnknown;
nFetched : PLongInt;
unknownFrame : IUnknown;
begin
Result := nil;
nFetched := nil;
theContainer := Doc as IOleContainer;
theContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enumerator);
Enumerator.skip(nFrame);
Enumerator.next(1, unknownFrame, nFetched);
unknownframe.QueryInterface(IID_IWebBrowser2, Result);
end;
var
Doc : IHTMLDocument2;
Frames : IHTMLFramesCollection2;
i, j : Integer;
iCurr, iLink : OleVariant;
Disp : IDispatch;
Frame : IHTMLWindow2;
Lnk : IHTMLElementCollection;
CurrLnk : IHTMLElement;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;
Frames := Doc.frames;
for i := 0 to Frames.length - 1 do
begin
iCurr := i;
Disp := Frames.item(iCurr);
OleCheck(Disp.QueryInterface(IID_IHTMLWindow2, Frame));
// Для надежности работаем со всеми фреймами, как с междоменными:
Doc := CrossDomainFrame(WebBrowser1.Document as iHTMLDocument2,
iCurr).document as iHTMLDocument2;
// Теперь возьмем линки, присутствующие на текущем фрейме
Lnk := Doc.links;
for j := 0 to Lnk.length - 1 do
begin
iLink := j;
CurrLnk := Lnk.item(varEmpty, iLink) as IHTMLElement;
// и на 5-ом фрейме (на твоей странице это блок Гуглорекламы)
// жмем первую ссылку:
if (i = 4) and (j = 0) then
begin
CurrLnk.click;
Exit; // Всё, выходим из перебора
end;
end;
end;
end;
Нужно получить интерфейс IHTMLWindow2 для фрейма.
Цена вопроса, 3000 рублей.