2012-04-10 11 views
10

मैं WebBrowser घटक से स्रोत कोड कैसे प्राप्त कर सकता हूं?मैं TWebBrowser से HTML स्रोत कोड कैसे प्राप्त कर सकता हूं

मैं वेबब्रोसर घटक पर सक्रिय पृष्ठ का स्रोत कोड प्राप्त करना चाहता हूं और इसे मेमो घटक में लिखना चाहता हूं।

धन्यवाद।

उत्तर

18

आप स्ट्रीम में वेबब्रोसर की सामग्री को संग्रहीत करने के लिए IPersistStreamInit इंटरफ़ेस और save विधि का उपयोग कर सकते हैं।

Uses 
    ActiveX; 

function GetWebBrowserHTML(const WebBrowser: TWebBrowser): String; 
var 
    LStream: TStringStream; 
    Stream : IStream; 
    LPersistStreamInit : IPersistStreamInit; 
begin 
    if not Assigned(WebBrowser.Document) then exit; 
    LStream := TStringStream.Create(''); 
    try 
    LPersistStreamInit := WebBrowser.Document as IPersistStreamInit; 
    Stream := TStreamAdapter.Create(LStream,soReference); 
    LPersistStreamInit.Save(Stream,true); 
    result := LStream.DataString; 
    finally 
    LStream.Free(); 
    end; 
end; 
+0

यह काम करता है। आपका बहुत बहुत धन्यवाद। – Leadri

+0

हम इसे रिवर्स तरीके से कैसे काम कर सकते हैं: SetWebBrowserHTML, इस प्रकार पहले निकाले गए कोड को वेबब्रोसर (या TEmbeddedWebBrowser) पर वापस इंजेक्शन कर रहा है। मैं निम्नलिखित स्थिति की कल्पना करता हूं: एक ज्ञापन घटक HTML स्रोत कोड GetWebBrowserHTML के साथ प्राप्त करता है, तो उपयोगकर्ता स्रोत कोड में कुछ बदलाव करता है, फिर परिवर्तित स्रोत कोड को वेबब्राउज़र में फिर से इंजेक्शन दिया जाता है। यह ब्राउज़र में रीयल-टाइम पूर्वावलोकन के साथ एक अच्छा HTML संपादक बना देगा! – user1580348

+1

बेहतर: 'LStream: = TStringStream.Create ('', TEncoding.UTF8);' – user1580348

3

यह पूछा गया है और एम्बरकेडेरो मंचों में कई बार जवाब दिया गया है, जिसमें बहुत सारे कोड उदाहरण पोस्ट किए गए हैं। अभिलेखागार खोजें।

यह का सार यह है कि आप Navigate() इच्छित URL और OnDocumentComplete घटना IPersistStreamInit इंटरफेस के लिए आग के लिए है, तो QueryInterface()Document संपत्ति और उसके save() विधि कॉल प्रतीक्षा करें। TStream ऑब्जेक्ट उदाहरण बनाएं, जैसे कि TMemoryStream, इसे TStreamAdapter ऑब्जेक्ट में लपेटें, और फिर एडाप्टर को save() पर पास करें। इसके बाद आप को TMemo में आवश्यकतानुसार लोड कर सकते हैं।

4

कि अच्छी तरह से भी काम करता है:

function GetHTML(w: TWebBrowser): String; 
Var 
    e: IHTMLElement; 
begin 
    Result := ''; 
    if Assigned(w.Document) then 
    begin 
    e := (w.Document as IHTMLDocument2).body; 

    while e.parentElement <> nil do 
    begin 
     e := e.parentElement; 
    end; 

    Result := e.outerHTML; 
    end; 
end; 
+0

गलत। यह आपको 'दस्तावेज़' तत्व का डीओएम प्रतिनिधित्व प्राप्त करेगा। यह HTML स्रोत कोड नहीं होगा। – kobik

+0

हां आप सही हैं, मैं इसका इस्तेमाल एचटीएमएल स्रोत पर उपलब्ध कुछ डेटा को पार्स करने के लिए कर रहा था और इसके लिए डीओएम प्रस्तुति का उपयोग करना ठीक था। –

+1

मैं आपके उत्तर को ऊपर उठाऊंगा, यह किसी भी मामले में उपयोगी है। मैं एक विदेशी वेबसाइट से एचटीएमएल में हेरफेर/पार्स करने के लिए हमारे मकड़ी में एक समान विधि का भी उपयोग करता हूं। – kobik

संबंधित मुद्दे