Soru Selenium basic ile webden combobox içindeki seçili değeri nasıl alabilirim?

Katılım
7 Nisan 2019
Mesajlar
8
Excel Vers. ve Dili
360 Türkçe
Altın Üyelik Bitiş Tarihi
27-01-2022
Merhaba arkadaşlar. Vba konusunda farklı şeyler öğrenmeye çalışıyorum. Bir konuda desteğinize ihtiyacım var. Selenium basic ile webden veri çekerken combobox içinde seçili olan veriyi alamıyorum. Sayfanın kod kısmını da paylaşıyorum. HTML bilgim de pek olmadığı için çok araştırdım ama bir yol bulamadım. Kod içinde selected yazan seçeneği nasıl çekebilirim?

HTML:
<select name="ddlKiminleOturuyor" id="ddlKiminleOturuyor" class="frmInput2" style="width:170px;">
    <option value="-1"> </option>
    <option selected="selected" value="0">Ailesiyle</option>
    <option value="1">Annesiyle</option>
    <option value="2">Babasıyla</option>
    <option value="3">Velisiyle</option>

</select>
aşağıdaki vba kodu şeklinde çoğu veriyi alıyorum. Ancak açılır liste ve seçenek düğme şeklinde seçili olanı alamıyorum.

Kod:
   veri = tarayıcı.FindElementByXPath("/html/body/form[2]/table/tbody/tr[3]/td[2]/table/tbody/tr[3]/td/table/tbody/tr[5]/td[4]/input").Value
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Denemedim ama;

Kod:
 veri = tarayıcı.FindElementByXPath("//select").getFirstSelectedOption.getText
.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Bende Selenium olmadığı için deneme şansım yok ancak; ilk önce "getFirstSelectedOption" metoduyla seçili öğeyi bulduktan sonra "getText" metodunu kullanıp, seçili öğenin "Text" verisini alabilmeniz gerekir.

Yazım şekli belki biraz daha değişik olabilir, dediğim gibi deneme şansım yok....

Belki de, aşağıdaki gibidir....


JavaScript:
veri = tarayıcı.FindElementByXPath("//select").getFirstSelectedOption().getText()
.
 
Katılım
7 Nisan 2019
Mesajlar
8
Excel Vers. ve Dili
360 Türkçe
Altın Üyelik Bitiş Tarihi
27-01-2022
Bende Selenium olmadığı için deneme şansım yok ancak; ilk önce "getFirstSelectedOption" metoduyla seçili öğeyi bulduktan sonra "getText" metodunu kullanıp, seçili öğenin "Text" verisini alabilmeniz gerekir.

Yazım şekli belki biraz daha değişik olabilir, dediğim gibi deneme şansım yok....

Belki de, aşağıdaki gibidir....


JavaScript:
veri = tarayıcı.FindElementByXPath("//select").getFirstSelectedOption().getText()
.
yine olmadı hocam
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Sırf bunun için bilgisayara Selenium kurdum.....

Kurcaladıktan sonra, aşağıdaki gibi bir çalışma yaptım. Çalışıyor gözüküyor...... Daha kestirme bir kod üretebilirsem haber veririrm.

C++:
Sub Test3()
'   Haluk - 16/05/2021
'   sa4truss@gmail.com
'   https://excelhaluk.blogspot.com/
    Dim Driver As New WebDriver, myOption As WebElement
    Driver.Start "chrome"
    Driver.Get ThisWorkbook.Path & "\Test.html"
    
    For Each myOption In Driver.FindElementByClass("frmInput2").FindElementsByTag("option")
        If myOption.IsSelected = True Then
            MsgBox "Seçili öğe : " & myOption.Text
            Exit For
        End If
    Next
End Sub
.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Kafa göz yarıp, aşağıdaki kodu hazırladım..... For-Next döngüsüne gerek kalmadan hedefi 12'den vuruyor;

C++:
Sub Test5()
'   Haluk - 16/05/2021
'   sa4truss@gmail.com
'   https://excelhaluk.blogspot.com/
    Dim Driver As New WebDriver
    Dim valOpt As String
    Driver.Start "chrome"
    Driver.Get ThisWorkbook.Path & "\Test.html"
    
    valOpt = Driver.FindElementByXPath("//select").AsSelect.SelectedOption.Text
    
    MsgBox "Seçili öğe : " & valOpt
End Sub
.
 
Katılım
7 Nisan 2019
Mesajlar
8
Excel Vers. ve Dili
360 Türkçe
Altın Üyelik Bitiş Tarihi
27-01-2022
Kafa göz yarıp, aşağıdaki kodu hazırladım..... For-Next döngüsüne gerek kalmadan hedefi 12'den vuruyor;

C++:
Sub Test5()
'   Haluk - 16/05/2021
'   sa4truss@gmail.com
'   https://excelhaluk.blogspot.com/
    Dim Driver As New WebDriver
    Dim valOpt As String
    Driver.Start "chrome"
    Driver.Get ThisWorkbook.Path & "\Test.html"
   
    valOpt = Driver.FindElementByXPath("//select").AsSelect.SelectedOption.Text
   
    MsgBox "Seçili öğe : " & valOpt
End Sub
.
haluk bey süpersiniz. Size de çok zahmet verdim kusura bakmayın. dediğiniz gibi tam 12 den vuruyor :)
Eğer zahmet olmayacaksa bir şeyi daha sormak istiyorum. aynı şekilde radyo düğmelerde hangisi seçili ise onu nasıl belirleriz. mesela 2 radyo düğme olsun biri evet seçeneği diğeri hayır seçeneği olsun. hangisi seçili ise onu belirlemek istiyorum(checked olan seçenek). eğer sizi yoracaksa hiç uğraşmayın. gerçekten çok teşekkür ederim. emeğinize sağlık

HTML:
<td>
                                                <span class="aspNetDisabled" style="display:inline-block;width:55px;"><input id="rdSag" type="radio" name="rdGrpSagOlu" value="rdSag" checked="checked" disabled="disabled"><label for="rdSag">Evet</label></span>
                                                <span class="aspNetDisabled" style="display:inline-block;width:52px;"><input id="rdOlu" type="radio" name="rdGrpSagOlu" value="rdOlu" disabled="disabled"><label for="rdOlu">Hayır</label></span></td>
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Şöyle birşey yaptım.... verdiğiniz HTML koduna göre yaptığım denemede çalıştı;

Not: Farklı bir "RadioButton" grubu da olması ihtimalini göz önüne alarak, kod revize edildi.


C++:
Sub Test7()
'   Haluk - 17/05/2021
'   sa4truss@gmail.com
'   https://excelhaluk.blogspot.com/
    Dim Driver As New WebDriver
    Dim valOpt As String
    Driver.Start "chrome"
    Driver.Get ThisWorkbook.Path & "\Test.html"
 
    For Each myOption In Driver.FindElementsByName("rdGrpSagOlu")
        If myOption.Attribute("checked") = True Then
            valOpt = myOption.FindElementByXPath("following-sibling::*").Text
            Exit For
        End If
    Next
 
    MsgBox "Seçili öğe : " & valOpt
End Sub

.
 
Son düzenleme:
Katılım
7 Nisan 2019
Mesajlar
8
Excel Vers. ve Dili
360 Türkçe
Altın Üyelik Bitiş Tarihi
27-01-2022
Şöyle birşey yaptım.... verdiğiniz HTML koduna göre yaptığım denemede çalıştı;

Not: Farklı bir "RadioButton" grubu da olması ihtimalini göz önüne alarak, kod revize edildi.


C++:
Sub Test7()
'   Haluk - 17/05/2021
'   sa4truss@gmail.com
'   https://excelhaluk.blogspot.com/
    Dim Driver As New WebDriver
    Dim valOpt As String
    Driver.Start "chrome"
    Driver.Get ThisWorkbook.Path & "\Test.html"

    For Each myOption In Driver.FindElementsByName("rdGrpSagOlu")
        If myOption.Attribute("checked") = True Then
            valOpt = myOption.FindElementByXPath("following-sibling::*").Text
            Exit For
        End If
    Next

    MsgBox "Seçili öğe : " & valOpt
End Sub

.
Hakan bey bende çalışmadı. myOption dediğiniz bir değişken mi? bir de ("following-sibling::*") kısmını anlamadım. valOpt kısmı çalışmadı öncesi çalışıyor.

aşağıdaki gibi yapınca value değerini "rdSag" olarak geliyor. ama text olarak alınca boş " " geliyor.

Kod:
    If site.FindElementByName("rdGrpSagOlu").Attribute("checked") = True Then
         veri = site.FindElementByName("rdGrpSagOlu").Value
    End If
html resmi bu şekilde
227689
 
Son düzenleme:

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Kim olduğunu bilmiyorum ama, Hakan Bey'e de selamlar ......

Diğer yandan; ben sizin verdiğiniz HTML kodlarına göre yaptığım çalışmayı paketleyip, ekte veriyorum..... Benim tarafımda bir sıkıntı görülmedi.

Muhtemelen, sizin esas HTML sayfasının yapısı daha önce verdiğiniz örnek gibi değildir ya da sayfa kodlarının tamamını görmek gerekebilir, bilemiyorum.

Bu arada, ben Browser olarak Chrome kullanıyorum. Siz değişik bir tarayıcıyla bu kodları deniyorsanız, o yüzden sıkıntı olabilir belki de....
.
 

Ekli dosyalar

Katılım
7 Nisan 2019
Mesajlar
8
Excel Vers. ve Dili
360 Türkçe
Altın Üyelik Bitiş Tarihi
27-01-2022
Kim olduğunu bilmiyorum ama, Hakan Bey'e de selamlar ......
Haluk bey özür diliyorum. bir karışıklık oldu kusura bakmayın. :)
ben de chrome kullanıyorum. E okul üzerinden öğrencilerimin bilgilerini çekmek için bir otomasyon hazırlamaya çalışıyorum. Pek bilgim yok ama sizler sayesinde öğrenmeye çalışıyorum. Eokul öğencilerin özel bilgilerini içerdiği için size doğrudan siteye girişi veremiyorum. dosyanızı indirip inceleyip kendimce uyarlamaya çalışacağım. Çok teşekkür ediyorum her şey için
 

Mahir64

Destek Ekibi
Destek Ekibi
Katılım
19 Nisan 2006
Mesajlar
6,677
Excel Vers. ve Dili
Excel 2013-Türkçe
Excel 2016-Türkçe
E okul üzerinden öğrencilerimin bilgilerini çekmek için bir otomasyon hazırlamaya çalışıyorum. Pek bilgim yok ama sizler sayesinde öğrenmeye çalışıyorum. Eokul öğencilerin özel bilgilerini içerdiği için size doğrudan siteye girişi veremiyorum.
Bildiğiniz gibi MEB tabanlı tüm sitelere harici erişim, veri çekimi gibi işlemler genelgeyle yasaklanmıştı.... Log tutulup harici bağlantılar kayıt altına alınıyor ve yönlendirme girişler tespit ediliyor. Bu konuda hassas olmanızda fayda var. Şevkinizi kırmak istemem ama gerçekleri de göz ardı etmeyin.

Her ne şekilde olursa olsun e-Okul’ a değişik programlar aracılığı ile bilgi aktarmak, başka bir programdan e-Okul
sistemine bilgi almak kesinlikle yasaktır.
 
Katılım
7 Nisan 2019
Mesajlar
8
Excel Vers. ve Dili
360 Türkçe
Altın Üyelik Bitiş Tarihi
27-01-2022
Haluk bey elinize sağlık sorunsuz bir şekilde çalışıyor.
site.AddArgument "--headless"
bu satırı ekleyince çalıştı. Çok zahmet verdim size. hakkınızı helal edin
 
Katılım
7 Nisan 2019
Mesajlar
8
Excel Vers. ve Dili
360 Türkçe
Altın Üyelik Bitiş Tarihi
27-01-2022
Bildiğiniz gibi MEB tabanlı tüm sitelere harici erişim, veri çekimi gibi işlemler genelgeyle yasaklanmıştı.... Log tutulup harici bağlantılar kayıt altına alınıyor ve yönlendirme girişler tespit ediliyor. Bu konuda hassas olmanızda fayda var. Şevkinizi kırmak istemem ama gerçekleri de göz ardı etmeyin.
Doğrudur Mahir bey. ben sadece öğrenci tanıma formlarını doldurmak için ve özellikle veli iletişim bilgilerini bu şekilde daha pratik alabilmek için ufak bir otomasyon yapıyorum. kesinlikle başkalarının kullanımı için veya herhangi bir kazanç için yapmıyorum. ben zaten bir öğretmenim ve kendi rehberliğini yaptığım öğrenciler için bilmem gereken bilgileri alıyorum. yılda bir defa yapacağım iş için yapıyorum. hassasiyetiniz ve uyarınız için teşekkür ediyorum.
 

Mahir64

Destek Ekibi
Destek Ekibi
Katılım
19 Nisan 2006
Mesajlar
6,677
Excel Vers. ve Dili
Excel 2013-Türkçe
Excel 2016-Türkçe
Kolay gelsin öğretmenim.
İyi çalışmalar.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Haluk bey elinize sağlık sorunsuz bir şekilde çalışıyor.
site.AddArgument "--headless"
bu satırı ekleyince çalıştı. Çok zahmet verdim size. hakkınızı helal edin

Aslında o satır sadece, "Chrome" penceresini gizlemeye yarıyor.....

Neyse, sorun çözüldüyse mesele yok...

.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
............ bir de ("following-sibling::*") kısmını anlamadım.
.......
...

Orada; HTML kodlarında "Attribute" özelliği "checked" olan "myOption" elemanını For-Next döngüsüyle bulduktan sonra, "XPath" metoduyla, bu elemandan sonraki ilk elemanın Text özelliğini valOpt değişkenine aktarıp, MsgBox fonksiyonuyla gösteriyoruz.

Başka bir "XPath" örneği;

C++:
Sub Test6()
'   Haluk - 17/05/2021
'   sa4truss@gmail.com
'   https://excelhaluk.blogspot.com/
    Dim Driver As New WebDriver
    Dim valOpt As String
    Driver.AddArgument "--headless"
    Driver.Start "chrome"
    Driver.Get "https://excelhaluk.blogspot.com/"
    
    MsgBox Driver.FindElementById("footer").FindElementByXPath("child::div[position()=1]").Text
End Sub

.
 
Üst