Selection alana veri gönderme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Selection alana veri gönderme

Mesaj gönderen Lord_Ares »

merhaba, webbrowser ile post işlemi yapmak istiyorum. Mrmarman hocamın, bir kodunu kullanarak denedim fakat başarısız oldum. Sorun nedir bulamdım.
göndermek istediğim sayfa http://www.iskur.gov.tr/Istihdam/JobsOnAir.aspx
burada name="ctl02$ctlIl" id="ctl02_ctlIl" alanları var bunlar birer combobox. alacağı değerlerde şöyle <option value="2">ADIYAMAN</option>

Mrmarman hocamın forumda paylaşmış olduğu kodu kullanarak ( çok teşekkürler kendisine )

Kod: Tümünü seç

 Function TForm1.PostEt(Adres, Parametre, Dosya : String):Boolean;
Var
  PostData         : OleVariant;
  Headers          : OleVariant;
  I : Integer;
  Liste            : TStringList;
begin
  WebBrowser1.Navigate('',
                        EmptyParam,
                        EmptyParam,
                        EmptyParam,
                        EmptyParam );
  Result := true;
    WebBrowser1.Width  := 529;
    WebBrowser1.Height := 425;
    WebBrowser1.ParentWindow := Form1.Handle;
    WebBrowser1.SendToBack;

    PostData := VarArrayCreate([0, Length(Parametre) - 1], varByte);
    for I := 1 to Length(Parametre)
      do PostData[I-1] := Ord(Parametre[I]);
    Headers  := 'Content-Type: application/x-www-form-urlencoded' + #10#13;
    WebBrowser1.Navigate( Adres,
                          EmptyParam,
                          EmptyParam,
                          PostData,
                          Headers);
    xIptal := False;
    repeat
       Application.ProcessMessages;
       // ZZZZzzzz
    until ( WebBrowser1.ReadyState = READYSTATE_COMPLETE )
       or ( xIptal );

    If xIptal
      then
        begin
          WebBrowser1.Navigate('', EmptyParam, EmptyParam, EmptyParam, EmptyParam );
          Result := False;
        end
      else
        begin
          Liste := TStringList.Create;
          Liste.Text   := WebBrowser1.OleObject.Document.Body.InnerHTML;
          Liste.SaveToFile(Dosya);
          Liste.Free;
        end;
end;
şu şekilde göndermeye çalışıyorum.

Kod: Tümünü seç

Var
  Url, Param, Dosya : String;
begin
  Url := 'http://www.iskur.gov.tr/Istihdam/JobsOnAir.aspx';
  Param := 'ctl02_ctlIl=1';
  Dosya := ExtractFilePath(Application.Exename)+'Gelen.TXT';
  PostEt(URL, Param, Dosya);
1) Select alanlara post etme şeklim doğrumu, nasıl etmeliyim. ( webbrowser ile yapmak istiyorum)
2) Sayfada Ara butonu var, bu button value si yok onun yerine java kodu var onu nasıl post edeceğim yada etmeme gerek varmı.

Ara buttonu id si ve ismi belli ama value si yok
Buttonun kodu

Kod: Tümünü seç

<td><div id="ctl02_IskurPageCommand1_Search">
<a id="ctl02_IskurPageCommand1_CommandItem_Search" class="pageMenuLink" href="javascript:__doPostBack('ctl02$IskurPageCommand1$CommandItem_Search','')"><span> Ara</span></a>
Sayfa direk post etmeye çalışmamın nedeni, şu konu başlığındaki viewtopic.php?f=2&t=29715 sorundan dolayı
sayfaya direk post etmeliyim.

Teşekkürler.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Selection alana veri gönderme

Mesaj gönderen mkysoft »

Alanların id'sine göre değil name'ine göre post işlemi yapmalısınız. id özelliği java ile kullanılabiliyor sadece.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Selection alana veri gönderme

Mesaj gönderen Lord_Ares »

bu kod ile il seçimi , işyeri türü alanlarını seçebiliyorum, fakat diğelerini seçmiyorum. Nedenini anlamış değilim

Kod: Tümünü seç

/// KOD1 KOD2 ADINDA GENEL DEĞİŞKEN TANIMLA
 var
  Form1: TForm1;
  KOD1,KOD2:string;

uses Httpapp,IniFiles

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
    procedure V1();
    var
    Ara,ARA2,Gelen:string;
    begin

    Ara:= '__VIEWSTATE' ;
    ARA2:='value=';
    Gelen:=WebBrowser1.OleObject.Document.Body.InnerHTML;
    System.Delete( Gelen, 1, Pos(Ara, Gelen) + Length(Ara)-1);
    System.Delete( Gelen, 1, Pos(ARA2, Gelen) + Length(ARA2)-1);
    KOD1 := copy(Gelen,1,pos('type',Gelen)-1);
    System.Delete( Gelen, 1, Pos('type', Gelen)-1);
    Ara:= '__EVENTVALIDATION' ;
    ARA2:='value=';
    System.Delete( Gelen, 1, Pos(Ara, Gelen) + Length(Ara)-1);
    System.Delete( Gelen, 1, Pos(ARA2, Gelen) + Length(ARA2)-1);
    KOD2 := copy(Gelen,1,pos('type',Gelen)-1);
    end;



var
  EncodedDataString: string;
  PostData: OleVariant;
  Headers: OleVariant;
  i: integer;
begin
KOD1:='';
KOD2:='';
V1;
 EncodedDataString := EncodedDataString

            + '__EVENTTARGET='
      + '&' + '__EVENTARGUMENT='
      + '&' + ' __VIEWSTATEENCRYPTED'
      + '&' + '__VIEWSTATE='           + HttpEncode(KOD1)
      + '&' + '__EVENTVALIDATION='       + HttpEncode(KOD2)

     // + '&' + 'ctl02$ctlSosyalDurum='+  HttpEncode('10')
      + '&' + 'ctl02$ctlKurumTuru='    + HttpEncode('')
      + '&' + 'ctl02$ctlCalismaYeri='  + UTF8Encode('2')
      + '&' + 'ctl02$ctlCalismaSekli=' + UTF8Encode('1')
      + '&' + 'ctl02$ctlIl='           + UTF8Encode('2');

  PostData := VarArrayCreate([0, length(EncodedDataString)-1], varByte);
  for i := 1 to length(EncodedDataString) do
    PostData[i-1] := ord(EncodedDataString[i]);
  Headers := 'Content-type: application/x-www-form-urlencoded'#10#13;
  WebBrowser1.Navigate('http://www.iskur.gov.tr/Istihdam/JobsOnAir.aspx',
                       EmptyParam, EmptyParam, PostData, Headers);

end;

mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Selection alana veri gönderme

Mesaj gönderen mkysoft »

il ve işyeri seçimi yapınca viewstate güncelleniyor olabilir yada başka bir parametre. firefox'ın firebug eklentisiyle parametreleri gözlem altında tutup incele.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Selection alana veri gönderme

Mesaj gönderen Lord_Ares »

Kontrol ettim, tüm değerler aynı geliyor fakat sonuç aynı. işin garip tarafı şimdi hiç birini seçemiyorum :) sayfayı baştan aşağı inceledim kodu yeni projede denedim, gelenleri texte alıp karşılaştırdım fakat ciXX olmadı yapamadım. :D Sanırım kulağımı tersten göstermeye çalışıyorum. Şu çıkan pencerenin kapandığı anı yakalayabilsem işlem çok basit olacaktı. Bunu yakalamanın yolu varmı
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Selection alana veri gönderme

Mesaj gönderen mkysoft »

tarayıcınızın java desteğini kapatıp siteyi kullanmayı deneyin. Eğer başarılı olursanız, java özelliği kapatılabilen bir browser bulun. Dediğim gibi o pencere kapanmıyor aslında, sayfa komple yenilebiliyor. Sayfanın yenilendiğini yakalayabilirseniz zaten istediğiniz olmuş olur. Kolay gelsin.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Selection alana veri gönderme

Mesaj gönderen Lord_Ares »

yardımlarınız için teşekkürler hocam, fakat 1 aydır çözemedim, tükendim. O yüzden pes ediyorum. Bir daha mı Delphide webbrowser ile uğraşmak , büyük konuşmayayım ama asla, dersimi aldım. :D
Emeğiniz için teşekkürler.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Selection alana veri gönderme

Mesaj gönderen mkysoft »

Birisi erinmeyip istediğinizi yazsa ne hissedeceksiniz? Yapmak istediğiniz şey imkansız değil, uğraşmak gerekiyor sadece. Vazgeçmeniz doğru değil bence.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Selection alana veri gönderme

Mesaj gönderen Lord_Ares »

hocam haklısınız, keşke bende yazabilsem. browser işlemlerini ilk sizin yazmış olduğunuz google araması gibi programları gördüğüm çok heveslendim. O hevesle başladım fakat :) gerek benim bilgi eksikliğim ve az kaynak yetersizliği gibi nedenler ile takılıp kaldım. Allahtan ki burada bir çok şeye örnek uyguluma paylaşımı var yoksa Delphi konusunda ne kadar geride kalırdım bilemem. Bu paylaşım sağlayan, Emeği geçen herkese tekrar teşekkürler.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Selection alana veri gönderme

Mesaj gönderen Lord_Ares »

mkysoft hocam, en son mesajımda büyük konuşmayayım diyerek sanırım büyük konuşmuşum :) Son mesajınız bende hırs yaptı ve sorunu çözdüm. Size çok teşekkür ediyorum. Soruna farklı açıdan yaklaşarak çözmeyi başardım. Sayfanın complate olduğunu yakalayabilmek için, sayfa kodunda pos ile belli bir satırı aratıyor fakat dönen bilgi boş geliyordu. Normal bir explorerla sorgulama işlemi bitince , sayfa koduna baktığımda bir de ne göreyim, arama sonuçları sayfa kodunda gözükmüyor. Tabi normal olarak şu koddan dönen cevapta boş dönüyor >>>> WebBrowser1.OleObject.Document.Body.InnerHTML
Sayfayı farklı kaydettim, baktım ki herşey orada bundan yola çıkarak küçük bir procedüre yaparak , sayfayı text olarak kaydetip, sonra pos ile aratarak sayfanın complate olup olmadığını sorununu çözdüm. Şimdi tek sorun sonuçlar birden çok sayfada bulunuyor. Bir döngü kurarak sayfa sayfa gezmek ve parselemek kaldı umuyorum ki onuda yapacağım :)
Ekli dosyada complate sorununu çözdüğüm haliyle gönderiyorum, sayfa sayfa gezip parseleme işlemini yaptırabilirsem dosyayı güncelleyeceğim. Aynı sorundan muzdarip olanlara belki faydası olur umuduyla.

Tekrardan çok teşekkürler mkysoft hocam.
Dosya ekleri
webs.rar
Websayfasında ara
(224.5 KiB) 126 kere indirildi
Cevapla