webbrowser üzerinde popup menüye ve popup sayfaya erişim

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

webbrowser üzerinde popup menüye ve popup sayfaya erişim

Mesaj gönderen eren2000 »

Webbrowser ile tab şeklinde açılan sayfalar var. Üzerinde bulunduğum aktif sayfada grid içerisinde bir liste geliyor. Gelen listeye sağ tuşa tıklayınca Aç komutu görünüyor. Tıklayınca popup şeklinde bir sayfa açılıyor. Ben burada sağ tuşa tıklanıp Aç komutunu delphiden aldıramıyorum. Bir de bu açılan popup yeni pencerede bir çok elemente erişiyorum butonlara tıklıyorum ama ortada bir yerde bulunan tab şeklinde ki linklere tıklayamıyorum. Düzenli olarak hangi elementin hangi tabda yer aldığını buduramadığım için onlara erişmem de zorlaşıyor.
Tabda yer alan linkler şu şekilde

Kod: Tümünü seç

link">İletişim Bilgileri
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-2"><span class="k-loading k-complete"></span><a class="k-link">Hayvan
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-3"><span class="k-loading k-complete"></span><a class="k-link">Arazi
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-4"><span class="k-loading k-complete"></span><a class="k-link">Bitkisel Ürün
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-5"><span class="k-loading k-complete"></span><a class="k-link">Hayvansal Ürün
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-6"><span class="k-loading k-complete"></span><a class="k-link">Alet Makine
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-7"><span class="k-loading k-complete"></span><a class="k-link">BinaTesis
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-8"><span class="k-loading k-complete"></span><a class="k-link">Kredi Kullanım
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-9"><span class="k-loading k-complete"></span><a class="k-link">Üye İşlemleri
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-10"><span class="k-loading k-complete"></span><a class="k-link">Evraklar
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-11"><span class="k-loading k-complete"></span><a class="k-link">Verilen Belgeler
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-12"><span class="k-loading k-complete"></span><a class="k-link">Delege Görev
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-13"><span class="k-loading k-complete"></span><a class="k-link">Borç
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-14"><span class="k-loading k-complete"></span><a class="k-link">Aidatlar
					</a></li>
<li class="k-item k-state-default" role="tab" aria-controls="detailSection-15" style="display: none;"><span class="k-loading k-complete"></span><a class="k-link">Yetkililer
					</a></li>
<li class="k-item k-state-default k-last" role="tab" aria-controls="detailSection-16"><span class="k-loading k-complete"></span><a class="k-link">Notlar
					</a></li></ul>
daha önce sadece link adlarından tıklama ile ilgili
ClickToElementByInnertText fonksiyonu ve NavigateFrameset(document: IHTMLDocument2); procedurü bir nebze işime yaradı. Özellikle navigateframeset bu yeni açılan popup sayfadaki butonlara erişimimi sağladı ama alttaki tablara yani yukarıda yazdığım linklere erişemiyorum bir türlü.
Bunlarla ilgili sıkıntı yaşadığım için projeyi yetiştiremeyeceğim sanırım çok az vaktim kaldı. Yardımlarını için şimdiden teşekkürler.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: webbrowser üzerinde popup menüye ve popup sayfaya erişim

Mesaj gönderen Lord_Ares »

Merhaba, büyük ihtimal bahsettiğiniz sayfada li ile oluşturulmuş linkler adında menüler var. java ile kontrol edilen menüler olabilir. Dolayısı ile menü click olayını bu java kodlarını işleterek başarabilirsiniz. Sayfa içeriğini görmediğimiz için bu bahsettiğim sadece bir fikirdir. Sayfanın yapısını inceleyerek böyle bir yapı varmı kontrol bunlamı sağlanmış bakarsanız çözüme ulaşabilirsiniz. Html parse olayında java kodu çalıştırmak ile ilgili örneği formumuz da bulabilirsiniz..

2) linkler menüsünün onclick eventı o sayfa içinde mutlaka tanımlanmıştır. siz ona odaklanın aldığı değere bakarak click yordamını çalıştırmayı deneyin. Büyük ihtimal siz linkler menüsünün onclick eventına değilde sayfa içindeki linke click gönderiyorsunuz. Ondan da olmayabilir.
Saygılarımla
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

Re: webbrowser üzerinde popup menüye ve popup sayfaya erişim

Mesaj gönderen eren2000 »

Verdiğiniz bilgiler için teşekkürler.
Benim anlayamadığım üst üste açılan formlara nası erişeceğimiz. Ana sayfanın üzerine açılan forma ;

Kod: Tümünü seç

procedure TForm1.NavigateFrameset4(document: IHTMLDocument2);
var
    index: Integer;
    ole_index: OleVariant;
    frame_dispatch: IDispatch;
    framed: IHTMLWindow2;
  Doc: IHTMLDocument2;
  I: Integer;
  Element: OleVariant;
  Elements: IHTMLElementCollection;
begin
    if document = nil then
        exit;
    try
        memo1.Text:=String(document.body.innerHTML);
    {    Application.MessageBox(
            PChar('Content:' + String(document.body.innerHTML)),
            PChar('URL: ' + String(document.URL)),MB_OK or
            MB_ICONINFORMATION);
    }    for index := 1 to document.Frames.Length do
        try
            ole_index := index-1;
            frame_dispatch := document.Frames.Item(ole_index);
            if frame_dispatch <> nil then
            begin
                framed := frame_dispatch as IHTMLWindow2;
                NavigateFrameset4(framed.document);

               // Doc := WebBrowser1.Document as IHTMLDocument2;
                Elements := Framed.document.all;
                for I := 0 to Elements.length - 1 do
               begin
                   Element := Elements.item(i, varEmpty);

                if (Element.id='iptal') then
                begin
                   element.Click;
                end;



                             end;

            end;
        except
            on E: Exception do
            begin
            end
        end;
    except
        on E: Exception do
            begin
                Application.MessageBox(PChar(E.Message),
                PChar('Exception'));
            end;
    end;
end;
bu procedure ile erişebiliyorum. Ama bunun üzerine bir form daha açılıyor. Kodu aşağıdaki şekilde buradaki düğmelere erişemiyorum. Bu procedure ile erişmeye kalktığımda ikisinin de id değeri iptal olduğu için alttaki form kpanıyor ve üstteki formdaki düğmelere hiçbir şekilde erişemiyorum. Bu formdaki elementlere nasıl erişebilirim?

Kod: Tümünü seç

<form id="b12-editform" action="/tzob/Tzob/VarlikHayvanEdit" method="post">        <div>
							<input name="submitButton" tabindex="0" class="b12-button k-button" id="kaydet" role="button" aria-disabled="false" type="submit" value="Kaydet" data-role="button">
							<input name="submitButton" tabindex="0" class="b12-button k-button" id="tekrarla" role="button" aria-disabled="false" type="submit" value="Kaydet Devam" data-role="button">
							<input tabindex="0" class="b12-button k-button" id="iptal" role="button" aria-disabled="false" type="submit" value="Kapat" data-role="button">
							<input tabindex="0" class="b12-button k-button" id="yardim" role="button" aria-disabled="false" type="button" value="Yardım" data-role="button">
			        </div>		
		<p id="sayfaMesaj"></p>
		<div>
					<div><table style="margin: 20px 13px 10px; padding: 0px;"><tbody><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; vertical-align: middle;"><input name="VarlikUye.Id" id="VarlikUye" type="hidden" value="222" data-val="true" data-val-number="The field Id must be a number."><input name="VarlikDonem.Id" id="VarlikDonem" type="hidden" value="" data-val="true" data-val-number="The field Id must be a number."><span class="b12-fixed-width" id="containerVarlikCins"><span class="b12-label" id="labelVarlikCins">Hayvan Türü <span style="color: red;"> *</span></span><input name="VarlikCins.Exp" class="b12-lovtextbox" id="VarlikCinsExp" style="background-color: lightgrey;" required="" type="text" readonly="readonly">
<input name="VarlikCins.Id" id="VarlikCins" type="hidden">
<button name="ef_submit_VarlikCins" tabindex="1" class="lovbutton k-button" id="btnVarlikCins" role="button" aria-disabled="false" type="submit" data-role="button">...</button>
<span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="VarlikCins"></span></span></td></tr><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; vertical-align: middle;"><span class="b12-fixed-width" id="containerCinsiyet"><span class="b12-label" id="labelCinsiyet">Cinsiyet </span><span tabindex="2" class="k-widget k-dropdown k-header b12-combo" role="listbox" aria-busy="false" aria-disabled="false" aria-expanded="false" aria-haspopup="true" aria-readonly="false" aria-activedescendant="Cinsiyet_option_selected" aria-owns="Cinsiyet_listbox" unselectable="on"><span class="k-dropdown-wrap k-state-default" unselectable="on"><span class="k-input" unselectable="on"></span><span class="k-select" unselectable="on"><span class="k-icon k-i-arrow-s" unselectable="on">select</span></span></span><select name="Cinsiyet.Id" class="b12-combo" id="Cinsiyet" style="display: none;" data-role="dropdownlist"><option selected="selected" value=""></option><option value="340895">ERKEK</option><option value="340896">DİŞİ</option></select></span><span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="Cinsiyet"></span></span></td></tr><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; vertical-align: middle;"><span class="b12-fixed-width" id="containerVarlikMiktar"><span class="b12-label" id="labelVarlikMiktar">Miktar <span style="color: red;"> *</span></span><span class="k-widget k-numerictextbox ob-right"><span class="k-numeric-wrap k-state-default k-expand-padding"><input tabindex="3" class="k-formatted-value ob-right k-input" aria-disabled="false" aria-readonly="false" style="display: inline-block;" type="text"><input name="VarlikMiktar" tabindex="3" class="ob-right k-input" id="VarlikMiktar" role="spinbutton" aria-disabled="false" aria-readonly="false" aria-valuenow="0" style="display: none;" required="required" type="text" value="0" data-val-required="The VarlikMiktar field is required." data-val="true" data-role="numerictextbox" data-val-number="The field VarlikMiktar must be a number."><span class="k-select" style="display: none;"><span class="k-link" style="-ms-touch-action: double-tap-zoom pinch-zoom;" unselectable="on"><span title="Increase value" class="k-icon k-i-arrow-n" unselectable="on">Increase value</span></span><span class="k-link" style="-ms-touch-action: double-tap-zoom pinch-zoom;" unselectable="on"><span title="Decrease value" class="k-icon k-i-arrow-s" unselectable="on">Decrease value</span></span></span></span></span><span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="VarlikMiktar"></span></span></td></tr><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; vertical-align: middle;"></td></tr><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; vertical-align: middle;"></td></tr><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; vertical-align: middle;"></td></tr><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; vertical-align: middle;"></td></tr><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; vertical-align: middle;"></td></tr><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; vertical-align: middle;"></td></tr><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; vertical-align: middle;"></td></tr></tbody></table></div>
	
		</div>
<input name="Id" id="Id" type="hidden" value="" data-val="true" data-val-number="The field Id must be a number.">                <input name="parentId" type="hidden" value="222">
				<input name="parentField" type="hidden" value="VarlikUye">
			<input name="NextId" id="nextId" type="hidden">
</form>
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

Re: webbrowser üzerinde popup menüye ve popup sayfaya erişim

Mesaj gönderen eren2000 »

Arkadaşlar,
Chrome'un geliştirici araçlarıyla siteye baktığımda console kısmında

Kod: Tümünü seç

<top frame>
tabIFrame3(UyeQuery)
6(UyeGuncelle)
8(ChildUyeVarlikHayvanEdit)
şeklinde 4 tane frame görünüyor. Ben bunlardan 4. yani 8(ChildUyeVrlikHayvanEdit) olan framedeki elementlere erişemedim.

2 frame deki elementlere şu kodla erişebiliyorum.

Kod: Tümünü seç

var
  g, f, k : integer;
  pDispatch : IDISPATCH;
  textarea: IHTMLTextAreaElement;
  tmpObj:OleVariant;
begin
try

for f := 0 to WebBrowser1.OleObject.Document.frames.Length - 1 do
    begin
        for g := 0 to WebBrowser1.OleObject.Document.frames.item(f).document.Forms.Length-1 do
          begin
             for k := 0 to WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.length-1 do
              begin
                if (WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item(k).id='SicilNo') then
                begin
                  WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item(k).Value:='1';
                end
                else
                if (WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item(k).id='EskiSicilNo') then
                begin
                  WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item(k).Value:='222';
                end
              end;
          end;
    end;
except
end;

end;
3. frame deki elementlere de şu şekilde reişebiliyorum.

Kod: Tümünü seç

procedure TForm1.NavigateFrameset(document: IHTMLDocument2);
var
    index: Integer;
    ole_index: OleVariant;
    frame_dispatch: IDispatch;
    framed: IHTMLWindow2;
  Doc: IHTMLDocument2;
  I: Integer;
  Element: OleVariant;
  Elements: IHTMLElementCollection;
begin
    if document = nil then
        exit;
    try
        memo1.Text:=String(document.body.innerHTML);
      for index := 1 to document.Frames.Length do
        try
            ole_index := index-1;
            frame_dispatch := document.Frames.Item(ole_index);
            if frame_dispatch <> nil then
            begin
                framed := frame_dispatch as IHTMLWindow2;
                NavigateFrameset(framed.document);

               // Doc := WebBrowser1.Document as IHTMLDocument2;
                Elements := Framed.document.all;
                for I := 0 to Elements.length - 1 do
               begin
                   Element := Elements.item(i, varEmpty);

                if (Element.innertext='Ekle') then
                begin
                showmessage('Ekle : '+inttostr(i));
                element.Click;
                end;
                             end;

            end;
        except
            on E: Exception do
            begin
            end
        end;
    except
        on E: Exception do
            begin
                Application.MessageBox(PChar(E.Message),
                PChar('Exception'));
            end;
    end;
end;
4. framedeki elementlere bir türlü ulaşamadım. Göremediğim bir şey mi var acaba. Bir de her bir frame'in ayrı ayrı kodunu aldığımda başlık kısımları şu şekilde,

Kod: Tümünü seç

<form id="mainForm" method="GET" action='/tzob/Tzob/UyeQueryFormAction'>
		<div><table style='padding:0px;margin:18px 16px 18px 16px;'><tr style='padding:0px;margin:0px;'><td style='padding:0px;margin:0px;vertical-align:middle;'><input Value="" data-val="true" data-val-number="The field Id must be a number." id="Oda" name="Oda.Id" type="hidden" value="" /><span class="b12-fixed-width" id="containerCiftci_ActorType" ><span class="b12-label" id="labelCiftci_ActorType" >Üye Tipi</span><select class="b12-combo" id="Ciftci_ActorType" name="Ciftci_ActorType" tabindex="1">

Kod: Tümünü seç

<body>    
	
	<div style="display: table;width: 100%;height: 100%;">
<form action="/tzob/Tzob/UyeEdit" id="b12-editform" method="post">        <div>
							<input type="submit" value="Kaydet" name="submitButton" class="b12-button" id="kaydet"/>
							<input type="submit" value="Kaydet Devam" name="submitButton" class="b12-button" id="tekrarla"/>
							<input type="submit" value="Kapat" id="iptal" class="b12-button"/>
							<input type="button" value="Yardım" id="yardim" class="b12-button"/>
							<input type="submit" value="Aidat Hesapla" id="UyeAidatHesapla" class="b12-button"/>
							<input type="submit" value="&#220;yelik &#199;ıkış" id="UyePasif" class="b12-button"/>
							<input type="submit" value="Aktif" id="UyeAktif" class="b12-button"/>
							<input type="submit" value="K&#252;t&#252;k Yazdır" id="UyeKutukYazdir" class="b12-button"/>
							<input type="submit" value="İhbarname " id="IhbarnameYazdir" class="b12-button"/>
							<input type="submit" value="Aidat Log" id="AidatLog" class="b12-button"/>

Kod: Tümünü seç

</head>
<body>    
	
	<div style="display: table;width: 100%;height: 100%;">
<form action="/tzob/Tzob/VarlikHayvanEdit" id="b12-editform" method="post">        <div>
							<input type="submit" value="Kaydet" name="submitButton" class="b12-button" id="kaydet"/>
							<input type="submit" value="Kaydet Devam" name="submitButton" class="b12-button" id="tekrarla"/>
							<input type="submit" value="Kapat" id="iptal" class="b12-button"/>
							<input type="button" value="Yardım" id="yardim" class="b12-button"/>
Ben bu en son yazdığım formdaki kaydet,kapat vb. düğmelere erişemiyorum.
Yardımalrınız için teşekkürler.
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

Re: webbrowser üzerinde popup menüye ve popup sayfaya erişim

Mesaj gönderen eren2000 »

Sorumun bir tanesinin cevabını buldum arkadaşlar kendi hatamdan kaynaklanıyormuş. Sitede tuşlar aynı isim ve id de yer alıyor. Yani farklı form sayfalarında olsa da kapat ismindeki düğmenin id si "iptal" ben de sıradan kontrol ettirip bulduğunda tıklattığımda 1.frame deki tuşa dokunuyor oysa ben 2.frame deki tuşa dokunmasını istiyordum. Frame numaralarını kontrol ettirerek istediğimi tıklatabiliyorum artık.

Yeterince uğraşmamışım demek ki. Burayı gereksiz meşgul ettiğim için kusura bakmayın.

Şu kod birden fazla frame olduğunda elementlere ulaşmayı sağlıyor.

Kod: Tümünü seç

var
  g, f, k : integer;
  pDispatch : IDISPATCH;
  textarea: IHTMLTextAreaElement;
  tmpObj:OleVariant;
begin
try

for f := 0 to WebBrowser1.OleObject.Document.frames.Length - 1 do
    begin
        for g := 0 to WebBrowser1.OleObject.Document.frames.item(f).document.Forms.Length-1 do
          begin
             for k := 0 to WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.length-1 do
              begin
                if (WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item(k).id='iptal') then
                begin
                  if f=3 then
                  WebBrowser1.OleObject.Document.frames.item(f).document.forms.item(g).elements.item(k).Click;
                end
               end;
          end;
    end;
except
end;

end;
Şu anda yapamadığım site üzerinde bir kayda çift tıklandığında ya da mouse sağ tuşuna basıp Aç komutunu verip bir kaydın yeni pencerede açılmasını sağlamak. Ona ilişkin javascripti bulamadım; bulursam sanırım o sorunu da çözmüş olurum.
Cevapla