Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2010, 17:38   #1
antivir
Новичок
Джуниор
 
Регистрация: 16.11.2010
Сообщений: 2
По умолчанию Delphi: TWebBrowser + внутренняя перелинковка

Задача состоит в том, чтоб зайти на 1ю страничку, вытянуть все ссылки с неё и перейти на каждую, в следствии с последующих тоже вытянуть ссылки и т.д. пока не пройдёт по всем. (для упрощения считать что нет ссылок возвращающие на предидущие странички и все странички сохранены на компьютере)

Код:
 private
  function Linking(K,S: String): Integer;  


function TForm1.Linking(K, S: String): Integer;
var i,j,r:integer; f:string;
   u : variant;
   v : IDispatch;
   ss : string;
          procedure RecurseLinks(htmlDoc: variant);//получение ссылок
          var
          BodyElement : variant;
          ElementCo: variant;
          HTMLFrames: variant;
          HTMLWnd : variant;
          j, i : integer;
    begin
          while WebBrowser1.ReadyState<>4 do 
         Application.ProcessMessages;
         if VarIsEmpty(htmlDoc) then  exit;
         BodyElement := htmlDoc.body;
         if BodyElement.tagName = 'BODY' then  begin
         ElementCo := htmlDoc.links;
         j := ElementCo.Length - 1;
         if j+1>0 then begin //проверка на наличие ссылок
         for i := 0 to j do
   begin
         u := ElementCo.item(i); //присвоение i ссылки
         ss := u.href;               //ссылка в текст форме
         S:=S+' '+SS;               
         listLinks.Items.Add(S); //для вывода "пути" переходов
         Linking(ss,s);             //рекурсия
        end;end;end;
         HTMLFrames := htmlDoc.Frames;
         j := HTMLFrames.length - 1;
         for i := 0 to j do
   begin
        HTMLWnd := HTMLFrames.Item(i);
        RecurseLinks(HTMLWnd.Document);
     end;end;
   begin
      webbrowser1.Navigate(K);
      v := WebBrowser1.document;
      RecurseLinks(v);
   end;

procedure TForm1.Button6Click(Sender: TObject);
begin
listlinks.Clear;              //компонента TListBox
Linking(edit1.Text,'');    //edit1.text некая ссылка на сайт
end;
З.Ы.
Всё бы хорошо, да вот не получается цикл, проходит 1 итерацию и заканчивает действие, т.е. берёт первую со списка ссылку и переходит по ней, пока на последующей не будет новой ссылки и заканчивает работу. (Возможны ошибки, ибо работаю с браузером впервые)

Последний раз редактировалось Stilet; 16.11.2010 в 20:09.
antivir вне форума Ответить с цитированием
Старый 16.11.2010, 22:01   #2
antivir
Новичок
Джуниор
 
Регистрация: 16.11.2010
Сообщений: 2
По умолчанию

Спасибо за корректировку, задачу уже решил.
По необходимости, удалите тему.
antivir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получить HTML-код из TWebBrowser - Delphi Андрей.12 Работа с сетью в Delphi 4 21.08.2011 04:03
Внутренняя ошибка makarov.y Общие вопросы Delphi 3 16.12.2010 20:32
Incompatible types: 'Unit1.TWebBrowser' and 'SHDocVw.TWebBrowser' simon15x Общие вопросы Delphi 0 10.04.2010 03:11