getElementByid Kullanımı Hakkında Yardım

Katılım
7 Ağustos 2019
Mesajlar
28
Excel Vers. ve Dili
16.0 - Türkçe -- Office 365
Merhaba.
Öncelikle gerek sitenizden gerek diğer sitelerden onlarca örnek denediğimi belirtmek istiyorum.
Amacım exceldeki a sütununda konu başlığı, b sütununda konu içeriği olan veri setini web sayfasındaki sistemlere aktarabilecek bir makro yazmak istiyorum.
mesaj başlığını aşağıdaki kod ile yazdırabiliyorum. (Mesaj_baslik değişkenine atadığım değer kaynak sayfa kodunda tek bir yerde ve tek element ismi olarak geçiyor)
Kod:
ie.Document.getElementsByName(Mesaj_baslik).Item(0).Value = baslik


konu içerik kısmı ise aşağıda kodları verilmiş alana giriş yapmam gerekiyor.
Kod:
<div id="mesaj_icerik_1" class="mesajyaz" style="display: inline;" contenteditable="true"></div>



Bunun için readystate ve busy seçenekleri de dahil olmak üzere
ie.Document.getElementById("mesaj_icerik_div").Item(0).Value = icerik ve türevleri kodlarla yazdırmaya çalıştığımda sürekli bu satırda hata mesajı aldım. Kaynak site kodlamasında giriş alanı olarak değil ama başka amaçlarla id="mesaj_icerik_div" ifadesi kullanılmış.

Hatanın buradan kaynaklandığını düşünüyorum.


Ancak şöyle bir durum var
Sitede ki https://www.excel.web.tr/threads/vba-web-scrap-ile-veri-cekme.163369/ örneğindeki kodları da uyguladığım da yine içerisinde getElementByid geçen satırda hata mesajı verdi.

Acaba getElementByid () kodu excel 16.0 sürümünde çalışmıyor mu?




Kodlar
Sub calistir()

'--------- HANGİ SİTEYE GİRİŞ YAPILACAĞINI SOR VE CANCEL OLURSA İŞLEMİ BİTİR
URL = InputBox("Site adresi:")
If URL = "cancel" Then GoTo 10000
bekleme = "00:00:20"
10 '-----------------------------------EXCELDEKİ A SÜTUNUNDAKİ SON SATIRI BUL VE DEĞERLERİ AL - DÖNGÜ BAŞLAT
B = 0

20 B = B + 1
30 ba = "a" & B: If Range(ba) = "" Then GoTo 9000
40 ic = "b" & B: If Range(ic) = "" Then GoTo 9000
50 baslik = Range(ba)
60 icerik = Range(ic)

'-----------------------internet explorer ayarlarını yap
say = say + 1
If say = 1 Then

Set IE = CreateObject("InternetExplorer.Application")

With IE
.Navigate URL
.Visible = 1
End With
End If



Do Until IE.ReadyState = 4: DoEvents: Loop
Do While IE.Busy: DoEvents: Loop
'-------------------------------------------------------- textboxlara veri ataması

IE.Document.getElementsByName("mesaj_baslik").Item(0).Value = baslik


IE.Document.GetElementsByclassname("formlar_mesajyaz")(1).getElementByid("mesaj_icerik_div").Item(0).Value = icerik


'IE.Document.getElementById("tablo_buyut2").getElementById("duzenleyici_govde").getElementById("mesaj_icerik_mesaj_tamekran").getElementById("mesaj_icerik_duzenleyici_ana").getElementById("mesaj_icerik_div").Item(0).Value = icerik


IE.Document.getElementByid("mesaj_gonder").Item(1).Click ' gönder butonu için name özelliği kullanıldı


CreateObject("WScript.Shell").PopUp "Dikkat", 20, "Bakalım ne olacak", vbOKOnly + vbExclamation

'Application.Wait (Now + TimeValue(bekleme))
IE.Quit
GoTo 20


9000 hhh = MsgBox("Boş hücre olduğu için makro durduruldu...", vbOKCancel)

10000
End Sub
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,384
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
getElementById, koleksiyon döndürmez. İkincisi, Value isminde üyesi yoktur. innerText olarak değeri alınır.
 
Katılım
7 Ağustos 2019
Mesajlar
28
Excel Vers. ve Dili
16.0 - Türkçe -- Office 365
getElementById, koleksiyon döndürmez. İkincisi, Value isminde üyesi yoktur. innerText olarak değeri alınır.
Kolay gelsin.
Ben değer almak değil, değer girmek istiyorum. Bunun için örnek olarak .document.getElementById("SicilNo").[B]Value[/B] = Range("A1").Value şeklinde kullanılması doğru değil mi? (Bir çok örnekte bu şekilde kullanılmış)
Eğer yanlış araştırmadıysam innertext verilerin excele aktarılması için kullanılıyor.


ie de veri girişi yapmak istediğim yerin html kodları
Kod:
<textarea name="mesaj_icerik" class="formlar" id="mesaj_icerik" style="width: 97.5%; height: 371px;" rows="13" cols="79"></textarea>
 
Katılım
7 Ağustos 2019
Mesajlar
28
Excel Vers. ve Dili
16.0 - Türkçe -- Office 365
Konu hala güncel ..
Konu başlığını değiştiremiyorum ama yeni konu da açmak istemedim.

Aşağıdaki kod ile deneme yapmak için açtığım sitedeki alanlardan; KONU kısmına veri girilebiliyor iken İÇERİK alanına veri girişi yapılamıyor.
Site : http://splan.byethost7.com/mesaj_yaz.php?fno=1&kip=yeni
kullanıcı adı: kurucu
Şifre : a11111

içerik alanına getElementById kullanarak veya başka bir şekilde nasıl veri girebilirim?


Kod:
 Sub deneme()
    Dim URL As String
    On Error Resume Next
    URL = "http://splan.byethost7.com/mesaj_yaz.php?fno=1&kip=yeni"
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = 1

    For i = 1 To Range("A" & Rows.Count).End(3).row
        If Cells(i, 1) <> Empty Then
            ie.navigate URL

            Call bekle

  ie.document.getElementsByName("mesaj_baslik").Item(0).Value = Cells(i, 1)    '<-------- çalışıyor

  ie.Document.getElementById("mesaj_icerik").Value = "TEST"   '<----------------- BURASI ÇALIŞMIYOR



 'IE.Document.getElementsByClassName("submitButton")(0).Click    <----- daha denenmedi

              Call bekle

        End If
    Next i
   ' IE.Quit
    Set ie = Nothing
End Sub

Sub bekle()
    With ie
        Do Until .readyState = 4: DoEvents: Loop
        Do While .Busy: DoEvents: Loop
    End With
    Application.Wait (Now + TimeValue("00:00:02"))
End Sub
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Öncelikle sisteme giriş yapmak gerekli sonra mesaj kısmı geliyor sanırım.
 
Katılım
7 Ağustos 2019
Mesajlar
28
Excel Vers. ve Dili
16.0 - Türkçe -- Office 365
Öncelikle sisteme giriş yapmak gerekli sonra mesaj kısmı geliyor sanırım.
Henüz o kısma geçemedim, şimdilik js ile oluşturulan o alana veriyi yazdırma yöntemini merak ediyorum Şimdilik manuel giriş ve makro ile konu yazdırmayı deniyorum.
Ancak yardımcı olmak isteyen o konuda da yardımcı olursa harika olur tabi.:rolleyes:
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,248
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Zeki bey konuya yanıt vermiş.:cool:
 
Üst