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

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

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

ebBrowser1: TWebBrowser;
Button1: TButton;
ListBox1: TListBox;

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

procedure TForm1.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate('https://mywebcenter.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;

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *