Jump to content

knuckles

Visitante
  • Posts

    1
  • Joined

  • Last visited

  • Country

    Spain

knuckles's Achievements

  1. 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.
×
×
  • Create New...

Important Information

Privacy Policy