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
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:
driver.execute_script('return window.__PRODUCT_DETAIL_APP_INITIAL_STATE__')
para ejecutar el javascript y recuperar los datos JSON.attributeValue
ybarcode
.Aquí hay un ejemplo de fragmento de código para implementar esto:
Este código producirá la siguiente salida:
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 devariantes
en los datos JSON y extrae los valores requeridos usando las clavesattributeValue
ybarcode
. Finalmente, imprime los valores en el formato deseado.