El sitio web que estoy raspando tiene una lista de tiempos de espera que cambian regularmente. Me gustaría tener una variable js personalizada en Google Tag Manager si es posible que pueda usar para impulsar el promedio de estos valores cuando el evento se activa en Google Analytics. Tengo un código en R que funciona para obtenerlo cada hora, pero se me pide que lo extraiga como una dimensión personalizada con cada evento. Me pregunto si hay una manera de hacer algo similar en js. Aquí está el código R:
er_times <- ("url") %>% read_html() %>% html_nodes(xpath="//div[@class='time-info--right']/text()") er_times <- as_list(er_times)
Eso me da una lista del texto interno de todos los elementos de la clase 'time-info--right' que contiene los tiempos y luego tengo un script que limpia los datos y toma el promedio de los tiempos de espera.
Entonces, estoy buscando obtener una lista o un tipo de datos similar en js donde pueda manipularlo, convertirlo a int, tomar un promedio y usarlo como una variable personalizada en GTM. Hasta ahora he probado:
Var wait_times = document.evaluate('/html/body/div[2]/div/main/div[2]/div/div[1]/div[2]/div[3]/div[1]/div[2]/div[1]/div[2]', document, null, XPathResult.ANY_TYPE, null);
Y
document.querySelectorAll(".time-info--right").innerText
que tanto me dio indefinido.
document.querySelectorAll(".time-info--right").innerText
me da el primer elemento que necesito solamente.
No tengo experiencia con js, así que si alguien pudiera decirme si esto es posible, ¡sería genial! ¡Gracias!
Algo como esto debería funcionar en GTM (sin usar construcciones de ES6+). El punto clave es que document.querySelectorAll
devuelve una lista de nodos. No puede simplemente acceder a la propiedad de texto de esa lista, debe iterar a través de ella usando un iterador de algún tipo como un bucle for
o forEach
para acceder a la propiedad de texto de cada nodo individual.
getTimes = function() { var timeArray = []; var times = document.querySelectorAll('.class-for-your-times'); times.forEach(time => { var numberTime = parseInt(time.innerText); timeArray.push(numberTime); }); return timeArray }