T.C.Kimlik Sorgu Robotu ( otomatik kod giriş sistemi )

Paket programlarınızın tanıtımını bu forumda yapabilirsiniz. Bu foruma soru sormayın!
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- DNS sorunu yaşıyor olmalısın hocam. Farklı bir tane kullanıyorsanız DNS alanlarını boşaltıp telekomu kullanın şu an kontrol ettim URL çalışıyor.

- Bir de DNS kayıtlarında değişiklik olmuşsa Başlat / Çalıştır 'dan

Kod: Tümünü seç

IPConfig /flushdns
komutunu verin. Cache'deki ayarlar resetlenecektir.
Resim
Resim ....Resim
dilekdurgun
Üye
Mesajlar: 30
Kayıt: 03 Kas 2005 05:01
İletişim:

Cok Frame i olan sayfa icinde parse....

Mesaj gönderen dilekdurgun »

mrmarman yazdı:
- Burada arka fonda çalışan bir WebBrowser var. Özel bir tane değil, forumdaki yazılarımdan da hatırlayacak olanlar vadır, sürekli Delphi'nin standart bileşenlerini kullanmaktan yana tercih kullanıyorum. Böylece geriye dönük uyum elde ediyorum. Yani kısaca TWebBrowser kullanılıyor.

- Indy'ye nazaran TWebBrowser'da iki türlü engelle karşılaştık.

2. Sorgu aşamasında kullanılan Java Script fonksiyonu çalıştırıldığında TWebBrowser'in readystate'inin daha sorgu sürüyorken dahi READYSTATE_COMPLETE halinde olması. Bu arada ekleyim, ne olursa olsun TWebBrowser.Busy durumu da hep TRUE halde kalıyor. Aslında bunun bir bug olduğunu değerlendiriyorum. İşlem yapılıyorken state değişikliği beklerdim.

- Arama işlemlerinde il/ilçe seçiminde bekleme yaşanmasını engellemek için Türkiye'nin İl ve İlçe kodlarını bir INI dosyasına yazdırdım. Bunun için küçük bir döngü sayesinde tüm illeri aynı sitede sorgulayarak klasik WEB HTML PARSE tekniği ile elde ettik.

Oncelikle cok guzel olmus prog. gorsellik bakimindan olsun code bakimindan olsun cok emek harcanmis..ellerinize saglik... gelelim benim sorunuma..html parse konusunda sizden fikir almak istiyorum codlar asagida bir inceleyin hatam nerde.hersey normal kod calisiyor . fakat bu kodu cok frame li bir sayfa da kullanmaya kalktigimda [ interface not supported] hatasi ile karsilasiyorum. forum daki butun parse ve html+parse ile ilgili olan tum sayfalari gezdim ama bir cozum bulamadim..

Kod: Tümünü seç

unit Unit1; 

interface 

uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs,mshtml, StdCtrls, OleCtrls, SHDocVw, ExtCtrls,ActiveX; 

type 
  TForm1 = class(TForm) 
    WebBrowser1: TWebBrowser; 
    Panel1: TPanel; 
    Button1: TButton; 
    Edit1: TEdit; 
    procedure FormActivate(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; 

var 
  Form1: TForm1; 

implementation 

{$R *.dfm} 
procedure IterateFrames(const AWB: IWebBrowser2); 
  var 
    Doc: IHTMLDocument2; 
    Container: IOleContainer; 
    Enumerator: ActiveX.IEnumUnknown; 
    Unknown: IUnknown; 
    Browser: IWebBrowser2; 
    Fetched: Longint; 
  begin 
    if (Assigned(AWB.Document)) 
       and (Supports(AWB.Document, IHTMLDocument2, Doc)) 
    then begin 
     if (Supports(Doc, IOleContainer, Container)) 
         and (Container.EnumObjects(OLECONTF_EMBEDDINGS, Enumerator) = S_OK) 
      then begin 
        while Enumerator.Next(1, Unknown, @Fetched) = S_OK do 
          if (Supports(Unknown, IWebBrowser2, Browser)) 
          then begin 
            showmessage(doc.body.outerhtml); 
            IterateFrames(browser); 
          end; 
      end; 
    end; 
  end; 

procedure WBLocateHighlight(WB: TWebBrowser; Text: string) ; 
const 
   prefix = '<span style="color:white; background-color: red;">'; 
   suffix = '</span>'; 
var 
   tr: IHTMLTxtRange; 
begin 
   if Assigned(WB.Document) then 
   begin 
     tr := ((wb.Document AS IHTMLDocument2).body AS IHTMLBodyElement).createTextRange; 
     while tr.findText(Text, 1, 0) do 
     begin 
       tr.pasteHTML(prefix + tr.htmlText + suffix) ; 
       tr.scrollIntoView(True) ; 
     end; 
   end; 
end; 
procedure TForm1.FormActivate(Sender: TObject); 
begin 
webbrowser1.Navigate('http://www.google.com.tr/'); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
 WBLocateHighlight(WebBrowser1,Edit1.Text) ; 
 IterateFrames(WebBrowser1.DefaultInterface); 
end; 

end.
simdiden yardimlariniz icin tesekkurler..
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba..

- Konu ile ilgili değil ama cevap vereyim... Frame olan sayfalarda Body aramamalısın ya da Try..Except bloğuna alarak hata kontrolü yapmalısın.

- Verdiğin koddaki gerekli düzeltmeleri / eklemeleri yaptım. Aşağıda veriyorum.

- Frame sayısı 0'dan fazla ise Frame vardır diyoruz ve Frame by Frame dolaşarak arama işlemi yaparak gerekli değişikliği her frame için ayrı ayrı yapıyoruz. Yoksa normal operasyon yapılıyor.

Kod: Tümünü seç

procedure WBLocateHighlight(WB: TWebBrowser; Text: string) ;
const
   prefix = '<span style="color:white; background-color: red;">';
   suffix = '</span>';
var
   tr     : Variant; // IHTMLTxtRange;
   i      : Integer;
begin
   if Assigned(WB.Document) then
   begin
     If WB.OleObject.Document.Frames.length > 0
     then begin // Frame var demektir. Her Frame için ayrı ayrı değerlendirmek lazım...
       For i := 0 to WB.OleObject.Document.Frames.length-1 do begin
         tr := WB.OleObject.Document.Frames.item(i).Document.Body.createTextRange;
         while tr.findText(Text, 1, 0) do
         begin
           tr.pasteHTML(prefix + tr.htmlText + suffix) ;
           tr.scrollIntoView(True) ;
         end;
       end;
     end else begin // Frame yoksa ana body işleme alınır...
       tr := ((wb.Document AS IHTMLDocument2).body AS IHTMLBodyElement).createTextRange;
       while tr.findText(Text, 1, 0) do
       begin
         tr.pasteHTML(prefix + tr.htmlText + suffix) ;
         tr.scrollIntoView(True) ;
       end;
     end;
   end;
end;

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  WBLocateHighlight(WebBrowser1, Edit1.Text) ;
end;
En son mrmarman tarafından 20 Eyl 2007 02:05 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
davut
Üye
Mesajlar: 137
Kayıt: 01 Nis 2006 10:54

Mesaj gönderen davut »

merhaba hocam,

Ellerinize sağlık, çok güzel bir çalışma olmuş.

bu programı kendi projelerimizde kullanabilmek için dışarıdan parametre alarak sonucu bir INI dosyası,vb bir dosyaya yazan hale getirseniz çok işe yarayabilir.

iyi çalışmalar...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- INI'ye gerek yok takvim veremiyorum ama bir DLL hazırlıycam.. O zaman aracı işleme gerek kalmaksızın sonuçları direkt yazılımınıza çekebilirsiniz. Daha önce yağmıştım sistem değişince kaldırmıştım. Aynı uygulamayı buna da yapabiliriz.
Resim
Resim ....Resim
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

s.a.
mrmarman yazdı: - Indy'ye nazaran TWebBrowser'da iki türlü engelle karşılaştık.

1. Navigasyon yapıldığında, ekranın tümüyle yüklenmesini beklemek için TWebBrowser'in readystate durumunu ele alarak bekleme yapmak gerekliliği.

2. Sorgu aşamasında kullanılan Java Script fonksiyonu çalıştırıldığında TWebBrowser'in readystate'inin daha sorgu sürüyorken dahi READYSTATE_COMPLETE halinde olması. Bu arada ekleyim, ne olursa olsun TWebBrowser.Busy durumu da hep TRUE halde kalıyor. Aslında bunun bir bug olduğunu değerlendiriyorum. İşlem yapılıyorken state değişikliği beklerdim.
@Muharrem hocam burada bahsedilen 2. sorunu halletmek için nasıl bir yol izlememizi tavsiye edersiniz...

SAYGILARIMLA
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Bu durumda web sitesinin tepkilerini incelemeniz gerekiyor. Örneğin başka bir sayfaya redirect ediyorsa bu linki yakaladığınızda sayfa gelmiş demektir vb. çözümler. Mevzu bahis olan site hakkında bilgi verirsen bakar sana bir yol haritası çizerim.
Resim
Resim ....Resim
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

Hocam daha önce böyle bir çalışma yapmamışdım. Amacım biraz araştırma diyebiliriz.

Bende deneme amaclı T.C. Kimlik sayfasını kullanıyorum bakalım yapabilecekmiyim diye uğraşıyorum. Sonuca ulaşmakdaki tek sorun bahse konu sorun..

İl değiştiğinde veya sorgula düğmesine click yaptığımda readystate sonucu daha sorgu sürerken hep READYSTATE_COMPLETE olarak dönüyor..

Zaman ayırdığınız için teşekkür ederim..
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Şu aşamada T.C.Kimlik sayfasının OnDocumentComplete kısmında gelen InnderHTML verisine bakıldığında sonuç alınabilmektedir. Bu kanaldan çözüm bulabilirsin.

- Uygulaman şu olabilir. JavaScript uygulamayı çalıştırırsın, ardından da While WebBrowser.ReaduState = ReadyState_Complete diyeceğine While NOT bilgigeldi do şeklinde döngü kurarsın. BilgiGeldi boolean değişkeni ise birden fazla kere devreye giren OnDocumetComplete eventinden InnerHTML içeriğindeki kerteriz alacağın veri çerçevesinde tetiklenecektir. Örneğin son satırdaki veri de geldiğinde önceki tüm veri gelmiş demektir diyebilirsin. Böylece kendine aracı bir yeni event oluşturmuş gibi çalışabiliyorsun.[/b]
Resim
Resim ....Resim
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

@muharrem hocam teşekkür ederim.

InnerHtml ile sonuça ulaştım. Aslında biraz hokus pokus yapmış olduk galiba :)

Kolay gelsin...
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

:o aynen dediğin gibi. Ayrıntılar projeleri daha akıllı yapıyor.

- Çalışmalarında başarılar...
Resim
Resim ....Resim
ozanyazar
Üye
Mesajlar: 7
Kayıt: 18 Mar 2005 02:23

Re: Cok Frame i olan sayfa icinde parse....

Mesaj gönderen ozanyazar »

dilekdurgun yazdı:
mrmarman yazdı:
fakat bu kodu cok frame li bir sayfa da kullanmaya kalktigimda [ interface not supported] hatasi ile karsilasiyorum. forum daki butun parse ve html+parse ile ilgili olan tum sayfalari gezdim ama bir cozum bulamadim..

Kod: Tümünü seç

unit Unit1; 

interface 
[/quote][/quote]


"interface not supported" hatasıyla, çektiğimiz datayı EXCEL'e aktarırken yaşadık. Proğramı yapan oda arkadaşımla adım adım incelediğimizde ise EXCEL'e aktarma sorununu farkedince, OFİS programını sorunlu bilgisayardan kaldırıp, yeniden kurmaya karar verdik. Çünkü aynı proğram sadece benim bilgisayarımda sorun yaşıyor ve ben Pc de OfisXp varken, Ofis2007 kurdum, beğenmeyip kaldırdım ama çakışmalar oluştu, temizleyemedim. Sorun Ofis'in düzgün kurululmayışından/iki sürümünün kalıntılarının kalmasından kaynaklandı.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Office 2007 ve / veya BETA sürümlerinin lisans süresi dolduğunda OleAutomation özelliği devre dışı kalıyor. Sorun bundan kaynaklı. Lisanslı bir Office 2007 bulursanız sorun olmuyor.
Resim
Resim ....Resim
ozanyazar
Üye
Mesajlar: 7
Kayıt: 18 Mar 2005 02:23

Mesaj gönderen ozanyazar »

OfisXp lisanslı,
Ofis2007 internetten indirdiğim bir proğramdı.
Ofis proğramlarını tamamen kaldırıp, MS Ofis Xp'yi yeniden kurdum, denedim sorun kalmadı.
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

insanlar kod yazarken bir şeye dikkat etmeliler diye düşünüyorum. kullanıcı sizin donanımıza veya programlarınıza sahip olmak zorundamı. örneğin burada OLE otomasyon yapılıyor ama karşı makinede excel kurulu olmak zorunda gibi. oysa ben olayın donanım tarafındada çalışıyorum. şu anki işyerimdede open office geçişi yapıyoruz.. eski çalıştığım işyerindede sırf excele göre yazılmış ole kodları yüzünden bir sürü sıkıntı yaşanmıştı. bugün koca merkez bankası 2500 pc de open office kullanıyor.

ole kullanılacaksa benim fikrim her iki office içinde ayrı ayrı ole yazılmalıdır. sonuçta open office tede ole desteği var. yada doğrudan biff gibi excel formatına çıktı atılıp shell execute ile açtırılmalıdır. en idealide bu olur sanırım.

buradaki örnek basit bir program ama genede dikkat etmek lazım bu konuya
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Cevapla