Soru excel webden veri çekmek

fkalelinet

Altın Üye
Katılım
15 Nisan 2009
Mesajlar
122
Excel Vers. ve Dili
MSOPP2019TR-64bit
Altın Üyelik Bitiş Tarihi
29-04-2025
ilgili sayfa kodu bu şekilde.
<div id="formDialog:exceldenKopyalaAlaniBosDialog" class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-shadow ui-hidden-container dialog_style_warn ui-draggable" style="width: 500px; height: auto; left: 543.5px; top: 286.5px; z-index: 1004; display: none;" role="dialog" aria-labelledby="formDialog:exceldenKopyalaAlaniBosDialog_title" aria-hidden="true" aria-live="polite">

aria-live="off" ifadesi aria-live="polite" oluyor.

bunun için de normal kullandığım kodlarda değişiklikler yaptım ama aşağıdaki koda uyarlayıp kaynak kodda herhangi bir yerde polite kelimesini bulunca goto hata yaptıramadım. aşağıdaki kod ve bir çok deneme kodum maalesef çalışmadı. eğer aria-live değeri polite ise git hata şeklinde kod oluşturmaya çalışıyorum.

'######################## EKSİK VERİ TAMAM BUTON 2 #####################
Set objCollection = IE.Document.getElementsByTagName("div")
i = 0
Do While i < objCollection.Length
If objCollection(i).innerText = "polite" Then
FnWait (2)
GoTo hata
Exit Do
End If
i = i + 1
Loop
Do While IE.Busy: DoEvents: Loop
Do Until IE.ReadyState = 4: DoEvents: Loop
FnWait (1)
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
İnnerText ifadesi polite oluyor mu. İnnerhtml ile ve instr ile bak istersen. Kod içerisinde geçiyor gibi polite.
 

fkalelinet

Altın Üye
Katılım
15 Nisan 2009
Mesajlar
122
Excel Vers. ve Dili
MSOPP2019TR-64bit
Altın Üyelik Bitiş Tarihi
29-04-2025
If InStr(ie.document.body.innerhtml, "polite") Then
şeklinde denedim çalışıyor gibi. teşekkür ederim.
 
Son düzenleme:

fkalelinet

Altın Üye
Katılım
15 Nisan 2009
Mesajlar
122
Excel Vers. ve Dili
MSOPP2019TR-64bit
Altın Üyelik Bitiş Tarihi
29-04-2025
bir sendkeys sorusu sorabilir miyim?.
Masaüstünü göster kodu göndermenin en kolay yolu hangisidir. klavyedeki windows tuşu mesela nasıl bastırılır.
sendkeys win+d ye bastırmak için hangi kodları girmem gerekiyor yada alternatif bir yol var mı?. excel vba yada makro ile? Teşekkürler..
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Application.SendKeys("#d") Şeklinde deneyin.
 

fkalelinet

Altın Üye
Katılım
15 Nisan 2009
Mesajlar
122
Excel Vers. ve Dili
MSOPP2019TR-64bit
Altın Üyelik Bitiş Tarihi
29-04-2025
ilgili sayfa kodu bu şekilde.
<div id="formDialog:exceldenKopyalaAlaniBosDialog" class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-shadow ui-hidden-container dialog_style_warn ui-draggable" style="width: 500px; height: auto; left: 543.5px; top: 286.5px; z-index: 1004; display: none;" role="dialog" aria-labelledby="formDialog:exceldenKopyalaAlaniBosDialog_title" aria-hidden="true" aria-live="polite">

aria-live="off" ifadesi aria-live="polite" oluyor.

bunun için de normal kullandığım kodlarda değişiklikler yaptım ama aşağıdaki koda uyarlayıp kaynak kodda herhangi bir yerde polite kelimesini bulunca goto hata yaptıramadım. aşağıdaki kod ve bir çok deneme kodum maalesef çalışmadı. eğer aria-live değeri polite ise git hata şeklinde kod oluşturmaya çalışıyorum.

Kod:
'######################## EKSİK VERİ TAMAM BUTON 2 #####################

Set objCollection = IE.Document.getElementsByTagName("div")

    i = 0

    Do While i < objCollection.Length

    If objCollection(i).innerText = "polite" Then

FnWait (2)

GoTo hata

    Exit Do

    End If

    i = i + 1

    Loop

Do While IE.Busy: DoEvents: Loop

Do Until IE.ReadyState = 4: DoEvents: Loop

FnWait (1)

[/QUOTE]

sayfa kodları DOM arasına ikinci bir polite geldi ve bu sürekli aktif . ayrıca ilk soruda geçen kodların idsi değişti.
yeni gelen sürekli aria-live="polite" olan kod bu şekilde. ayrıca ilk kodda aria-live="off" da artık polite olana kadar hiç görünmüyor.
Kod:
<div id="growlMessage_container" class="ui-growl ui-widget" aria-live="polite" style="z-index: 1002;"></div>
değişen ilk kod da bu şekilde ve bu kodun idsi diyalog oldu. tüm uyarı pencereli bu kod içinden çıkıyor ve çıkarken de aria-live="polite" oluyor. ve bu uyarı penceresi olarak çıkıyor.
Kod:
<div id="diyalog" class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-shadow ui-hidden-container dialog_style_error ui-draggable" style="width: auto; height: auto; visibility: visible; left: 735.4px; top: 216.058px; z-index: 1004; display: block;" role="dialog" aria-describedby="diyalog_content" aria-hidden="false" aria-modal="true" aria-labelledby="diyalog_title" aria-live="polite"><div class="ui-dialog-titlebar ui-widget-header ui-helper-clearfix ui-corner-top ui-draggable-handle"><span id="diyalog_title" class="ui-dialog-title">YTBS</span><a href="#" class="ui-dialog-titlebar-icon ui-dialog-titlebar-close ui-corner-all" aria-label="Close" role="button"><span class="ui-icon ui-icon-closethick"></span></a></div><div class="ui-dialog-content ui-widget-content" id="diyalog_content" style="height: auto;"><table>
<tbody>
<tr>
<td>
                <span class="ui-messages-error-icon"></span></td>
<td><span style="white-space: pre-wrap">Lütfen ilgili alana Excel dosyasından kopyaladığınız veriyi yapıştırınız.</span></td>
</tr>
</tbody>
</table>
    
            <center><button id="j_idt72" name="j_idt72" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="PrimeFaces.bcn(this,event,[function(event){PF('diyalogVar').hide();  },function(event){PrimeFaces.ab({s:&quot;j_idt72&quot;});return false;}]);" type="submit" role="button" aria-disabled="false"><span class="ui-button-text ui-c">Tamam</span></button>
            </center></div></div>
şimdi o kadar çok alternetif yol denedim ama sonuç alamadım henüz. tek polite varken
If InStr(ie.document.body.innerhtml, "polite") Then
şeklinde sonuç alabiliyordum. şimdi id ismine göre sadece o id içeren kod satırında arama yapabilir miyim?
Set objCollection = ie.document.getElementById("diyalog").getElementsByTagName("polite")
gibi yada document.querySelector ile yapabilir miyim. denemelerim...

Kod:
With IE.document.querySelector("a[class='ui-dialog ui-widget ui-widget-content ui-corner-all ui-shadow ui-hidden-container dialog_style_error ui-draggable'][id='diyalog']")

   Debug.Print .getAttribute("aria-live")

   Debug.Print Split(Split(.outerHTML, "aria-live=" & Chr$(34))(1), Chr$(34))(0)

End With
Kod:
Dim eles As Object, i As Long

Set eles = IE.document.querySelectorAll("a[class='ui-dialog ui-widget ui-widget-content ui-corner-all ui-shadow ui-hidden-container dialog_style_error ui-draggable'][aria-live]")

For i = 0 To eles.Length - 1

    With eles.item(i)

        Debug.Print .getAttribute("aria-live")

        Debug.Print Split(Split(.outerHTML, "aria-live=" & Chr$(34))(1), Chr$(34))(0)

    End With

Next
yada bu tüm uyarılar açılır uyarı penceresi olarak çıkıyor. bu pencere çıkarsa if then işlemi yapılabilir mi? çıkan uyarı metni Lütfen ilgili alana Excel dosyasından kopyaladığınız veriyi yapıştırınız. gibi bunu instr yaparsam sonuç alıyorum ama birden çok uyarı metni var hatta bazen sadece uyarı kutusu başlık kapatma düğmesi ve tamam çıkıyor. tamam için instr yapıyorum yine kod içinde başka yerlerde de var o yüzden olumlu sonuç alamıyorum. aynı şekilde <span id="diyalog_title" class="ui-dialog-title">YTBS</span> için de arama yapınca kod içindeki diğer ytbsleri görüyor. o kadar çok çey denedim saatlerce hatta tüm dom içerisindeki politeleri bul attriute ile hepsini off yap sonra hata çıkabilecek kısım öncesi bunları yapınca ikinci glen polite off olacağı için benim diyalog id si ile uyarı çıkınca oradaki polite aktif olacak eski kod çalışacak gibi. onu da yapamadım maalesef. bu arama bulma if then işlemlerinde id kodu bazında arama yapmak yada açılır pencere algılamam gerekiyor. yapmaya çalıtığım sayfada uyarı yada hata çıkınca idsi diyalog olan satırda aria-live="polite" oluyor. if id diyalog satırında "polite" varsa then gibi.?
 
Üst