IE & Links

8 отговора 180 прегледа
#1

IE & Links

Искам да взема всички линкове от HTML файл ввъ отворен прозорец на Internet Explorer. Някой има ли идея какви интерфейси да използвам?

Go on, prove me wrong. Destroy the fabric of the universe. See if I care.
Отговор
в отговор на Rincewind #2

Re: IE & Links

Ами имам...
1. Импортираш MSHTML_TLB - много вероятно е да имаш проблем с опцията Component Wrapper
2. Разглеждаш следния код

procedure TForm1.WebBrowserDocumentComplete(Sender: TObject;
var pDisp: OleVariant; var URL: OleVariant);
var
Doc: IHTMLDocument2;
ElementCollection: IHTMLElementCollection;
HtmlElement: IHTMLElement;
I: Integer;
AnchorString: string;
begin
lstbxLinks.Clear;
// We will process the document at this time. Trying to do
// so earlier won't work because it hasn't fully loaded.
Doc := FInternetExplorer.Document as IHTMLDocument2;
if Doc = nil then
raise Exception.Create('Couldn''t convert the ' +
'FInternetExplorer.Document to an IHTMLDocument2');
// First, grab all the elements on the web page
ElementCollection := Doc.all;
for I := 0 to ElementCollection.length - 1 do
begin
// Get the current element
HtmlElement := ElementCollection.item(I, '') as IHTMLElement;
// Next, check to see if it is a link (tagName will be A).
// You could easily find other tags (such as TABLE, FONT, etc.)
if HTMLElement.tagName = 'A' then
begin
// Now grab the innerText for this particular link. The innerText is
// all text that is inside of the particular tag. For example,
// this would give us "Go To Borland" from the HTML:
// <a href="[линк]"><b>Go To Borland</b></a>.
// If you want "<b>Go To Borland</b>" use innerHTML.
AnchorString := HtmlElement.innerText;
if AnchorString = '' then
AnchorString := '(Empty Name)';
// We know that the element is an IHTMLAnchorElement since the tagName
// is 'A'.
AnchorString := AnchorString + ' - ' +
(HtmlElement as IHTMLAnchorElement).href;
lstbxLinks.Items.Add(AnchorString);
end;
end;
end;

чети и дишай по-леко
Отговор
в отговор на Rincewind #3

Re: IE &amp; Links

Щях да забравя:
3. Черпиш

чети и дишай по-леко
Отговор
в отговор на Pechenia #4

Re: IE &amp; Links

Tova na Pechkata nqma da bachka sus frames. Nali i az skoro razrabotvah kod za gepvane na selectiran text ot IE, ta obrabotih i tazi situaciq.

BTW Za uses men mi stiga:
Windows, Messages, SysUtils, SHDocVw, ComObj, ActiveX, MSHTML, StrUtils;
i toq TLB ne mi trqbvashe da go pravq.

Rince, shte ti pratq na meila moq source, che e malko dulag. Zaedno s koda na Pecheniq bi trqbvalo da se spravish

by Waz Gaa
[email protected]
Отговор
в отговор на Waz Gaa #5

Re: IE &amp; Links

MSHTML е точно TLB-то на Internet Explorer. Прав си че примера не включва фреймове, но и те са колекция както всеки друг обект в браузера.
Примера го сложих с Copy&Paste /мързеше ме/, иначе обхождането на безфреймова страница е точно 4 дефиниции на променливи и 5 реда код. Струва ми се че и обхождането по фреймове ще увеличи кода с не повече от две дефиниции и 4-5 реда код. Интересно ми е какво се разбира под малко дълъг сорс, за мен и самия пример е големичък, но е по-добра илюстрация на идеята от моя код.
Подробностите по импорта и uses не ги писах, като имах предвид квалификацията на питащия ;-)

чети и дишай по-леко
Отговор
в отговор на Pechenia #6

Re: IE &amp; Links

Rabotata beshe dali trqbva da se pravi TLB ili moje da polzva napravo MSHTML, koeto si go ima nqkude iz Delphi direktoriite Na men TLB ne mi trqbvashe...

BTW Kakto e tvoito, s elemnti, shte obikoli li vsi4ki frame-ove?

by Waz Gaa
[email protected]
Отговор
в отговор на Waz Gaa #7

Re: IE &amp; Links

MSHTML е TLB-то на Microsoft HTML Object Library.
Нормално е разположена във файла c:\windows\system\mshtml.tlb и може да се издърпа с Project/Import Type Library. Друг е въпроса че може да я имаш вече компилирана в някой пакет на нещо дето я ползва.
Смисъла на MSHTML е да предостави обектния модел на Internet Explorer. В него всички елементи - тагове, фреймове, скриптове и т.н. са представени с колекции, които е лесно да се обходят /показанот в примера е само за елементите <a href=... >. Съответно е доста лесно да извлечеш цялата информация, която те интересува. Пак така са предоставени и събития за прихващане и всички други дивотии на IE-то.
Извличания от сорта /през фреймове и т.н./ е правил всеки писал сериозно JavaScript за IE. Пак ползвайки същия обектен модел. Разбира се, на потребител от класата на Rincewind е достатъчно съвсем малко инфо, за да си свърши работата, затова /а и щото от жегата ме мързи страхотно/ не си направих труд да пиша примери...
В крайна сметка когато се пише за IE е добре да се познава обектния му модел, и после дали със скрипт, OLE или MSHTML_TLB да пипаш каквото ти душа иска.

чети и дишай по-леко
Отговор
в отговор на Waz Gaa #8

Re: IE &amp; Links

MSHTML е TLB-то на Microsoft HTML Object Library.
Нормално е разположена във файла c:\windows\system\mshtml.tlb и може да се издърпа с Project/Import Type Library. Друг е въпроса че може да я имаш вече компилирана в някой пакет на нещо дето я ползва.
Смисъла на MSHTML е да предостави обектния модел на Internet Explorer. В него всички елементи - тагове, фреймове, скриптове и т.н. са представени с колекции, които е лесно да се обходят /показанот в примера е само за елементите <a href=... >. Съответно е доста лесно да извлечеш цялата информация, която те интересува. Пак така са предоставени и събития за прихващане и всички други дивотии на IE-то.
Извличания от сорта /през фреймове и т.н./ е правил всеки писал сериозно JavaScript за IE. Пак ползвайки същия обектен модел. Разбира се, на потребител от класата на Rincewind е достатъчно съвсем малко инфо, за да си свърши работата, затова /а и щото от жегата ме мързи страхотно/ не си направих труд да пиша примери...
В крайна сметка когато се пише за IE е добре да се познава обектния му модел, и после дали със скрипт, OLE или MSHTML_TLB да пипаш каквото ти душа иска.

чети и дишай по-леко
Отговор
в отговор на Waz Gaa #9

Re: IE &amp; Links

10x guys
Sega ako imashe nqkoi da mi dade koda v C#... :)
Mai i sam shte probvam da se spravq...

Go on, prove me wrong. Destroy the fabric of the universe. See if I care.
Отговор