Delphi Can
webbrowser checkbox tıklama - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: webbrowser checkbox tıklama (/showthread.php?tid=7056)

Sayfalar: 1 2


webbrowser checkbox tıklama - sefere55 - 22-11-2022

merhaba programımda webbrowserda login ve onaylama işlemlerini yapabiliyorum ama bir türlü checkbox tıklamayı çözemedim. webbrowserde cok bilgim yok. yapmak istedigim https://www.nesine.com/sportoto sitesinde örnegin 1. macta 1 e tıklatmak bir tanesini tıklatabilsem gerisini halledebilirim diye düşünüyorum ama uzun zamandır ugraşıyorum çözemedim. şimdiden herkese teşekkürler


Cvp: webbrowser checkbox tıklama - ugorkem - 22-11-2022

Bende uzun süre önce çok uğraşmıştım fakat normal yollardan başaramayınca işi javascripte yaptırmıştım.
Belirttiğin sitede jQuery kullanıldığı için aşağıdaki kodu kullanabilirsin.

//id var ise 
   WebBrowser.ExecuteScript('$("#'+checkBoxId+'").click();' )
//id yok sadece name var ise  
   WebBrowser.ExecuteScript('$("input[name = '''+checkBoxName+''']").click();' );





Cvp: webbrowser checkbox tıklama - SimaWB - 23-11-2022

(22-11-2022, Saat: 21:22)sefere55 Adlı Kullanıcıdan Alıntı: merhaba programımda webbrowserda login ve onaylama işlemlerini yapabiliyorum ama bir türlü checkbox tıklamayı çözemedim. webbrowserde cok bilgim yok. yapmak istedigim https://www.nesine.com/sportoto sitesinde örnegin 1. macta 1 e tıklatmak bir tanesini tıklatabilsem gerisini halledebilirim diye düşünüyorum ama uzun zamandır ugraşıyorum çözemedim. şimdiden herkese teşekkürler

Login vs. yaptırabildiğinize göre IHTMLElement olarak form elemanlarına ulaşabildiğinizi varsayıyorum. Bundan sonra yapılması gereken IHTMLElement'in type_ özelliğini kontrol etmek. Eğer type_ = 'checkbox' ise elemanın checked özelliğini true yapacaksınız.


Cvp: webbrowser checkbox tıklama - sefere55 - 23-11-2022

(22-11-2022, Saat: 23:47)ugorkem Adlı Kullanıcıdan Alıntı: Bende uzun süre önce çok uğraşmıştım fakat normal yollardan başaramayınca işi javascripte yaptırmıştım.
Belirttiğin sitede jQuery kullanıldığı için aşağıdaki kodu kullanabilirsin.

//id var ise 
   WebBrowser.ExecuteScript('$("#'+checkBoxId+'").click();' )
//id yok sadece name var ise  
   WebBrowser.ExecuteScript('$("input[name = '''+checkBoxName+''']").click();' );



javascripte direk bu kodu calıştıramadım daha dogru nasıl yapıldıgını hiç bilmiyorum tüm kodu paylaşma sansınız var mı ilginize teşekkürler

(23-11-2022, Saat: 09:48)SimaWB Adlı Kullanıcıdan Alıntı:
(22-11-2022, Saat: 21:22)sefere55 Adlı Kullanıcıdan Alıntı: merhaba programımda webbrowserda login ve onaylama işlemlerini yapabiliyorum ama bir türlü checkbox tıklamayı çözemedim. webbrowserde cok bilgim yok. yapmak istedigim https://www.nesine.com/sportoto sitesinde örnegin 1. macta 1 e tıklatmak bir tanesini tıklatabilsem gerisini halledebilirim diye düşünüyorum ama uzun zamandır ugraşıyorum çözemedim. şimdiden herkese teşekkürler

Login vs. yaptırabildiğinize göre IHTMLElement olarak form elemanlarına ulaşabildiğinizi varsayıyorum. Bundan sonra yapılması gereken IHTMLElement'in type_ özelliğini kontrol etmek. Eğer type_ = 'checkbox' ise elemanın checked özelliğini true yapacaksınız.

[quote pid='51045' dateline='1669186081']
Eğer type_ = 'checkbox' ise elemanın checked özelliğini true yapacaksınız. işte bu noktalarda ben cok yeniyim kod icin bi örnek paylaşabilirmisiniz 
[/quote]


login işlemi icin kullandıgım kod bu şekilde

procedure TForm1.Button11Click(Sender: TObject);
var
Buttons: OleVariant;
Button: OleVariant;
I: Integer;
begin
Buttons := WebBrowser1.OleObject.Document.getElementsByTagName('a');
for I := 0 to Buttons.Length - 1 do
begin
Button := Buttons.item(I);
if Button.innerText = 'GİRİŞ' then
begin
Button.click();
Break;
end;
end;

end;


webbrowser checkbox tıklama - Hayati - 23-11-2022

ID si varsa
WebBrowser1.OleObject.Document.GetElementByID('form1:checkbox1').checked := true;
denediniz mi?


Cvp: webbrowser checkbox tıklama - sefere55 - 24-11-2022

(23-11-2022, Saat: 20:08)Hayati Adlı Kullanıcıdan Alıntı: ID si varsa
WebBrowser1.OleObject.Document.GetElementByID('form1:checkbox1').checked := true;
denediniz mi?

hayati bey teşekkürler bu kodla ilk satırda secim yapabiliyorum. ama 2. satırda herşey degişiyor
sitede ulaştıgım kod
"checkbox" id="00" data-row="1" data-column="0" data-group="0"
seklinde burda data-row kısmı 2 3 4 .. diye devam ediyor burda id kısmıyla beraber data rowu nasıl belirtebilirim ?


webbrowser checkbox tıklama - mrmarman - 24-11-2022

@sefere55

Sayfayı inceledim, Webbrowser ile (Explorer gerekçeli olsa gerek) çok yavaş. Bence chromium benzeri bir yapı kullanmak istenebilir.

Konuya gelince, burada matematiği biraz konuşturmak lazım.

Bir procedure oluşturmak istediğinizi düşünerek şöyle bir başlık olacağını değerlendiriyorum.

procedure TForm1.DoCheck( aRowIdx, aCheckIdx:Integer; aState: boolean; aWebBrowser: TWebBrowser; aDoClick:boolean = false  );

Sayfada Satır nosu 1'den 15'e kadar (aRowIdx), CheckBox için de soldan sağa 1'den başlayıp 12'ye kadar ( aCheckIdx ) olduğu şekilde kodladığımızı düşündüğünüzde aRowIdx, aCheckIdx  : 1,1 ile 15,12 arasında bir adresleme yapıldığını düşünebiliriz.

Burada CheckBox grupları Column Id'leri 6,7,8 ve 9 olarak üçerli gruplarda yerleştirilmiş. 
Dolayısıyla şöyle bir CASE yapısı hangi kolona odaklanılacağını verecektir.

                case aCheckIdx of
               01..03 : LCol := 6;
               04..06 : LCol := 7;
               07..09 : LCol := 8;
               10..12 : LCol := 9;
               end;

Dolayısla matematiği de şöyle oluyor


Kod:
((aCheckIdx-1) mod 3)

nolu item sizin ilgilendiğiniz checkbox'u verecektir. Test edildi. 
NOT: her bir Checked değeri verilmesi hızlı ancak Click işlemi ücret hesap işlemi yaptırdığından görece yavaş kalıyor. 
* Bu nedenle sadece en son Checked edilme anında bir CLICK ettirmek tüm hesabı üretmek için kafi olduğundan akıllı bir yaklaşım olarak değerlendiriyorum.



lzbjt7h0ussbpuxgcvxc.gif




Cvp: webbrowser checkbox tıklama - sefere55 - 24-11-2022

(24-11-2022, Saat: 19:31)mrmarman Adlı Kullanıcıdan Alıntı: @sefere55

Sayfayı inceledim, Webbrowser ile (Explorer gerekçeli olsa gerek) çok yavaş. Bence chromium benzeri bir yapı kullanmak istenebilir.

Konuya gelince, burada matematiği biraz konuşturmak lazım.

Bir procedure oluşturmak istediğinizi düşünerek şöyle bir başlık olacağını değerlendiriyorum.

procedure TForm1.DoCheck( aRowIdx, aCheckIdx:Integer; aState: boolean; aWebBrowser: TWebBrowser; aDoClick:boolean = false  );

Sayfada Satır nosu 1'den 15'e kadar (aRowIdx), CheckBox için de soldan sağa 1'den başlayıp 12'ye kadar ( aCheckIdx ) olduğu şekilde kodladığımızı düşündüğünüzde aRowIdx, aCheckIdx  : 1,1 ile 15,12 arasında bir adresleme yapıldığını düşünebiliriz.

Burada CheckBox grupları Column Id'leri 6,7,8 ve 9 olarak üçerli gruplarda yerleştirilmiş. 
Dolayısıyla şöyle bir CASE yapısı hangi kolona odaklanılacağını verecektir.

                case aCheckIdx of
               01..03 : LCol := 6;
               04..06 : LCol := 7;
               07..09 : LCol := 8;
               10..12 : LCol := 9;
               end;

Dolayısla matematiği de şöyle oluyor


Kod:
((aCheckIdx-1) mod 3)

nolu item sizin ilgilendiğiniz checkbox'u verecektir. Test edildi. 
NOT: her bir Checked değeri verilmesi hızlı ancak Click işlemi ücret hesap işlemi yaptırdığından görece yavaş kalıyor. 
* Bu nedenle sadece en son Checked edilme anında bir CLICK ettirmek tüm hesabı üretmek için kafi olduğundan akıllı bir yaklaşım olarak değerlendiriyorum.



lzbjt7h0ussbpuxgcvxc.gif


ustam cok teşekkür ederim hazırladıgınız o dosyayı benimle paylaşma sansınız var mı ?


webbrowser checkbox tıklama - mrmarman - 25-11-2022

Yazmayı atlamışım yeni fark ettim.

Kod:
case aCheckIdx of
   01..03 : LCol := 6;
   04..06 : LCol := 7;
   07..09 : LCol := 8;
   10..12 : LCol := 9;
 end;

karşılığı da 

Kod:
LCol := 6 + ((aCheckIdx-1) div 3);

şeklinde.

Kaynak kod kısmına takılmayın.
Siz hesabı nasıl yapabileceğinizi sormuştunuz, buna odaklanalım.
Çözüme kavuşturma hazzını yaşayın isterim.


Cvp: webbrowser checkbox tıklama - sefere55 - 25-11-2022

(25-11-2022, Saat: 12:07)mrmarman Adlı Kullanıcıdan Alıntı: Yazmayı atlamışım yeni fark ettim.

Kod:
case aCheckIdx of
   01..03 : LCol := 6;
   04..06 : LCol := 7;
   07..09 : LCol := 8;
   10..12 : LCol := 9;
 end;

karşılığı da 

Kod:
 LCol := 6 + ((aCheckIdx-1) div 3);

şeklinde.

Kaynak kod kısmına takılmayın.
Siz hesabı nasıl yapabileceğinizi sormuştunuz, buna odaklanalım.
Çözüme kavuşturma hazzını yaşayın isterim.


ilginize ne kadar teşekkür etsem az haz konusunda da haklısınız ama benim asıl istedigim direk nokta atışı işaretlemek mesela 4. satır 3. checkbox. bunun icinde arkadasın kodu ilk satırda işlemi tamamlıyor

WebBrowser1.OleObject.Document.GetElementByID('form1:checkbox1 ').checked := true;

kodunda örnegin  <input type="checkbox" id="11" data-row="5" data-column="1" data-group="1">  detayını burda nasıl belirtebilirim cünkü benim bu koddan sonra ki işlemi biraz karışık kimi checkboxu kaldırtacagım kimini ekletecegim şimdiden teşekkürler.