Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod ÇÖZÜLDÜ
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod ÇÖZÜLDÜ
S.a
Sormak istediğim şey şu forumdaki aramalarım sonucu yaptığım programla siteye login olabiliyorum fakat login olduktan sonra açılan sayfada mousela sağ tıklayıp kaynağı görüntüle dediğimde gösterilen sayfa kaynağı ile programdan idhttp.get methodu ile aynı linkten memo içerisine gelen sayfa kaynak kodu farklı :S bu neden olabilir yardımcı olabilirmisiniz bana sağ tıkladığımda gelen kaynak kodlar lazım içinden bazı değerleri programda göstermek istiyorum.
Şimdiden ilgilenen arkadaşlara tşk ederim..
Sormak istediğim şey şu forumdaki aramalarım sonucu yaptığım programla siteye login olabiliyorum fakat login olduktan sonra açılan sayfada mousela sağ tıklayıp kaynağı görüntüle dediğimde gösterilen sayfa kaynağı ile programdan idhttp.get methodu ile aynı linkten memo içerisine gelen sayfa kaynak kodu farklı :S bu neden olabilir yardımcı olabilirmisiniz bana sağ tıkladığımda gelen kaynak kodlar lazım içinden bazı değerleri programda göstermek istiyorum.
Şimdiden ilgilenen arkadaşlara tşk ederim..
En son shochan tarafından 04 Kas 2010 10:30 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
- Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
Re: Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod
ajax kullanan sitelerde içerik veritabanından beslenir ve gelmesi biraz zaman alır. Belli aralıklarla HTML kaynak kodlarını tekrar tekrar sorgulayıp, önceden kabul edeceğiniz ve bilgilerin geldiğine işaret edecek kelime / kod gelmişse bundan sonra sayfayı parse işlemine tabi tutacaksınız.
Re: Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod
Hocam cevabınız için tşk ederim zaten bugüne kadar çoğu takıldımyerlerde sizin yazdıklarınızla çözdüm sorunumu eğer yanlış anlamadıysam belli bir zaman sonra sorguladığımda sayfa kaynağı istediğim gibi gelir ve parse işlemi yapabilirim doğrumu anlamışım en iyisi denemek
tekrardan tşk ederim 


- Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
Re: Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod
Evet aynen bunu ifade etmiştim. Hani "WHILE WebBrowser1.STATE <> ReadyState_Complete DO Application.ProcessMessages" gibisinden bekleme yapıyoruz ya, bu navigasyonun tamamlana kadar beklemesini sağlıyordu; bunun yerine sayacağım iki triggerden birini tercih ederek kullanıyorsunuz.
1. WebBrowser'in OnDocumentComplete eventinde işlem tamamlandığında URL'de değişiklik gözlemlenebilir. Bunu takip edebilirsin.
Bu değişikliği gözlemlemek için şöyle yap; Forma bir webbrowser koydun ya, bir tane de MEMO ekle ve OnDocumentComplete olayında Memo1.Lines.Add( URL ); komutunu ver. Sonra da bir butondan dilediğin sorgulamayı gerçekleştir. Bir gözün de MEMO'da olsun. Ekrana ifade tümüyle geldiğinde MEMO'ya eklenen bir satır algılamaya çalış. Bu gerçekleşirse senin trigger'in bu demekt olacaktır. BU değişikliği kontrol ettirecek altyapı hazırlarsın.
2. Yine aynı yerde yani WebBrowser'in OnDocumentComplete eventinde 1 numaralı değişiklik gözlenemezse bu sefer String arama işleminde kullandığımız POS fonksiyonu ile INNERHTML içinden bekleyeceğin bilgi ile html kaynağa düşen bir son satır niteliğindeki kodu sorgularsınız. Pos( AradiginKod, HTMLKOdu ) > 0 olursa işlem tamamdır deyip tetiği çekersin.
Her iki yöntemin tetik mekanizması olarak da xIslemTamam gibi bir Boolean değişkeni true/fase şeklinde kullanarak, Navigasyon komutuyla WHILE beklemesi yaptığında bu Boolean değişkeni de bunu da dahil eder istediğin / beklediğin sonucu alınca işleme başlamasını sağlayabilirsin.
Umarım açıkça ifade edebilmişdir.
1. WebBrowser'in OnDocumentComplete eventinde işlem tamamlandığında URL'de değişiklik gözlemlenebilir. Bunu takip edebilirsin.
Bu değişikliği gözlemlemek için şöyle yap; Forma bir webbrowser koydun ya, bir tane de MEMO ekle ve OnDocumentComplete olayında Memo1.Lines.Add( URL ); komutunu ver. Sonra da bir butondan dilediğin sorgulamayı gerçekleştir. Bir gözün de MEMO'da olsun. Ekrana ifade tümüyle geldiğinde MEMO'ya eklenen bir satır algılamaya çalış. Bu gerçekleşirse senin trigger'in bu demekt olacaktır. BU değişikliği kontrol ettirecek altyapı hazırlarsın.
2. Yine aynı yerde yani WebBrowser'in OnDocumentComplete eventinde 1 numaralı değişiklik gözlenemezse bu sefer String arama işleminde kullandığımız POS fonksiyonu ile INNERHTML içinden bekleyeceğin bilgi ile html kaynağa düşen bir son satır niteliğindeki kodu sorgularsınız. Pos( AradiginKod, HTMLKOdu ) > 0 olursa işlem tamamdır deyip tetiği çekersin.
Her iki yöntemin tetik mekanizması olarak da xIslemTamam gibi bir Boolean değişkeni true/fase şeklinde kullanarak, Navigasyon komutuyla WHILE beklemesi yaptığında bu Boolean değişkeni de bunu da dahil eder istediğin / beklediğin sonucu alınca işleme başlamasını sağlayabilirsin.
Umarım açıkça ifade edebilmişdir.
Re: Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod
Sa hocam dediğiniz 2 maddeyide uyguladım 1.de url'de hiç bir değişiklik olmuyor 2.de ise Pos( AradiginKod, HTMLKOdu ) > 0 değil 0 olarak çıkıyo nasıl iştir anlamadım aynı pos olayı ile herhangi bi döviz sitesinden kur değerini bulabiliyorum kodda bi soru yok bence
str değişkenini tanımladım yerde şöyle
Koddamı bi hata yapıyorum yoksa sizin dedğiniz olayımı yanlış anladım yanlış yapıyorum ?
Kod: Tümünü seç
var
strl:tstringlist;
begin
strl:=TStringList.Create;
memo1.Text:=strl.Text;
ShowMessage(inttostr(pos(str,strl.Text)));
label7.Caption:=copy(strl.Text,pos(str,strl.Text)+length(str),6);
Kod: Tümünü seç
var
Form1: TForm1;
str:string='{"player":{"id":"';
- Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
Re: Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod
Şöyle yaparak sonucu inceler misin.
Ekrana bir button daha ekleyelim aşağıdaki vereceğim kodu aynen bu butona yazalım. WebBroser1 yerine kendi WebBrowser'ini yazarsın. Bu kod sana şunu sağlayacak, butona her bastığında sayaç bir artarak HTML içeriğini programınla aynı isimde ama _01.HTML _02.HTML gibi isimler vererek program klasörüne kaydedecek.
Sen ekranda bilgiler belirmeden önce ve sonra elinle manuel olarak bir kaç defa bas. sonra da program klasörüne gidip bu dosyalardan hangilerinde ne değişiklik olduğuna bak. Değişiklik olan ile olmayan arasındaki fark senin tetik mekanizmanı oluşturacaktır.
ilgilendiğin site özel bir site değilse buradan verirsen inceleriz ama altını çizmek istiyorum, Explorer ile ekranda ne görüyorsan, webbrowser ile de görebiliyor ve içeriğini alabiliyor olman lazım.
Bu arada ilk sorunu yeniden inceledim. InnerHTML ile aldığın koddan ( yani aynı kaynaktan ) yeniden kod aralığını elde etmeye çalışmalısın. Explorer'da çift tırnak olan yerler InnerHTML ile aldığın yerde olmayabilir. Bu normaldir. Sana verdiğim bu kodlarla elde ettiğin HTML içeriği kendine master olarak kalbul ederek yoluna devam etmelisin.
Muhtemelen göreceksin ki yerine gibi bir sonuçla bile karşılaşabilirsin.
Ekrana bir button daha ekleyelim aşağıdaki vereceğim kodu aynen bu butona yazalım. WebBroser1 yerine kendi WebBrowser'ini yazarsın. Bu kod sana şunu sağlayacak, butona her bastığında sayaç bir artarak HTML içeriğini programınla aynı isimde ama _01.HTML _02.HTML gibi isimler vererek program klasörüne kaydedecek.
Sen ekranda bilgiler belirmeden önce ve sonra elinle manuel olarak bir kaç defa bas. sonra da program klasörüne gidip bu dosyalardan hangilerinde ne değişiklik olduğuna bak. Değişiklik olan ile olmayan arasındaki fark senin tetik mekanizmanı oluşturacaktır.
ilgilendiğin site özel bir site değilse buradan verirsen inceleriz ama altını çizmek istiyorum, Explorer ile ekranda ne görüyorsan, webbrowser ile de görebiliyor ve içeriğini alabiliyor olman lazım.
Kod: Tümünü seç
procedure TForm1.BitBtn1Click(Sender: TObject);
{$j+}
Const Sayac : Integer = 0;
{$j-}
begin
With TStringList.Create do begin
Text := WebBrowser1.OleObject.Document.Body.InnerHTML;
Inc(Sayac);
SaveToFile( ChangeFileExt( Application.ExeName, Format('_%.2d.HTML', [ Sayac ]) ) );
Free;
end;
end;
Muhtemelen göreceksin ki
Kod: Tümünü seç
str:string='{"player":{"id":"';
Kod: Tümünü seç
str:string='{player:{id:';
Re: Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod
yok hocam özel bi site değil oynamakta olduğum bir browser oyunu için program yapmak istiyorum sakın yanlış anlaşılmasın amacım oyuna yönelik bir hile yada bot yazmak değil sadece oyun gerçek zamanlı süreli bi oyun olduğu için oyunda yapmam gerekenleri yapıp daha sonra başka şeylerle uğraşıyorum bu arada oyunda değişiklik olursa programın bana uyarı wermesini istiyorum amacım bu.
Yalnız forum kurallarını pek okumadığım için
böyle bişey yasakmı bilmiyorum istersen site linki ve deneme amaçlı açtığım kullanıcı adı ve şifremi özel mesaj olarak verebilirim.
Yalnız forum kurallarını pek okumadığım için


- Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
Re: Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod
Söylediğinizden yaptığım çıkarımdan, oyun sitelerinde aynı ekranda farklı formlar mevcut olduğunu biliyoruz. Ekranın farklı yerlerinden sağ mouse yapıp, kaynak kod aldığınızda farklı html kodlar alıyorsanız INNERHTML için yanlış forma odaklı olduğunuz varsayımını gündeme getiriyor.
Re: Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod
Haklısınız hocam sanırım sayfa 2 frameden oluşuyo size msjyazdım hocam konuyla ilgili
- Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
Re: Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod
Oyun'un forum kurallarına aykırı yanı olmadığından kodları buradan paylaşayım...
Aşağıda ilgili oyuna login oluyor ve Odun, Kil, Demir değerlerini 5 saniyede bir StatusBar'da yenileyerek gösteriyor. Gerisi sana kalmış.
Unutmadan... Login bilgilerini Edit kutularına girdiğinde INI dosyasına kaydedilir. Tekrar çalıştırdığında önceki girdiğin login bilgileri hatırlanır. Etüd projedir. Yanlış login bilgisi girersen program hataya düşer çünkü hiçbir kontrol koymadım.
Aşağıda ilgili oyuna login oluyor ve Odun, Kil, Demir değerlerini 5 saniyede bir StatusBar'da yenileyerek gösteriyor. Gerisi sana kalmış.
Unutmadan... Login bilgilerini Edit kutularına girdiğinde INI dosyasına kaydedilir. Tekrar çalıştırdığında önceki girdiğin login bilgileri hatırlanır. Etüd projedir. Yanlış login bilgisi girersen program hataya düşer çünkü hiçbir kontrol koymadım.

Kod: Tümünü seç
var
Form1: TForm1;
xAsama : Integer = 0;
xDunyaSec : Boolean = False;
Const
Asama_1 = 'Hangi oyun dünyasına katılmak istiyorsun?';
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
Const
Url = 'www.klanlar.org';
Var
kullanici : String;
sifre : String;
begin
kullanici := Edit1.Text;
sifre := Edit2.Text;
xAsama := 0; // İlk Login Aşamasındayız...
WebBrowser1.Navigate( URL );
while WebBrowser1.ReadyState <> ReadyState_Complete
do Application.ProcessMessages;
WebBrowser1.OleObject.Document.GetElementByID('user').Value := kullanici;
WebBrowser1.OleObject.Document.GetElementByID('password').Value := sifre;
xAsama := 1; // Dünya Seçimi Sorgulama Aşamasındayız.
xDunyaSec := False;
WebBrowser1.OleObject.Document.GetElementByID('login_button').Click;
// OnDownloadComplete'den takip ediyoruz...
while NOT xDunyaSec do Application.ProcessMessages;
// Aktif Dünya'ya geçiş...
WebBrowser1.OleObject.Document.forms.item(1).elements.item(4).Click;
BitBtn1.Enabled := False;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
{$j+}
Const Sayac : Integer = 0;
{$j-}
begin
With TStringList.Create do begin
Text := WebBrowser1.OleObject.Document.Body.InnerHTML;
Inc(Sayac);
SaveToFile( ChangeFileExt( Application.ExeName, Format('_%.2d.HTML', [ Sayac ]) ) );
Free;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var
INI : TINIFile;
begin
INI := TINIFile.Create( ChangeFileExt(Application.Exename, '.INI') );
INI.WriteString('MAIN', 'isim', Edit1.Text );
INI.WriteString('MAIN', 'sifre', Edit2.Text );
INI.Free;
end;
procedure TForm1.FormShow(Sender: TObject);
Var
INI : TINIFile;
begin
INI := TINIFile.Create( ChangeFileExt(Application.Exename, '.INI') );
Edit1.Text := INI.ReadString('MAIN', 'isim', '' );
Edit2.Text := INI.ReadString('MAIN', 'sifre', '' );
INI.Free;
end;
procedure TForm1.HTMLParse( Gelen : String );
Var
Ara, Blok : String;
Odun, Kil, Demir : String;
begin
Blok := Gelen;
Ara := '>Üretim<';
System.Delete(Blok, 1, Pos(Ara, Blok) + Length(Ara)-1);
// Odun
Ara := '>Odun<';
System.Delete(Blok, 1, Pos(Ara, Blok) + Length(Ara)-1);
Ara := '<STRONG>';
System.Delete(Blok, 1, Pos(Ara, Blok) + Length(Ara)-1);
Odun := Copy(Blok, 1, Pos('<', Blok)-1);
// Kil
Ara := '>Kil<';
System.Delete(Blok, 1, Pos(Ara, Blok) + Length(Ara)-1);
Ara := '<STRONG>';
System.Delete(Blok, 1, Pos(Ara, Blok) + Length(Ara)-1);
Kil := Copy(Blok, 1, Pos('<', Blok)-1);
// Demir
Ara := '>Demir<';
System.Delete(Blok, 1, Pos(Ara, Blok) + Length(Ara)-1);
Ara := '<STRONG>';
System.Delete(Blok, 1, Pos(Ara, Blok) + Length(Ara)-1);
Demir := Copy(Blok, 1, Pos('<', Blok)-1);
StatusBar1.Panels[1].Text := Format('Odun:%s, Kil:%s, Demir:%s', [Odun, Kil, Demir]);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
{$j+}
Const
Sayac : Integer = 0;
Saniye: Integer = 5;
{$j-}
begin
if BitBtn1.Enabled then Exit; // login olununca çalışmaya başlayacak...
// Time 1000 interval yani 1 saniye
Dec(Saniye);
if Saniye = 0 then
begin
StatusBar1.Panels[0].Text := Format('%d', [Saniye]);
Saniye := 5;
HTMLParse( WebBrowser1.OleObject.Document.Frames.item(0).Document.Body.InnerHTML )
end else begin
StatusBar1.Panels[0].Text := Format('%d', [Saniye]);
end;
end;
procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject);
begin
if xAsama = 1 then begin
if Pos(Asama_1, WebBrowser1.OleObject.Document.Body.InnerHTML) > 0
then xDunyaSec := True;
end;
end;
- Dosya ekleri
-
- Oyun_Takip.rar
- OyunTakip ( Kaynak Kodları ve Çalışan EXE dosyası )
- (197.77 KiB) 232 kere indirildi
En son mrmarman tarafından 01 Nis 2011 08:23 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Re: Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod
Hocam Allah senden razı olsun
gerisini ben hallederim ama şunuda belirteyim ben login olurken Sesion id belirterek dünya seçimi yapıordum dünya seçme kısmını sizin yönteminizle yapmak isteyip yapamamıştım onuda nasıl yapılacağınıörenmiş oldum
tekrardan elinize sağlık 



- Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
Re: Sayfa Kaynağı ve idhttpnin çektiği Kaynak Kod ÇÖZÜLDÜ
Abi öldüm gülmekten
Sonunda bunu da yaptırdık sana
Cracker lar peşine düşecekler bak gürkan demedi deme 


