es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener datos de códigos Javascript con Python Selenium.

Estoy intentando obtener datos de JavaScript de un sitio web con Selenium. Sin embargo, no pude lograr lo que quería. A continuación se muestra una captura de pantalla del código JavaScript. Quiero extraer los números de código de barras y los valores de variación (como 36 números, 37 números) entre estos códigos. ¿Cómo puedo hacer esto mejor? Gracias por tu ayuda.

Código JavaScript de la página web

EDITAR 1:

Código de JavaScript:

window.PRODUCTDETAILAPPINITIALSTATE={“product”:{“attributes”:[],”alternativeVariants”:[],”variants”:[{“attributeId”:338,”attributeName”:”Beden”,”attributeType”:”Size”,”attributeValue”:”36″,”stamps”:[{“type”:1,”text”:”KARGO BEDAVA”},{“type”:3,”text”:”%35″}],”price”:{“profitMargin”:0,”discountedPrice”:{“text”:”143,99 TL”,”value”:143.99},”sellingPrice”:{“text”:”159,99 TL”,”value”:159.99},”originalPrice”:{“text”:”219,99 TL”,”value”:219.99},”currency”:”TRY”},”fulfilmentType”:”mp”,”attributeBeautifiedValue”:”36″,”isWinner”:true,”listingId”:”cb32c614f54395f199628ef7066ab102″,”stock”:null,”sellable”:true,”availableForClaim”:true,”barcode”:”100406115″,”itemNumber”:118134976,”discountedPriceInfo”:”Sepette %10 İndirim”,”hasCollectable”:false,”unitInfo”:{“unitPrice”:false,”unitPriceText”:false},”rushDeliveryMerchantListingExist”:false}],”otherMerchants”:[],”campaign”:{“id”:591963,”name”:”Kadın Giyimde Avantajlı Ürünler – Sepette %10 İndirim”,”startDate”:”2021-11-30T14:30:05″,”endDate”:”2021-12-07T05:00:00″,”isMultipleSupplied”:false,”stockTypeId”:7,”url”:”/kadin-giyimde-avantajli-urunler—sepette–10-indirim/butikdetay/591963″,”showTimer”:false},”category”:{“id”:103718,”name”:”Klasik Topuklu Ayakkabı”,”hierarchy”:”Ayakkabı/Topuklu Ayakkabı/Klasik Topuklu Ayakkabı”,”refundable”:true,”beautifiedName”:”klasik-topuklu-ayakkabi”,”isVASEnabled”:false},”brand”:{“isVirtual”:false,”beautifiedName”:”laminta”,”id”:205748,”name”:”LAMİNTA”,”path”:”/laminta-x-b205748″},”color”:”GÜMÜŞ ŞEFFAF”,”metaBrand”:{“id”:205748,”name”:”LAMİNTA”,”beautifiedName”:””,”isVirtual”:false,”path”:””},”showVariants”:true,”showSexualContent”:true,”brandCategoryBanners”:[],”allVariants”:[{“itemNumber”:118134976,”value”:”36″,”inStock”:true,”currency”:”TRY”,”barcode”:”100406115″,”price”:143.99},{“itemNumber”:118134979,”value”:”37″,”inStock”:true,”currency”:”TRY”,”barcode”:”100406116″,”price”:143.99},{“itemNumber”:118134975,”value”:”38″,”inStock”:true,”currency”:”TRY”,”barcode”:”100406117″,”price”:143.99},{“itemNumber”:118134983,”value”:”39″,”inStock”:true,”currency”:”TRY”,”barcode”:”100406118″,”price”:143.99},{“itemNumber”:118123516,”value”:”40″,”inStock”:true,”currency”:”TRY”,”barcode”:”100406119″,”price”:143.99}]}

Mi código simple es el siguiente. Obtengo un solo código de barras con el código a continuación. Sin embargo, no puedo extraer códigos de barras y otra información para cada variante.

def barkodBul():
if (‘barcode’ in driver.page_source):
p_id = driver.find_elements_by_tag_name(“script”)
for script in p_id:
innerHTML = script.get_property(‘innerHTML’)
task = re.search(‘barcode’, innerHTML)
if (task):
barkod = [l for l in innerHTML.split(“{“) if “barcode” in l][0]
barkod = barkod.split(“,”)
for k in range(0,len(barkod)):
if(‘barcode’ in barkod[k]):
barkod = barkod[k].split(“:”)
print barkod[1]
barkod = barkod[1].replace(‘”‘, ”)
print barkod
return barkod
return 0

Lo que quiero hacer:
36 BarcodeFor36
37 BarcodeFor37 y así sucesivamente.

EDITAR 2 – Solución: Gracias esqew

def barkodBul2():

time.sleep(3)
timeout = 30
WebDriverWait(driver, timeout).until(EC.visibility_of_element_located((By.CLASS_NAME, "pr-new-br")))
product_detail = driver.execute_script('return window.__PRODUCT_DETAIL_APP_INITIAL_STATE__')
for variant in product_detail['product']['variants']:
    print variant['attributeValue'] + " " + variant['barcode']

Salida:
36 100406115
37 100406116
38 100406117
39 100406118
40 100406119

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para extraer los números de código de barras y los valores de variación del código javascript proporcionado usando Selenium, puede seguir los siguientes pasos:

    1. Use driver.execute_script('return window.__PRODUCT_DETAIL_APP_INITIAL_STATE__') para ejecutar el javascript y recuperar los datos JSON.
    2. Recorra el array de variantes en los datos JSON y, para cada variante, extraiga los valores de attributeValue y barcode.
    3. Use estos valores para crear la cadena de salida deseada.

    Aquí hay un ejemplo de fragmento de código para implementar esto:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    import time
    
    # espere a que se cargue la página
    time.sleep(3)
    
    # espere a que los datos de detalles del producto estén disponibles
    timeout = 30
    WebDriverWait(driver, timeout).until(EC.visibility_of_element_located((By.CLASS_NAME, "pr-new-br")))
    
    # ejecutar el javascript y recuperar los datos de detalles del producto
    product_detail = driver.execute_script('return window.__PRODUCT_DETAIL_APP_INITIAL_STATE__')
    
    # recorre las variantes y extrae los datos requeridos
    for variant in product_detail['product']['variants']:
        print(variant['attributeValue'], 'BarcodePara'+variant['attributeValue'], variant['barcode'])
    

    Este código producirá la siguiente salida:

    36 BarcodePara36 100406115
    37 BarcodePara37 100406116
    38 BarcodePara38 100406117
    39 BarcodePara39 100406118
    40 BarcodePara40 100406119
    

    Este código utiliza la clase WebDriverWait para esperar a que los datos de detalles del producto estén disponibles antes de ejecutar el script. Luego recorre el array de variantes en los datos JSON y extrae los valores requeridos usando las claves attributeValue y barcode. Finalmente, imprime los valores en el formato deseado.

Comments are closed.