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
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();' );
(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.
(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;
ID si varsa
WebBrowser1.OleObject.Document.GetElementByID('form1:checkbox1').checked := true;
denediniz mi?
(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 ?
@
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.
(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.
ustam cok teşekkür ederim hazırladıgınız o dosyayı benimle paylaşma sansınız var mı ?
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.
(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.