İnternet Sayfasını kaydetme (Çözüldü)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

İnternet Sayfasını kaydetme (Çözüldü)

Mesaj gönderen kahraman1285 »

Malumunuz İnternet Explorer ile açtığımız sayfayı Dosya>Farklı Kaydet diyerek kaydedebiliyoruz.

Bu kaydettiğim sayfayı daha sonra offline olarak web browser ile gösteriyorum.

İnternet sayfasını kaydetme işini Delphi 7 ile nasıl yapabilirim.Web Browserda denedim ama olmadı.Kaydedemiyorum.

İ.E. nasıl komut gönderipde çalıştırabiliriz(Farklı kaydet yapabiliriz).

Sayfayı kaydetmeden önce O internet sayfasının internete yükenme tarihini daha doğrusu son değişiklik tarihini nasıl anlayabilirim.

Teşekkürler...
En son kahraman1285 tarafından 28 Kas 2006 09:49 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

http://delphi.about.com/od/internetintr ... 62904a.htm

sayfasında gayet güzel açıklanmış.sadece internet sayfasının webbrowsera yüklenmesi için biraz beklemek gerekiyor ben bunu sleep komutuyla yaptım.

Kod: Tümünü seç

procedure WB_SaveAs_HTML
(WB:TWebBrowser; const FileName : string);
var
  PersistStream: IPersistStreamInit;
  Stream: IStream;
  FileStream: TFileStream;
begin
  if not Assigned(WB.Document) then
  begin
    ShowMessage('Document not loaded!');
    Exit;
  end;

  PersistStream := WB.Document as IPersistStreamInit;
  FileStream := TFileStream.Create(FileName, fmCreate);
  try
    Stream := TStreamAdapter.Create(FileStream, soReference)
              as IStream;
    if Failed(PersistStream.Save(Stream, True)) then
      ShowMessage('SaveAs HTML fail!');
  finally
    FileStream.Free;
  end;
end; (* WB_SaveAs_HTML *)
kulanımında

Kod: Tümünü seç

 WebBrowser1.Navigate('http://www.mynet.com');

sleep(5500);


 WB_SaveAs_HTML(WebBrowser1,'c:\WebBrowser1.html');
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Mesaj gönderen shadowmann »

Hocam ben de bu linki ve içeriğini kopyala yapıştır yapmıştım bir türlü nedense mesajı gönderemedim. Neyse yine aynı yeri bulmuşsun.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@kahraman1285 yazdı:sadece internet sayfasının webbrowsera yüklenmesi için biraz beklemek gerekiyor ben bunu sleep komutuyla yaptım.
WebBrowser'in readystate özelliğinin True olup olmadığını takibe alırsan gereğinden fazla sleep yapma ihtimalin ortadan kalkar.

Ref : viewtopic.php?t=6612#36828
Resim
Resim ....Resim
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

Hocam sizin örneğinizi inceledim fakat harddiske kaydettiğim sayfa açılmıyor.

(İnternet bağlantısı koptuğunda)

Ve sürekli printerda bişeyler yazdırmaya çalışıyor.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@kahraman1285

Verdiğim örnekteki odaklanılması gereken konu, navigasyonun bittiği anı yakalamak için yapılacak döngü idi. HTML kaynağının hard diskte olması refere edilen başlık için bir örnektir.

- Bir web sayfasındaki HTML text'i TWebBrowser ile almak için yazdığın örneği biraz modifiye ettim, aşağıdaki kodu kullanabilirsin.

- İki türlü fonksiyonel yaptım beğendiğin şekilde kullan.
1.

Kod: Tümünü seç

WB_SaveAs_HTML( WebBrowser1, 'http://www.google.com.tr', 'c:\deneme.htm');

şeklinde TWebBrowser, web adres ve dosya adı her üçünü de verirsen, verdiklerini kullanarak browse işlemini verdiğin webbrowser ile yaparak html kaynağını dosya adıyla kaydeder.

2.

Kod: Tümünü seç

WB_SaveAs_HTML( WebBrowser1, '', 'c:\deneme.htm');
dersen, yani 1. ile aynı fakat URL belirtmezsen, eğer verdiğin WebBrowser daha önce navigate edilmiş sayfa varsa onu verdiğin dosya ismiyle saklar.

Kod: Tümünü seç

procedure WB_SaveAs_HTML(WB:TWebBrowser; const URL, FileName : string);
var
  Liste : TStringList;
begin
  If URL <> '' then
  begin // URL Navigate edilecek
    WB.Navigate(Url);
    While WB.ReadyState <> READYSTATE_COMPLETE
      do Application.ProcessMessages; // sayfa bitmesini beklemedeyiz..
  end else
  begin // Navigate edilmiş bir URL varsa Text olarak kaydedilecek.
    if not Assigned(WB.Document) then
    begin
      ShowMessage('Document not loaded!');
      Exit;
    end;
  end;
  Liste := TSTringList.Create;
  Liste.Text := WB.OleObject.Document.Body.InnerHTML;
  Liste.SaveToFile( FileName );
  Liste.Free;
end;
Resim
Resim ....Resim
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

Hocam bu kadar hızlı cevap alabileceğimi zannetmiyordum.

Teşekkür ederim...

Son olarak şu konudada fikrinizi almak istiyorum.Ben sayfayı harddiske kaydettikten sonra tekrar webbrowserda navigate yaptığımda .swf ve .png uzantılı resim ve flashlar olmuyor bunları göstermek için bu nesneleri sayfayı kaydetmeden önce ayrıca download edip kaydetmek mi gerek?
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

çok sağlıklı olmayacak bu yöntem...
Siz hayal edin...Biz yapalım TuannaSoft...
Cevapla