Önemli web sitesindeki elemanların idlerine ulaşamıyorum
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Önemli web sitesindeki elemanların idlerine ulaşamıyorum
Bir sisteme web sayfası üzerinden veri girişi yapmak gibi çok saçma bir işle karşı karşıya kaldık. Yetkililer web servisi oluşturmayı kabul etmediler biz de kısıtlı bir zamanımız olduğu için verileri elle tek tek girmek yerine daha önce kullanılan programdan web sayfası üzerinden sisteme girmeye çalışıyoruz. Ama çok zor bir işle uğraştığımızın farkındayım. Burada özellikle MARMAN hocamın çok faydalı bilgilerinden bir çok şey öğrendim onun yaptıklarını kendi sistemime uygulmaya çalıştım. Kiminde başarılı oldum ama bazı sorunları çözemedim.
Bunlardan bir tanesi login sayfasına verileri inputlara yazdırıp sisteme giriş yaptığımda gelen 2.sayfadaki elementler birer image olarak gösterilmiş ve bunların idleri yok buton olmadığı için click olayını da yapamadım. Böyle bir nesneye nasıl bir komut gönderirsek click olayı gerçekleşir?
İkinci ve en önemli sorun bir sayfadayken bir tuşa basıyorsunuz sayfanın içerisinde bir pencere açılıyor ve bu penceredeki nesnelere erişemiyorum. iframe vb ile ilgili denemeler yaptım ama olmadı.
Üçüncüsü ise ajax ile ilgil olduğunu tahmin ediyorum bir comboboxta seçilen bir nesneden sonra comboboxın kapanma olayına göre bir liste çıkıyor bunu yakalayamıyorum.
eğer ilgilenen olursa
url :http://tbs.tarim.gov.tr/login.aspx
giriş için tc ve şifreyi özelden veririm denemek isteyenler için.
İlginiz için teşekkürler
Önemli not : Bu sisteme veri girişi çok önemlidir. Yardımlarınızı bekliyorum.
Bunlardan bir tanesi login sayfasına verileri inputlara yazdırıp sisteme giriş yaptığımda gelen 2.sayfadaki elementler birer image olarak gösterilmiş ve bunların idleri yok buton olmadığı için click olayını da yapamadım. Böyle bir nesneye nasıl bir komut gönderirsek click olayı gerçekleşir?
İkinci ve en önemli sorun bir sayfadayken bir tuşa basıyorsunuz sayfanın içerisinde bir pencere açılıyor ve bu penceredeki nesnelere erişemiyorum. iframe vb ile ilgili denemeler yaptım ama olmadı.
Üçüncüsü ise ajax ile ilgil olduğunu tahmin ediyorum bir comboboxta seçilen bir nesneden sonra comboboxın kapanma olayına göre bir liste çıkıyor bunu yakalayamıyorum.
eğer ilgilenen olursa
url :http://tbs.tarim.gov.tr/login.aspx
giriş için tc ve şifreyi özelden veririm denemek isteyenler için.
İlginiz için teşekkürler
Önemli not : Bu sisteme veri girişi çok önemlidir. Yardımlarınızı bekliyorum.
Re: Önemli web sitesindeki elemanların idlerine ulaşamıyorum
Özelden bir tane login bilgisi verirsen uygun bir zamanda incelerim. Resimli giriş ekranını merak ettim
Yaptığını söylediğin login işlemi aşağıdaki şekilde sanırım...

Yaptığını söylediğin login işlemi aşağıdaki şekilde sanırım...
Kod: Tümünü seç
Const
strTCNo = '10000000147';
strPass = '12345678';
Var
strCaptcha : String = 'TEST';
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://tbs.tarim.gov.tr/login.aspx');
while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
begin
Sleep(1);
Application.ProcessMessages;
end;
WebBrowser1.OleObject.Document.GetElementByID('bodyCPH_username').Value := strTCNo;
WebBrowser1.OleObject.Document.GetElementByID('bodyCPH_pass').Value := strPass;
WebBrowser1.OleObject.Document.GetElementByID('bodyCPH_txtCaptcha').Value := strCaptcha;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
WebBrowser1.OleObject.Document.GetElementByID('bodyCPH_btnLogin').Click;
end;
Re: Önemli web sitesindeki elemanların idlerine ulaşamıyorum
Evet hocam o şekilde. Orada sorun yok. Ondan sonra login olup sisteme girince sorun yaşamıştım ama onu da şöyle çözdüm. Resimde yazılan etiketleri sayfada arattırıp bunların bulunduğu yerdeki href ile referans verilen adrese navigate ile yönlendirdim. Bu sorun da çözüldü.
Şimdi diğer sayfalarda üstüste açılan 2.penceredeki elementlere erişememe sıkıntım var.
Bir de comboboxlar da listeden seçilen veriye göre liste gelmesi e onların okunması işlemini yapamadım. Bu ajax ile alakalı bir olay sanırım ama beceremedim.
Sizin sayenizde bir çok şey öğrendim. Teşekkürler.
Şimdi diğer sayfalarda üstüste açılan 2.penceredeki elementlere erişememe sıkıntım var.
Bir de comboboxlar da listeden seçilen veriye göre liste gelmesi e onların okunması işlemini yapamadım. Bu ajax ile alakalı bir olay sanırım ama beceremedim.
Sizin sayenizde bir çok şey öğrendim. Teşekkürler.
Re: Önemli web sitesindeki elemanların idlerine ulaşamıyorum
ComboBox değişikliğini kendin yapacaksan, HTML kaynak kodunda muhtemelen şu şekilde bir JAVASCRIPT görürsün
Bu kısmı ile çalıştırırsan AJAX motoru çalışacak alt combobox'lar dolacaktır.
Dolduğunu da HTML InnerText veya InnerHTML ile kontrol edip kaynak HTML koddaki değişime bakarak anlayabilirsiniz.
Başarılar.
Kod: Tümünü seç
javascript:setTimeout('__doPostBack(\elementadi
Kod: Tümünü seç
execScript(JSFn, 'JavaScript');
Dolduğunu da HTML InnerText veya InnerHTML ile kontrol edip kaynak HTML koddaki değişime bakarak anlayabilirsiniz.
Başarılar.
Re: Önemli web sitesindeki elemanların idlerine ulaşamıyorum
Hocam,
tc ve şifreyi aldıysanız müsait zamanda bakarsanız sanırım olayı kısa zamanda çözersiniz. Orada mesela numune listesi seçilince bir sayfa açılıyor. O sayfada en başta laboratuvar comboboxtan seçilince laboratuvar ismi labela yazıyor. Ben numarayı otomatik yazdırıyorum. Sonra ara düğmesine basıyorum. Fakat comboboxtan numarayı seçme işlemini elle yapıyormuş gibi aynısını yapmak istiyorum.
tc ve şifreyi aldıysanız müsait zamanda bakarsanız sanırım olayı kısa zamanda çözersiniz. Orada mesela numune listesi seçilince bir sayfa açılıyor. O sayfada en başta laboratuvar comboboxtan seçilince laboratuvar ismi labela yazıyor. Ben numarayı otomatik yazdırıyorum. Sonra ara düğmesine basıyorum. Fakat comboboxtan numarayı seçme işlemini elle yapıyormuş gibi aynısını yapmak istiyorum.
Re: Önemli web sitesindeki elemanların idlerine ulaşamıyorum
diğer bir sorunu da şu şekilde hallettim.
WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item('ctl00$ContentPlaceHolder1$CorparationControl$edtRealPersonIdNo').value := edit1.text;
WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item('ctl00ctl00_bodyCPH_ContentPlaceHolder1_CorparationControl_edtRealPersonIdNo_ClientState').value :='{"enabled":true,"emptyMessage":"","validationText":"","valueAsString":"","valueWithPromptAndLiterals":""}';
WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item('ContentPlaceHolder1_CorparationControl_btnSearchRealPerson').Click;
Burada bir sıkıntı var yalnız nesnenin id ve name değerleri aynı. Bu yüzden elements.item değeri name parametre alıyor. id parametre alması için ne yazmam gerektiğini bulamadım.
WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item('ctl00$ContentPlaceHolder1$CorparationControl$edtRealPersonIdNo').value := edit1.text;
WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item('ctl00ctl00_bodyCPH_ContentPlaceHolder1_CorparationControl_edtRealPersonIdNo_ClientState').value :='{"enabled":true,"emptyMessage":"","validationText":"","valueAsString":"","valueWithPromptAndLiterals":""}';
WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item('ContentPlaceHolder1_CorparationControl_btnSearchRealPerson').Click;
Burada bir sıkıntı var yalnız nesnenin id ve name değerleri aynı. Bu yüzden elements.item değeri name parametre alıyor. id parametre alması için ne yazmam gerektiğini bulamadım.
Re: Önemli web sitesindeki elemanların idlerine ulaşamıyorum
Kodla aşağıdaki etiketi yazdıramadım. Bilenler varsa yardım lütfen.
Kaynak bu;
Benim yazdığım delphi kodu bu;
Bir sorum daha olacak ;
Sayfadaki comboboxı açıp elle tıklıyormuş gibi yani bir eleman seçme işlemini kod ile nasıl yapabiliriz.
Ben direk veriyi orya yazdırıyorum ama combobox open ve close işlemini yapmasını istiyorum.
Benim yaptığım şöyle ;
Ama istediğimi karşılamıyor.
Bu arada diğer sorunların bir çoğunu çözdüm. Üste açılan frame deki formlara da erişip oradaki nesnelere ulaşabiliyorum. Bu işlem benim önümü açtı diyebilirim.
Ama itiraf etmek lazım ki biraz ezbere ve bilinçsizce gittiğimi düşünüyorum.
Buradan Muharrem hocama bir kez daha teşekkür ediyorum çok emeği geçti.
Kaynak bu;
Kod: Tümünü seç
<span id="ctl00_ctl00_bodyCPH_ContentPlaceHolder1_RadPanelBar1_i0_Label4" class="formLabel" style="color: red; font-size: medium; font-weight: bold; visibility: visible;">UTKU TOPRAK ANALİZ LABORATUVARI</span>
Kod: Tümünü seç
WebBrowser1.OleObject.Document.getElementByID('ctl00_ctl00_bodyCPH_ContentPlaceHolder1_RadPanelBar1_i0_Label4').Value:='UTKU TOPRAK ANALİZ LABORATUVARI';
Sayfadaki comboboxı açıp elle tıklıyormuş gibi yani bir eleman seçme işlemini kod ile nasıl yapabiliriz.
Ben direk veriyi orya yazdırıyorum ama combobox open ve close işlemini yapmasını istiyorum.
Benim yaptığım şöyle ;
Kod: Tümünü seç
WebBrowser1.OleObject.Document.getElementByID('ctl00_ctl00_bodyCPH_ContentPlaceHolder1_RadPanelBar1_i0_cmbLabList_Input').Value:='LAB-1731';
WebBrowser1.OleObject.Document.getElementByID('ctl00_ctl00_bodyCPH_ContentPlaceHolder1_RadPanelBar1_i0_cmbLabList_Input').FireEvent('onkeydown' , tmpObj) ;
Keybd_Event(VK_RETURN, 1, 0, 0); // Enter tuşu
Bu arada diğer sorunların bir çoğunu çözdüm. Üste açılan frame deki formlara da erişip oradaki nesnelere ulaşabiliyorum. Bu işlem benim önümü açtı diyebilirim.
Ama itiraf etmek lazım ki biraz ezbere ve bilinçsizce gittiğimi düşünüyorum.
Buradan Muharrem hocama bir kez daha teşekkür ediyorum çok emeği geçti.
Re: Önemli web sitesindeki elemanların idlerine ulaşamıyorum
Arkadaşlar,
Bu nesneye aşağıdaki kod ile erişiyorum.
Fakat şu nesneye,
Bu kod ile erişemiyorum.
Burada dikkat etmenizi istediğim nokta 2.nesnenin id ve name ikisi de aynı. Bu nesneye nasıl değer atayabilirim.
Kod: Tümünü seç
<input id="ctl00_ContentPlaceHolder1_CorparationControl_edtRealPersonIdNo" name="ctl00$ContentPlaceHolder1$CorparationControl$edtRealPersonIdNo" type="text" size="20" class="riTextBox riEnabled formText" value=" ">
Kod: Tümünü seç
procedure TForm1.Button2Click(Sender: TObject);
var
g, f, k : integer;
pDispatch : IDISPATCH;
textarea: IHTMLTextAreaElement;
begin
WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item('ctl00$ContentPlaceHolder1$CorparationControl$edtRealPersonIdNo').value := '49237370432';
end;
Kod: Tümünü seç
<input id="ctl00_ContentPlaceHolder1_CorparationControl_edtRealPersonIdNo_ClientState" name="ctl00_ContentPlaceHolder1_CorparationControl_edtRealPersonIdNo_ClientState" type="hidden" autocomplete="off" value="{"enabled":true,"emptyMessage":"","validationText":"49657356498","valueAsString":"49657356498","valueWithPromptAndLiterals":"49657356498"}">
Kod: Tümünü seç
procedure TForm1.Button2Click(Sender: TObject);
var
g, f, k : integer;
pDispatch : IDISPATCH;
textarea: IHTMLTextAreaElement;
begin
WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item('ctl00_ContentPlaceHolder1_CorparationControl_edtRealPersonIdNo_ClientState').value := '{"enabled":true,"emptyMessage":"","validationText":"49237370432","valueAsString":"49237370432","valueWithPromptAndLiterals":"49237370432"}';
end;
Re: Önemli web sitesindeki elemanların idlerine ulaşamıyorum
Kod: Tümünü seç
<div id="ctl00_ctl00_bodyCPH_ContentPlaceHolder1_lbKapsamlar" class="RadListBox RadListBox_Metro RadListBoxScrollable" checkpermission="true" style="height:200px;width:400px;">
<div class="rlbGroup rlbGroupRight">
<ul class="rlbList">
<li id="ctl00_ctl00_bodyCPH_ContentPlaceHolder1_lbKapsamlar_i0" class="rlbItem"><input type="checkbox" class="rlbCheck"><span class="rlbText">Toprakta Temel Analizler</span></li><li id="ctl00_ctl00_bodyCPH_ContentPlaceHolder1_lbKapsamlar_i1" disabled="disabled" class="rlbItem rlbDisabled"><input type="checkbox" class="rlbCheck" disabled="disabled"><span class="rlbText">Diğer Kapsamlar</span></li>
</ul>
</div><input id="ctl00_ctl00_bodyCPH_ContentPlaceHolder1_lbKapsamlar_ClientState" name="ctl00_ctl00_bodyCPH_ContentPlaceHolder1_lbKapsamlar_ClientState" type="hidden" autocomplete="off" value="{"isEnabled":true,"logEntries":[],"selectedIndices":[],"checkedIndices":[],"scrollPosition":0}">
</div>
Kod: Tümünü seç
id="ctl00_ctl00_bodyCPH_ContentPlaceHolder1_lbKapsamlar_i0"
Re: Önemli web sitesindeki elemanların idlerine ulaşamıyorum
Sorunları hallettim ve bir çok şey öğrendim emeği geçen arkadaşlara teşekkür ederim. Sorunları nasıl hallettiğimi kısa zaman sonra burada yazacağım fakat yetiştirmem gereken proje için zaman kalmadı o yüzden affınıza sığınıyorum.
Re: Önemli web sitesindeki elemanların idlerine ulaşamıyorum
Özellikle Muharrem hocam verdiği bilgilerle bizim önümüz açtı.Ayrıca SimaWB ve Volkan Kamadan'a da ayrıca teşekkür ederim. Başka sorulara verdikleri cevaplar çok işime yaradı.
Bir de şu ajax konusunu tam olarak çözebilseydik süper olurdu. Ama başka forumlara da baktım net bir çözüm malesef görünmüyor. Microsoft da doyurucu bir bilgi yayınlamamış. Biz de mecburen kendimize göre yöntemler icat ediyoruz ustalardan aldığımız bilgileri kullanarak.
Ajax da ondocumentcomplete ile işimi amatörce çözüyorum umarım daha iyi bir çözüm bulurum.
Bir de şu ajax konusunu tam olarak çözebilseydik süper olurdu. Ama başka forumlara da baktım net bir çözüm malesef görünmüyor. Microsoft da doyurucu bir bilgi yayınlamamış. Biz de mecburen kendimize göre yöntemler icat ediyoruz ustalardan aldığımız bilgileri kullanarak.
Ajax da ondocumentcomplete ile işimi amatörce çözüyorum umarım daha iyi bir çözüm bulurum.
Re: Önemli web sitesindeki elemanların idlerine ulaşamıyorum
isimleri aynı olan elemanlar için bende size şunu fikir olarak göstermek isterim gerçi siz çözüm yolunu bulmuşsunuz ama belki yinede yararı olur diye mrmarman hocamın paylaşmış olduğu kod örneğini burada bir kez daha paylaşmak istedim. Koddaki yaklaşım bize o sayfadaki kaçıncı formdaki, kacıncı item name veya id sini döndürüyor.
Böylelikle nameleri aynı olan bir çok eleman olsa bile, siz item nosu 4 olan ve name deneme olanı tıkla veya yaz diyebilmiş oluyorsunuz.
Bahsi geçen kod linki viewtopic.php?f=2&t=22005&hilit=+mrmarman
Bu kodu bizlerle paylaştığı için sayın mrmarman hocama tekrar teşekkür ediyorum. Ellerinize sağlık.
Sonuç :
Böylelikle nameleri aynı olan bir çok eleman olsa bile, siz item nosu 4 olan ve name deneme olanı tıkla veya yaz diyebilmiş oluyorsunuz.
Bahsi geçen kod linki viewtopic.php?f=2&t=22005&hilit=+mrmarman
Bu kodu bizlerle paylaştığı için sayın mrmarman hocama tekrar teşekkür ediyorum. Ellerinize sağlık.
Kod: Tümünü seç
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
i,j : Integer;
begin
WebBrowser1.Navigate('http://divxplanet.com/');
while WebBrowser1.ReadyState <> ReadyState_Complete do Application.ProcessMessages;
Memo1.Lines.Clear;
if WebBrowser1.OleObject.Document.Frames.Length > 0 then begin
Memo1.Lines.Add('');
Memo1.Lines.Add('-----------------------------');
Memo1.Lines.Add('FRAMES bilgileri');
Memo1.Lines.Add('-----------------------------');
for i := 0 to WebBrowser1.OleObject.Document.Frames.Length - 1 do
begin
Memo1.Lines.Add( Format('WebBrowser1.OleObject.Document.Frames.Item(%d)', [i]) );
end;
end;
if WebBrowser1.OleObject.Document.Forms.Length > 0 then begin
Memo1.Lines.Add('');
Memo1.Lines.Add('-----------------------------');
Memo1.Lines.Add('FORMS bilgileri');
Memo1.Lines.Add('-----------------------------');
for i := 0 to WebBrowser1.OleObject.Document.Forms.Length - 1 do
begin
Memo1.Lines.Add( Format('WebBrowser1.OleObject.Document.Forms.Item(%d).Document.Body.InnerHTML', [i]) );
for j := 0 to WebBrowser1.OleObject.Document.Forms.Item(i).Elements.Length - 1 do begin
Memo1.Lines.Add( Format(' WebBrowser1.OleObject.Document.Forms.Item(%d).Elements.Item(%d).Name -> ''%s'' ', [i, j, WebBrowser1.OleObject.Document.Forms.Item(i).Elements.Item(j).Name ]) );
end;
end;
end;
ShowMessage('Bitti');
end;
Kod: Tümünü seç
-----------------------------
FRAMES bilgileri
-----------------------------
WebBrowser1.OleObject.Document.Frames.Item(0)
WebBrowser1.OleObject.Document.Frames.Item(1)
-----------------------------
FORMS bilgileri
-----------------------------
WebBrowser1.OleObject.Document.Forms.Item(0).Document.Body.InnerHTML
WebBrowser1.OleObject.Document.Forms.Item(0).Elements.Item(0).Name -> 'CookieDate'
WebBrowser1.OleObject.Document.Forms.Item(0).Elements.Item(1).Name -> 'referer'
WebBrowser1.OleObject.Document.Forms.Item(0).Elements.Item(2).Name -> 'UserName'
WebBrowser1.OleObject.Document.Forms.Item(0).Elements.Item(3).Name -> 'PassWord'
WebBrowser1.OleObject.Document.Forms.Item(0).Elements.Item(4).Name -> 'Hatirla'
WebBrowser1.OleObject.Document.Forms.Item(0).Elements.Item(5).Name -> ''
WebBrowser1.OleObject.Document.Forms.Item(1).Document.Body.InnerHTML
WebBrowser1.OleObject.Document.Forms.Item(1).Elements.Item(0).Name -> 'cx'
WebBrowser1.OleObject.Document.Forms.Item(1).Elements.Item(1).Name -> 'ie'
WebBrowser1.OleObject.Document.Forms.Item(1).Elements.Item(2).Name -> 'oe'
WebBrowser1.OleObject.Document.Forms.Item(1).Elements.Item(3).Name -> 'cof'
WebBrowser1.OleObject.Document.Forms.Item(1).Elements.Item(4).Name -> 'hl'
WebBrowser1.OleObject.Document.Forms.Item(1).Elements.Item(5).Name -> 'q'
WebBrowser1.OleObject.Document.Forms.Item(1).Elements.Item(6).Name -> 'sa'
WebBrowser1.OleObject.Document.Forms.Item(2).Document.Body.InnerHTML
WebBrowser1.OleObject.Document.Forms.Item(2).Elements.Item(0).Name -> 'arama'
WebBrowser1.OleObject.Document.Forms.Item(2).Elements.Item(1).Name -> 'src_select'
WebBrowser1.OleObject.Document.Forms.Item(2).Elements.Item(2).Name -> ''
WebBrowser1.OleObject.Document.Forms.Item(3).Document.Body.InnerHTML
WebBrowser1.OleObject.Document.Forms.Item(3).Elements.Item(0).Name -> 'dailyf'
WebBrowser1.OleObject.Document.Forms.Item(3).Elements.Item(1).Name -> ''
Re: Önemli web sitesindeki elemanların idlerine ulaşamıyorum
İlginize ve verdiğiniz çok değerli bilgiler için teşekkür ederim.Sorunları çözdüm aslında verilenleri dikkatli okusam bu kadar oyalanmazdım hepsinin cevabı forumda varmış onları okumuştum ama dikkat etmemişim. Teşekkürler. Forumda hepsinin cevabı olduğu için burada yazmaya gerek duymuyorum ama istenirse tekrar bu konu başlığı altında açıklarım. Başarılar diliyorum.