Firefox WebBrowser For VBA

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,269
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Mekanın sahibi ...... hoşgeldin Üstad.

Ellerine sağlık ....

.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,269
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Üstad, 32 Bit'i install ettikten sonra ilgili referansı VBA'de bir projeye eklemeye çalışınca hata veriyor.


"Error in loading DLL"


Win7/Office 2010 Home (32Bit)


Capture.PNG


.
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,086
Excel Vers. ve Dili
2007 Türkçe
Üstad,
Öncelikle paylaşımınız için teşekkür ederim. Geçen bir konunun altına bu eklenti ile ilgili bir çalışma yaptığınızı yazdığınızdan beri paylaşmanızı bekliyordum. Tabir yerindeyse ilaç gibi oldu...
Eski kodlarımı uyarlarken .Document.querySelector ve .Document.querySelectorAll kodlarını çalıştıramadım. Acaba çalışmanız bu kodları desteklemiyor mu, yoksa farklı bir yöntem mi kullanmalıyız. Açıklarsanız memnum olurum.
Tekrar teşekkürler...
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,225
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Merhaba @ÖmerBey o özellikler ve XPATH var ama arayüz IE ile birebir aynı değil. ObjecBrowser'a sık sık gözatarsanız göreceksiniz.

C#:
FirefoxBrowser1.Document.DocumentElement.QuerySelector

.
 
Son düzenleme:
Katılım
26 Ocak 2013
Mesajlar
232
Excel Vers. ve Dili
Excel 2016 Türkçe
Hocam çok güzel. Bunun chrome versiyonu var mı? Bir de internetten veri çekmek veya göndermek için kullanılabilir mi?
 
Katılım
26 Ocak 2013
Mesajlar
232
Excel Vers. ve Dili
Excel 2016 Türkçe
Hocam ben öğretmenim. Her hafta eba ya ders tanımlama yapmamız gerekiyor. Acaba bunun için nasıl bir kod yazmam gerekir. Böyle bir çalışmanız var mı? Gerçekten tüm öğretmenler minnettar olur :)
 
Katılım
26 Ocak 2013
Mesajlar
232
Excel Vers. ve Dili
Excel 2016 Türkçe
Dim os As New OSInfo
Dim prefs As New GeckoPreferences

kodlarınızda daha bu satırda hata veriyor. Acaba yazınızda yapmamız gereken başka bir ayar var mı? Örnek dosya alabilir miyim?
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,225
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Sistem gereksinimi olarak Net Framework 4.5 veya üzeri olması gerekiyor. Control, form üzerine çizildiğinde referans otomatik eklenmez. Erken bağlama (early-bind) için referans eklemeyi unutmayın. Kutuda "Firefox WebBrowser For VBA..." şeklinde geçer.


.
 
Katılım
7 Ağustos 2019
Mesajlar
28
Excel Vers. ve Dili
16.0 - Türkçe -- Office 365
Merhaba.
Mesela kodlarla userformdan bağımsız firefox (web browser) çalıştırılması, sitelerdeki formları doldurma, sitelerden veri alma bir kaç örnek kod veya kaynak paylaşabilir misiniz?
İndirilen dosyadaki örnekler genelde userform üzerinden çalışıyor. Bir çok kod denedim ama (userformdan bağımsız) firefox ile bir site açamadım.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,225
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Merhaba.
Mesela kodlarla userformdan bağımsız firefox (web browser) çalıştırılması, sitelerdeki formları doldurma, sitelerden veri alma bir kaç örnek kod veya kaynak paylaşabilir misiniz?
İndirilen dosyadaki örnekler genelde userform üzerinden çalışıyor. Bir çok kod denedim ama (userformdan bağımsız) firefox ile bir site açamadım.
C#:
Sub Test()
    'Login to https://excel.web.tr
    
    Const BYPASS_CACHE = 256
    Const LOGIN_NAME = "your login name"
    Const PASSWORD = "your password"
    
    Set ff = CreateObject("FirefoxBrowser")
  
    ff.Navigate2 "https://www.excel.web.tr/login", BYPASS_CACHE
    ff.Wait
    
    Set login = ff.Document.GetElementsByName("login").Item(0)
    login.SetAttribute "value", LOGIN_NAME
    
    Set pass = ff.Document.GetElementsByName("password").Item(0)
    pass.SetAttribute "value", PASSWORD
    
    Set frm = ff.Document.EvaluateXPath("//button[@class='button--primary button button--icon button--icon--login']").GetNodes.Item(0)
    frm.Click
    
    ff.Dispose
    
    MsgBox "ok", vbInformation
End Sub
 
Katılım
7 Ağustos 2019
Mesajlar
28
Excel Vers. ve Dili
16.0 - Türkçe -- Office 365
Örnek için teşekkür ederim. Umarız kod ve çalışma mantığını anlatan örnekler çoğalır.
 
Son düzenleme:
Katılım
7 Ağustos 2019
Mesajlar
28
Excel Vers. ve Dili
16.0 - Türkçe -- Office 365
Kolay gelsin. Yukarıda verilen örneği aynen (şifre/kullanıcı adı doğru bir şekilde) çalıştırdım. Sonuçta "ok" uyarısını verdi ama firefox browser hiç açılmadı, yani ekrana gelmedi. Ekranda görüntüleyebilmek için yapmam gereken nedir?.

------------ Aşağısı kodu kullanmak isteyenlere bilgi amaçlıdır.-----------
Verilen örneği aşağıdaki şekilde uyarlamaya çalıştım.

Kod:
Sub Test()
  
   
    Const BYPASS_CACHE = 256
    Const LOGIN_NAME = "---kullanıcı adı"
    Const PASSWORD = "şifre"
   
    Set ff = CreateObject("FirefoxBrowser")

    ff.Navigate2 "https://ybs.hmb.gov.tr/login", BYPASS_CACHE
    ff.Wait
   
ff.Document.GetElementById("identification") = LOGIN_NAME


ff.Document.GetElementById("password") = PASSWORD

   

Set frm = ff.Document.EvaluateXPath("//button[@class='mly-login-button']").GetNodes.Item(0)
    frm.Click
   
    ff.Dispose
   
    MsgBox "ok", vbInformation
End Sub

1- Firefox ekrana hiç gelmedi, yani açılmadı.
2- "GetElementsByName" yerine " GetElementByİd" kullanmak isterseniz s harfini kaldırmanız gerekiyor.
3- İE browser için kullanılan "navigate" burada "navigate2" olarak kullanılıyor. "Object Browser" de Navigate4 e kadar çıkıyor.
 
Son düzenleme:
Katılım
7 Ağustos 2019
Mesajlar
28
Excel Vers. ve Dili
16.0 - Türkçe -- Office 365
Kolay gelsin.
** site = ff.ViewSource 'sitenin kodunu bağımsız "HTML Source" başlıklı bir pencerede gösteriyor, ama firefox ile canlı kullanımını (ie tarzında) hala nasıl açacağımı bulamadım.
** Navigate tek başına url ff.Navigate "https://www.excel.web.tr/login" , Navigate2 ise BYPASS_CACHE-- BYPASS_HİSTORY gibi nesnelerle birlikte ff.Navigate2 "https://www.excel.web.tr/login", BYPASS_CACHEkullanılıyor. Navigate1 yok, 3ve 4 de var ama ne işe yaradıklarını sanırım yazılımcısından başkası veya çok ileri derece bilgisi olmayanlar (benim gibi olanlar) pek anlayamaz.

Kod:
  ff.Navigate2 "https://www.excel.web.tr/login", BYPASS_CACHE
    ff.Navigate2 "https://www.excel.web.tr/login", IS_link
  .....
.....
     ff.Navigate2 "https://www.excel.web.tr/login", format_pdf
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,225
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Projenin dökümantasyon eksikliği var; kabul ediyorum. Projeyi yazarken yardımcı olacak kimse yoktu. Şuna bi dökümantasyon hazırlayalım... teklifi yapan da olmadı maalesef...

Bu nedenle BYPASS_CACHE kullanıldığında veya kullanılmadığında tarayıcının nasıl tepki verdiğini kullanıcının kendisinin keşfetmesini beklerim. Açıkçası temelleri dışındaki tüm özelliklerini ben de bilmiyorum. Tahmin, deneme-yanılma ile çözülmezse Google kutusuna geckofx login web page c# vb.net gibi anahtar kelimeler ile örnek algoritmalara ulaşmayı deneyin.

Bir önceki mesajımda verdiğim forum giriş kodlarında bu parametre kullanılmadığında UserForm ikinci defa çalıştırıldığında oturum açık olarak başlar mesela... BYPASS_CACHE 'nin varlığı ile yokluğu arasındaki bu farkını tarayıcının nasıl tepki verdiğini gözlemlemeyi hiç denediniz mi?
 
Katılım
7 Ağustos 2019
Mesajlar
28
Excel Vers. ve Dili
16.0 - Türkçe -- Office 365
Projenin dökümantasyon eksikliği var; kabul ediyorum. Projeyi yazarken yardımcı olacak kimse yoktu. Şuna bi dökümantasyon hazırlayalım... teklifi yapan da olmadı maalesef...

Bu nedenle BYPASS_CACHE kullanıldığında veya kullanılmadığında tarayıcının nasıl tepki verdiğini kullanıcının kendisinin keşfetmesini beklerim. Açıkçası temelleri dışındaki tüm özelliklerini ben de bilmiyorum. Tahmin, deneme-yanılma ile çözülmezse Google kutusuna geckofx login web page c# vb.net gibi anahtar kelimeler ile örnek algoritmalara ulaşmayı deneyin.

Bir önceki mesajımda verdiğim forum giriş kodlarında bu parametre kullanılmadığında UserForm ikinci defa çalıştırıldığında oturum açık olarak başlar mesela... BYPASS_CACHE 'nin varlığı ile yokluğu arasındaki bu farkını tarayıcının nasıl tepki verdiğini gözlemlemeyi hiç denediniz mi?
Merhaba.
Sayın Zeki Gürsoy, öncelikle emeklerinize sağlık.
Siz de tahmin edersiniz ki buradaki kullanıcılar içerisinde sizin gibi profesyoneller olduğu gibi hiç bilgisi olmayanlar da var, bizler kodları çoğu zaman bir kaç önemsiz değişiklik yapıp kullanıyoruz. Çalışmanız; internet üzerinden veri çekimi/ gönderimi yapan Excel VBA kullanıcıları için, ie den sonra bir kurtarıcı gibi görünüyor.

Amacım belki kullanmayı düşünen birisi olursa (daha öncede belirtmiştim) bilgilenmesi için şuana kadar kendimce deneyip fark görebildiklerim ve kullanım şekillerini yazmak.

Dediğiniz kelimeler ve daha fazlası ile arama yaptım ama - acemi olduğum için- pek birşey anlamadım. Her biri için 4-5 kaynak okumaya çalışıyor, örnekleri VBA ya uygulamaya çalışıyorum, ama neredeyse acemiler için kaynak yok gibi diyebilirim.

Örnek verdiğiniz için bypass_cache'nin mantığını (kullanıcı giriş bilgileri kayıtlı ise dikkate alma, vba ile verilen bilgileri dikkate al gibi bir şey olduğunu düşünüyordum) ve navigate2 komutu ile çalıştığını anladım. Mesajinizdan önce eğer yardımcı nesne kullanılmayacaksa "navigate2" kodu yerine sadece "navigate" kodunun kullanılması gerektiğini, ya da "mimeinputstream" nesneleri ile kullanılacaksa navigate3 kodunun kullanılması gerektiğini, " .Dispose" komutunun web işlemleri bitirmek için bir nevi ".Quit" komutu olduğunu deneme-yanılma/ araştırma yoluyla anladım.

Ama malumunuz yazdığınız kodları ve kullanım şekillerini en iyi siz bilirsiniz. Mesela daha önce ie kodlarını kullananlar; vermiş olduğunuz örnekte geçen ff.Navigate2 "https://www.excel.web.tr/login", BYPASS_CACHE kısmı görünce; ie ekranı gibi bir firefox ekranı açılacağını ve işlemlerin bu ekranda otomatik olarak gerçekleşeceğini düşünür. Ama öyle olmuyor. Çünkü temelde farklılıklar var.
Yani beklentimiz bir kaç temel kod / açıklama.
Mesela;
Adım adım hataları görebilmek için kodlarla; userform dışında bağımsız bir firefox browser açıp, form doldurma ve tıklama işlemlerini yaptırabilir miyiz? Mesela her ne kadar browser açık olmasa da bağlanılan sitenin html kodunu ViewSource ile görebiliyoruz görebiliyoruz, bunun benzeri bir kod var mı?
Eğer böyle birşey mümkün değilse; userform üzerindeki browser'a otomatik form doldurmak için müdahale edebilir miyiz?
Ya da vermiş olduğunuz örnekteki gibi arkaplanda çalışan kodların aşamalarını nasıl görebiliriz?

Son olarak: "Projeniz ile ilgili yardımcı olabileceğimiz bir şey var mı" diye soramayacak kadar uzağım bu konulara.
Başarılarınızın devamını dilerim.
 
Katılım
7 Ağustos 2019
Mesajlar
28
Excel Vers. ve Dili
16.0 - Türkçe -- Office 365
Kullanmak isteyenlere bilgi amaçlıdır.
Userform üzerindeki browser üzerinden çalıştırdığınızda; site üzerindeki elementleri (classname, id vs gibi) doldurma (form fill ) (post) veya verisini alma (get) kullanım şekil örneği:


Örnek: Userform üzerinde FirefoxBrowser nesnesi ile açılan sitenin "identification" isimli id elementine kullanıcı adını yazdırma FirefoxBrowser1.document.GetElementById("identification") = "Kullanıcı Adı"


Verisini x değişkenine atama
x= FirefoxBrowser1.document.GetElementById("identification") <-----( kulanıcı giriş alanı olduğu için boş gelir, sadece gösterim amaçlıdır)




Kod:
Private Sub CommandButton1_Click()
    'Ref: Firefox WebBrowser For VBA
    Dim os    As New OSInfo
    Dim agent As String
  
    'It is not mandatory to assign a User-Agent, but pages such as Google and Whatsup-Web
    'to be able to check the page format or browser version information to be loaded
    'Needs Navigator information in order.
    '
    '64 bit Windows 10 sample ...
    'Mozilla / 5.0 (Windows NT 10.0; Win64; x64; rv: 60.0) Gecko / 20100101 Firefox / 60.0
    '------------------------------------------------- -----------------------------
    '32 bit Windows 10 sample ...
    'Mozilla / 5.0 (Windows NT 10.0; rv: 60.0) Gecko / 20100101 Firefox / 60.0
    '
    agent = "Mozilla / 5.0 ({0} {1}. {2}; {3} rv: 60.0) Gecko / 20100101 Firefox / 60.0"
    agent = Replace(agent, "{0}", os.PlatformID)
    agent = Replace(agent, "{1}", os.Major)
    agent = Replace(agent, "{2}", os.Minor)
    agent = IIf(os.Is64bitOperatingSystem, Replace(agent, "{3}", "Win64; x64;"), "")
    '
    Debug.Print agent
    '
    FirefoxBrowser1.Preferences("general.useragent.override") = agent
    FirefoxBrowser1.Preferences("intl.accept_languages") = "tr-TR, tr, en-US, en"
    '
    FirefoxBrowser1.Navigate2 "https://ybs.hmb.gov.tr/", BYPASS_CACHE
'------------------ buraya kadar ki kısmı browser ayarı (https://zekigursoy.blogspot.com sitesindeki kod )



'------aşağısı --- USERFORM ÜZERİNDEKİ BROWSER  ile  ile açılan sitenin bir kullanıcı adını ve şifresini doldurma örneği

    FirefoxBrowser1.Wait
    FirefoxBrowser1.Document.GetElementById("identification") = "Kullanıcı Adı"
    FirefoxBrowser1.Document.GetElementById("password") = "Şifre"
   Set frm = FirefoxBrowser1.Document.EvaluateXPath("//button[@class='mly-login-button']").GetNodes.Item(0)
    frm.Click
 
Son düzenleme:
Üst