Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IHTMLDocument2 получение всех ссылок 
:(
    Опции темы
Matematik
Дата 6.5.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: нет
Всего: 50



Чтобы получить ссылки использую такой код
Код

unit uParseHTML;    
interface    
uses Classes, mshtml, ActiveX, Variants;    
procedure Init_parser;    
procedure Close_parser;    
procedure daj_all_link(var aBuff:AnsiString;aLinkList,aTextList:TStrings);    
implementation    
var    
  iDoc : IHTMLDocument2;    
procedure Init_parser;    
begin    
  idoc := CoHTMLDocument.Create as IHTMLDocument2;    
end;    
procedure Close_parser;    
begin    
  if assigned(iDoc) then    
  begin    
    iDoc.Close;    
    iDoc := nil;    
  end;    
end;    
procedure set_buff(var aBuff:AnsiString);    
var v : Variant;    
begin    
  v    := VarArrayCreate([0, 0], varVariant);    
  v[0] := aBuff;    
  idoc.clear;    
  idoc.write(PSafeArray(TVarData(v).VArray));    
end;    
procedure daj_all_link_2(var aLinkList,aTextList:TStrings);    
var    
  v : OleVariant;    
  j : Integer;    
  d : IDispatch;    
  e : IHTMLElement;    
  l : IHTMLAnchorElement;    
  c : IHTMLElementCollection;    
  z : string;    
  s : string;    
begin    
  aLinkList.Clear;    
  aTextList.Clear;    
  v := 'A';    
  d := iDoc.all.tags(v);    
  if assigned(d) then    
  begin    
    d.QueryInterface(IHTMLElementCollection, c);    
    if assigned(c) then    
    begin    
      for j:=1 to c.Get_length do    
      begin    
        d := c.item(pred(j),0);    
        d.QueryInterface(IHTMLElement, e);    
        d.QueryInterface(IHTMLAnchorElement, l);    
        if assigned(e) and assigned(l) then    
        begin    
          z := l.href;    
          if aLinkList.IndexOf(z)=-1 then    
          begin    
            aLinkList.Add(z);    
            aTextList.Add(e.innerText);    
          end    
        end    
      end    
    end    
  end    
end;    
procedure daj_all_link(var aBuff:AnsiString;aLinkList,aTextList:TStrings);    
begin    
  set_buff(aBuff);    
  daj_all_link_2(aLinkList,aTextList);    
end;    
end.


У ссылок с относительным путем получаю такую хрень
about:blank/path/name.htm

Как в IHTMLDocument2 прописать текуший URL, чтобы ссылки нормальные получались?
  

Это сообщение отредактировал(а) Matematik - 6.5.2006, 15:26
PM MAIL WWW ICQ   Вверх
December
Дата 6.5.2006, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



никак.
гарантирую.
только ручками.
единственный финт, который я не пробовал - это использовать тэг <BASE>, но есть тяжёлое подозрение, что не сработает. 


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Matematik
Дата 7.5.2006, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: нет
Всего: 50



Цитата(December @  6.5.2006,  20:51 Найти цитируемый пост)
использовать тэг <BASE>


БОЛЬШОЕ СПАСИБО
Работает.

Вот никак не мог вспомнить название этого тега. Однажды я с ним очень мучался, когда не мог понять почему в html коде ссылка относительная, а в IE ссылка нормальная.

 
PM MAIL WWW ICQ   Вверх
December
Дата 8.5.2006, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



ух ты smile
не ожидал smile 


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.1361 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.