TWebBrowser ile sayfadan gelen dosyayı yakalama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

TWebBrowser ile sayfadan gelen dosyayı yakalama

Mesaj gönderen xxxjedixxx »

Merhaba,

Bir web sitesi üzerindeki raporu çekmeye çalışıyorum. Delphi'de bir form üzerine koyduğum twebbrowser componenti ile ilgili siteye bağlanıp, login ekranındakı bilgileri doldurup siteye giriş yapıyorum. Sonra rapor sayfasına geçip gerekli parametreleri (tarih vs) doldurup raporu çağırıyorum. Rapor bir asp sayfası ve data grid üzerinde istenilen sonuçları gösteriyor. Ben de bu sonuçları alıp başka bir sisteme aktarmak istiyorum. Html kodu içinden sonuçları almam mümkün fakat sayfadaki excel'e aktar özelliğini kullanarak almak istiyorum. Sayfadaki excel'e aktarma fonksiyonu da delphi'den çağırarak çalıştırabiliyorum fakat Internet Explorer'ın 'File Download' dialoğu karşıma geliyor. Bir türlü bu kısmı aşamadım. TWebbrowser componentinin "onfiledownload" event'i ile yapmayı denedim ama gelen URL parametresi direkt dosya linki değil. Daima bulunduğum sayfanın linki yani http://site.com/rapor.asp şeklinde geliyor.

Bir kaç gündür bu konuyu araştırıyorum ama bulduğum örnekler sayfa içindeki var olan linkleri yakalama üzerine kurulu. Benim aradığım ise, sayfada dosya linki olmadan bir buttona tıklayınca asp sayfasından "response.write" ile gönderilen dosyayı yakalamak. Bu konuda fikri olan varsa yardımlarını rica ediyorum. Şimdiden çok teşekkür ederim.

Not: Fikir vermesi için asp'den data grid nasıl excel dosyası olarak export edilir örneği,

Kod: Tümünü seç

     
Private Sub ExportToExcel()
        Dim stringWrite As IO.StringWriter
        Dim htmlWrite As HtmlTextWriter
        Dim frm As HtmlForm = New HtmlForm()

        Response.Clear()
        Response.AddHeader("content-disposition", "attachment;filename=Rapor.xls")
        Response.Charset = ""
        Response.ContentType = "application/vnd.ms-xls"
        stringWrite = New IO.StringWriter
        htmlWrite = New HtmlTextWriter(stringWrite)
        Controls.Add(frm)
        DataGrid.GridLines = GridLines.None
        frm.Controls.Add(DataGrid)
        frm.RenderControl(htmlWrite)
        Response.Write(stringWrite.ToString())
        Response.End()
End Sub
Delhici
Üye
Mesajlar: 176
Kayıt: 20 Eyl 2003 09:04

Re: TWebBrowser ile sayfadan gelen dosyayı yakalama

Mesaj gönderen Delhici »

Findwindow ile gelen mesaj penceresini bulup kapattırabilirsin. En mantıklısı bu..Kolay Gelsin. Başarılar.
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: TWebBrowser ile sayfadan gelen dosyayı yakalama

Mesaj gönderen xxxjedixxx »

Mesele okadar basit değil maalesef. Derdim pencere kapatmak değil ki. Dosyanın gelme anında oluşan event'e gelen URL'nin dosyaya ait olmadığını söylüyorum. Sonuç olarak başka türlü yollardan sorunumu çözdüm.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: TWebBrowser ile sayfadan gelen dosyayı yakalama

Mesaj gönderen vkamadan »

Merhaba ,
Sakıncası yoksa nasıl çözdüğünüzü paylaşır mısınız?
Volkan KAMADAN
www.polisoft.com.tr
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: TWebBrowser ile sayfadan gelen dosyayı yakalama

Mesaj gönderen xxxjedixxx »

Tabiki,

Daha önce de bahsettiğim gibi bir asp datagrid nesnesi içindeki verileri almaya çalışıyordum. Bu verileri html kodundan parse edip almak bir çözümdü fakat data grid içerisindeki kayıt sayısı 30'dan büyükse sayfalara bölüyordu ve sayfa numaralarına tıklayarak verileri görmek mümkündü. Yani 200 satır varsa 7 sayfaya bölüyordu. Bu yüzden sayfadaki excel'e aktarma butonunu kullanmak istemiştim. Bu şekilde verilerin hepsini tek bir dosya ile alabilecektim. Fakat bir bahsettiğim gibi ajax kullanılarak yapılan sayfada dosya link ile gelmiyor response.write komutu ile bir paket olarak gönderiliyordu ve ben de bunu bir türlü yakalayamadım.

Sonuç olarak;
Bulduğum çözüm ise raporu çağırdıktan sonra her bir sayfanın html kodu içinden veriyi almak oldu. Yani bir döngü içerisinde önce 1. sayfa çağırılıyor sonrasında 2. sayfa linkine tıklanıyor ve onun verileri alınıyor. Bu şekilde tüm sayfalara javascript çağırarak tıklatıyorum ve alıyorum. Bu da başarılı bir çözüm oldu.

Yaptığım iş tam olarak; bir akaryakıt şirketinin taşıt tanıma sistemi verilerini belli periyotlarda çekip SAP sistemi ile göndermek. Sonuç başarılı oldu ve sistem online verileri SAP sistemine aktarıyor.
Cevapla