• DİKKAT !

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak Dosya Yükleme tamamen ücretsizdir.

Soru VBA MSXML2.XMLHTTP Web Scraping Hatası (HTMLDocument Object)

akdogan47

Yeni Üye
Aktivite

0%

Katılım
31 Ağu 2026
Mesajlar
1
Aldığı beğeni
0
Excel V
Office 2021 TR
Konu Sahibi
Windows 10 Google Chrome 152
Değerli üstatlar ve forumdaşlar selamlar, aranılacağı üzere aranıza yeni katıldım.
VBA üzerinden web scraping (internetten veri çekme) projesi üzerinde çalışıyorum. Tarayıcıyı tetikleyen InternetExplorer.Application yöntemi çok yavaş ve demode kaldığı için işlemleri arka planda MSXML2.XMLHTTP (veya WinHTTP) nesnesiyle asenkron/senkron olarak yürütmek istiyorum.
Hedef web sitesindeki kaynak kodlarına ulaşıyorum ancak gelen HTML string yapısını HTMLDocument nesnesine (Early Binding referansı ekleyerek) set ettiğimde, web sitesinin yoğun JavaScript (AJAX) yapısından dolayı aradığım dinamik <table> elementlerine ulaşamıyorum. getElementsByClassName fonksiyonu boş dönüyor ya da hiyerarşik nesne hatası veriyor.
Çözemediğim Noktalar:
  1. Sayfa yüklendikten sonra JavaScript ile tetiklenen tabloları XMLHTTP ile yakalamanın efektif bir yolu var mıdır? (JSON regex parse mı yapmalıyım?)
  2. Bağlantı koptuğunda veya site geç yanıt verdiğinde makronun çökmemesi için ReadyState kontrolünü en optimize nasıl kurgulayabilirim?
Çalıştığım ve hata aldığım kod modülünü içeren örnek Excel dosyasını ekte paylaşıyorum. İleri düzey VBA ve Web API entegrasyonu ile ilgilenen hocalarımın kıymetli yorumlarını bekliyorum.
Destekleriniz için çok teşekkür ederim.
 

Ekli dosyalar

Windows 10 Google Chrome 152
Selamlar akdogan47, foruma hoş geldiniz!
Yaşadığınız durum modern web scraping projelerinde en sık karşılaşılan kısıtlamalardan biridir. MSXML2.XMLHTTP (veya WinHTTP) nesnesi tarayıcı gibi davranmaz; siteye istek gönderir ve tarayıcının "Kaynağı Görüntüle" (View Source) dediğinizde karşınıza çıkan ilk ham HTML metnini indirir. Sitede yoğun JavaScript/AJAX mimarisi varsa, tarayıcının arka planda tetiklediği asenkron veri istekleri XMLHTTP ile kendiliğinden çalışmaz. Bu yüzden HTMLDocument nesneniz bomboş kalır ve aradığınız elementleri bulamaz.
Bu problemi aşmak için en efektif yöntem şu olabilir.


Web sitesi o tabloları oluşturmak için arka planda mutlaka bir API'ye (.json veya .xml uzantılı bir adrese) istek gönderiyordur. Ham HTML ile boğuşmak yerine doğrudan bu veri kaynağına istek atabilirsiniz.
Nasıl Yapılır?
  1. Tarayıcınızda (Chrome/Edge) hedef sayfayı açın ve F12 tuşuna basarak Geliştirici Araçları'nı açın.
  2. Network (Ağ) sekmesine gelin ve Fetch/XHR filtresini seçin.
  3. Sayfayı yenileyin. Listelenen isteklerin "Response" (Yanıt) sekmelerini inceleyerek aradığınız tablonun ham verisini (genelde JSON formatında) içeren isteği bulun.
  4. Bu isteğin URL adresini kopyalayın.
VBA Kod Mimarisi (JSON/Regex Parse Örneği):
Tablo verilerini regex (Düzenli İfadeler) ile ayıklamak için şu optimize yapıyı kullanabilirsiniz

HTML:
C++:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Geri
Üst