Home > Enterprise >  VBA web scraping issue - how to navigate specific web using html structure (href / child/ )
VBA web scraping issue - how to navigate specific web using html structure (href / child/ )

Time:09-27

Hello dear VBA collegues :)

Sub login()
'test 
    Const URL$ = "https://kwm.kromi.de/cgi-bin/kwm?HTML=frontend/login.htm"
    Dim UserName As String, Password As String, LoginData As Worksheet
    Set LoginData = ThisWorkbook.Worksheets("Sheet1")
    UserName = LoginData.Cells(1, "B").Value
    Password = LoginData.Cells(2, "B").Value
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.Application")
    With IE
        .Visible = False
        .Navigate URL
        ieBusy IE
        .Visible = True
       Dim oLogin As Object, oPassword As Object
        Set oLogin = .document.getElementsByName("VS_LOGIN")(0)
        Set oPassword = .document.getElementsByName("VS_PASSWORD")(0)
        oLogin.Value = UserName
        oPassword.Value = Password
        .document.forms(0).submit
        ieBusy IE
       Stop
       '.document.getElementsByTagName("a")(2).href
       '.document.getElementsByClassName("link3").Click
     .Navigate2 ""
     ieBusy IE
     Stop
    End With
'''
End Sub
Sub ieBusy(IE As Object)
    Do While IE.Busy Or IE.readyState < 4
        DoEvents
    Loop
End Sub

And the first task is work, macro log in to website. I need to go deeper and click something but structure of web is too much for my small head I am looking some examples on website but nothing work. I showed code of website below. I need to click button "statystyka".

/html/body/div[1]/div[1]/a[2] - Xpath adress [link picture]https://ibb.co/2Pgx2tn

May you give me some help please :)

edit: I tried use something like this: '.document.getElementsByTagName("a")(2).href but this not good way on thinking

CodePudding user response:

You need to move into the appropriate frame, add a wait as I am using .Navigate to the frame src, then you can target by a substring of the onclick attribute:

ie.navigate ie.document.querySelector("[name=Navigator]").src
ieBusy ie
ie.document.querySelector("[onclick*=statistic]").click
  • Related