Что нового

Доступ к фреймам.

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Нужно перевести код (видимо делфи) на autoit.
Вот ссылка на страницу где это обсуждается 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;
Мне бы хотелось, получить доступ к фреймам другого домена в IE. Можно другим известным вам способом. Вся загвоздка в том, что бы победить Access Denied.
Нужно получить интерфейс IHTMLWindow2 для фрейма.
Цена вопроса, 3000 рублей.
 
Верх