Saltar al contenido

De IE a Selenium con Chrome


Recommended Posts

publicado
Hola a todos. Llevo meses empleando una macro para hacer scrapping la cual tengo que modificar dado que la web ya no admite IE. A través de tutoriales conseguí escribir un código que me permite obtener los datos, llevo varias semanas y tengo dos problemas:

Primero, no consigo que la macro copie los datos de página 2 debajo de los datos de la página 1, los de la 3 debajo de las 2,..., sino que siempre copia encima de lo anterior.

Segundo, copiar los datos en la hoja de excel actual (solo consigo que copie los datos si creo una nueva hoja)


Este es el código inicial que funciona bien, debajo pongo a donde he llegado con Selenium. Empleo "i" para marcar el número de elementos a obtener de cada web, "i2" es el número de páginas que tiene esa sección de la tienda
 
Código:
    Sub aMonitores()

        Dim ie As Object
        Set ie = CreateObject("InternetExplorer.Application")
        With ie
        .Visible = False
        
        For i2 = 1 To 13
       
         Worksheets("aMonitores").Select
        .navigate "......page=" & (i2) & ""
        Application.Wait (Now + TimeValue("0:00:1"))
        Do
        DoEvents
        Loop Until ie.readyState = READYSTATE_COMPLETE
        Dim doc As HTMLDocument
        Set doc = ie.document
        While ie.readyState <> 4
        Wend
        
               On Error Resume Next
        
        Dim i As Integer
        For i = 0 To 11
             
   'product link, probably wrong class name
        
        Range("A7").Offset(i + (i2 * 12), 0).Value = doc.getElementsByClassName("ProductsListstyled__ProductContainer-a3dwak-1 kpaiIf")(0).getElementsByClassName("Linkstyled__StyledLinkRouter-sc-1drhx1h-2 hihJjl ProductListItemstyled__StyledLink-sc-16qx04k-0 dYJAjV")(i).href
   
   'actual data
   
        Range("D7").Offset(i + (i2 * 12), 0).Value = doc.getElementsByClassName("StyledBox-sc-1vld6r2-0 bncFqw StyledFlexBox-sc-1w38xrp-4 lmlWlG")(i).innerText
          
        
        Next i
        Next i2
        
'tell me how many products are exhibit on the web
        
        Range("B1").Value = doc.getElementsByClassName("Cellstyled__StyledCell-sc-1wk5bje-0 NLfJA")(0).getElementsByClassName("Typostyled__StyledInfoTypo-sc-1jga2g7-0 kTxGyM")(0).innerText
        Range("C1").Value = doc.getElementsByClassName("Cellstyled__StyledCell-sc-1wk5bje-0 NLfJA")(0).getElementsByClassName("Typostyled__StyledInfoTypo-sc-1jga2g7-0 bfsyWw")(0).innerText
                   
'count the data obtained

  Range("C2").Select
    ActiveCell.FormulaR1C1 = "=COUNTA(R[3]C[-2]:R[4998]C[-2])"
 Range("E2").Select
    ActiveCell.FormulaR1C1 = "=COUNTA(R[3]C[-2]:R[4998]C[-2])"
    
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "=COUNTA(R[3]C[-2]:R[4998]C[-2])"
        
        ie.Quit
             Application.EnableEvents = True

    End With
    
End Sub


Código con Selenium:
 
Código:
Option Explicit

Private cd As Selenium.ChromeDriver


Sub mm()

 Set cd = New Selenium.ChromeDriver

 Worksheets("aMonitores").Select

 Dim ws As Worksheet

 Dim i As Integer

 Dim i2 As Integer

For i2 = 1 To 13

 cd.Get ".....?page=" & (i2) & ""

 Dim clases As Selenium.WebElements

 Dim clase As Selenium.WebElement

On Error Resume Next

 For i = 1 To 12

 Set clases = cd.FindElementsByCss(".StyledBox-sc-1vld6r2-0.bncFqw.StyledFlexBox-sc-1w38xrp-4.lmlWlG")

 clases.Text.ToExcel  ThisWorkbook.Worksheets.Add.Range("A1")

Next i
Next i2

cd.Close

End Sub


Lo he intentado con otras opcines como:

- Sustituir la línea de CSS del segundo código en el primero
- Escribir (i) en la línea del cd.findelementsbycss en el segundo código

Y otras tantas que no logro recordar

Muchas gracias por vuestro tiempo.
 

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.