Программирование на Delphi и не только Как получить список всех ссылок всех фреймов страницы? | Программирование на Delphi и не только

Delphi FAQ >> Интернет

Найти все ссылки на странице в простейшем случае довольно просто. Но что делать если на странице во фреймах содержатся другие страницы?

Разместите на форме 3 компонента:

WebBrowser1: TWebBrowser; Button1: TButton;

ListBox1: TListBox;

При показе формы загрузим нужную страницу в WebBrowser1:

procedure TForm1.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate('http://delphiblog.ru/');
end;

При нажатии на кнопку извлечем все ссылки со всех фреймов:

procedure TForm1.Button1Click(Sender: TObject);
var    u : variant;    v : IDispatch;

   s : string;

   // рекурсивная функция для обработки фреймов
   procedure RetrieveLinks(DocHtml: variant);
   var      BodyElement : variant;      ElementCo: variant;      HTMLFrames: variant;      HTMLWnd : variant;      j, i : integer;

   begin

     if VarIsEmpty(DocHtml) then
       exit;

     BodyElement := DocHtml.Body;
     if BodyElement.tagName = ‘BODY’ then
     begin        ElementCo := DocHtml.links;        j := ElementCo.Length — 1;

       for i := 0 to j do

       begin          u := ElementCo.item(i);          s := u.href;

         // добавляем ссылку в ListBox1

         ListBox1.Items.Add(s);

       end;

     end;      HTMLFrames := DocHtml.Frames;      j := HTMLFrames.length — 1;

     for i := 0 to j do

     begin        HTMLWnd := HTMLFrames.Item(i);

       // для каждого фрейма запускаем рекурсивную функцию

       RecurseLinks(HTMLWnd.Document);

     end;

   end;
begin    v := WebBrowser1.document;    ListBox1.Clear;

   // начинаем обработку страницы рекурсивной функцией

   RetrieveLinks(v);

end;

Разработчик 1С очень активно борятся с пиратскими копиями. Поэтому на лицензии 1С экономить не стоит, себе же потом дороже выйдет.