lundi 9 mars 2020

How to scrape a class and if not found scrape another

I am using VBA to scrape a website. The scraper made by me works but I want to implement 2 more functions and don't really know how to do it. This is the code:

Sub pronutrition()
Set ie = CreateObject("InternetExplorer.Application")
my_url = "https://www.myprotein.ro/"
ie.Visible = True
i = 20
LastRow = ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row

Set Rng = ActiveSheet.Range("A20:A" & LastRow)
For Each cell In Rng

ie.navigate my_url
    Do While ie.Busy
        DoEvents
    Loop
    Wait 1

ie.Document.getElementsByName("search")(0).Value = cell


ie.Document.getElementsByClassName("headerSearch_button")(0).Click
    Do While ie.Busy
        DoEvents
    Loop
    Wait 2
ActiveSheet.Range("B" & i) = ie.Document.getElementsByClassName("athenaProductBlock_productName")(0).innerText + ie.Document.getElementsByClassName("athenaProductBlock_fromValue")(0).innerText
    Do While ie.Busy
        DoEvents
    Loop
    Wait 2

ActiveSheet.Range("C" & i) = ie.Document.getElementsByClassName("athenaProductBlock_productName")(1).innerText + ie.Document.getElementsByClassName("athenaProductBlock_fromValue")(1).innerText
    Do While ie.Busy
        DoEvents
    Loop
    Wait 2

ActiveSheet.Range("D" & i) = ie.Document.getElementsByClassName("athenaProductBlock_productName")(2).innerText '+ ie.Document.getElementsByClassName("athenaProductBlock_priceValue")(2).innerText
    Do While ie.Busy
        DoEvents
    Loop
    Wait 2

ActiveSheet.Range("E" & i) = ie.Document.getElementsByClassName("athenaProductBlock_productName")(3).innerText '+ ie.Document.getElementsByClassName("athenaProductBlock_priceValue")(3).innerText

    Do While ie.Busy
        DoEvents
    Loop
    Wait 2

i = i + 1
Next cell
ie.Quit
MsgBox "Done"
End Sub

First I want to search for "athenaProductBlock_fromValue" class and if it doesn't find it to search for "athenaProductBlock_priceValue", and second, if it doesn't find more than 1 or 2 products (the range is set to 4) to stop the search (right now it returns and error if it doesn't find a 2nd or a 3rd product and won't go to search the next keyword).

Any advice would be appreciated. Thank you!

Aucun commentaire:

Enregistrer un commentaire