Quería verificar una compra anterior en Google Play, pero el historial mostrará todo lo que reclamé. Incluyendo, un montón de aplicaciones gratuitas (enumeradas como $ 0.00), y es imposible filtrar nada en esa lista.
Así que pensé que podría hacer un script simple de TamperMonkey para que lo hiciera por mí, pero no funciona por alguna razón.
¿Que me estoy perdiendo aqui? Gracias.
Esto es lo que tengo hasta ahora:
// ==UserScript== // @name Filter Out $0.00 Garbage // @namespace http://tampermonkey.net/ // @version 0.1 // @description ... // @author Me // @match https://play.google.com/store/account/orderhistory // @icon https://www.google.com/s2/favicons?sz=64&domain=google.com // @grant none // ==/UserScript== (function() { var ele = document.getElementsByClassName('mshXob'); for (var i = 0; i < ele.length; ++i) { var item = ele[i]; if (item.innerHTML == '$0.00') { var gp = item.parentNode.parentNode.parentNode; gp.style.display = 'none'; } } })();Tal vez probarlo con XPATH
Aquí:
// ==UserScript== // @name Filter Out $0.00 Garbage // @namespace http://tampermonkey.net/ // @version 0.1 // @description ... // @author Me // @match https://play.google.com/store/account/orderhistory* // @icon https://www.google.com/s2/favicons?sz=64&domain=google.com // @grant none // ==/UserScript== (function() { const MutationObserver = window.MutationObserver || window.WebKitMutationObserver; const observer = new MutationObserver(hideZeroElements); // tried with div elements but does not seem to work. observer.observe(document.body, { subtree: true, childList: true, attributes: false }); })(); function hideZeroElements(mutations, observer) { /** * Get all the divs whom grand children contain a 0,00 value or 0.00 in your case */ const history = document.evaluate('//div[div[2]/div//div[contains(text(), "0.00")]]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); /** * Loop over all the elements found and hide them. */ for ( let i = 0; i < history.snapshotLength; i++) { history.snapshotItem(i).style.display = "none"; } }Nota : no estoy seguro de si hay una forma de desconectar al observador o no dentro del script de usuario.
Puede estar confiando en classNames que cambian. Las bibliotecas de JavaScript como Angular/React/etc pueden cambiar los ID y ClassNames para ofuscar el código.
Intente usar selectores de DOM y métodos transversales de DOM que no se basen en nombres de clase e ID constantes.
Prueba esto:
// ==UserScript== // @name play.google.com/store/account/orderhistory // @namespace http://tampermonkey.net/ // @match https://play.google.com/store/account/orderhistory // @grant none // ==/UserScript== (function() { 'use strict'; const container = document.querySelector('body>c-wiz:nth-child(5)>div>div>div:nth-child(3)+div>div:nth-child(1)'); const orders = container.querySelectorAll('div'); orders.forEach((el,_) => { const bucks = el.querySelector('div:nth-child(2)>div>div:nth-child(2)'); if (bucks !== null){ if (bucks.innerText === 'US$0.00') el.remove(); } }); })();Aquí hay otra respuesta que responde a su comentario (no se pudo responder con un comentario porque se requiere más flexibilidad) .
¿El ícono TM tiene un punto rojo cuando visitas esa página? Si es así, el script se está ejecutando pero no funciona; si no, la línea @match no activa el script (es decir, no coincide con la URL). ¿Puedes determinar cuál es el caso?
Lo siguiente que debe verificar: abra DevTools (F12) y pegue el primer querySelector. ¿DevTools muestra algo como esto (DevTools responde con div.NgfTBf.fny74c ) :
Si no aparece nada cuando pega esa línea de querySelector, es posible que sea necesario modificar ese selector. La forma de hacerlo es construir el selector poco a poco y ver qué sucede a medida que se agrega cada etapa:
document.querySelector('body') //this HAS to return something...!después:
document.querySelector('body>c-wiz:nth-child(5)') (que uno podría necesitar ser nth-child(3) - intente eso también)
En cada etapa, Chrome DevTools debería mostrar algo. Por ejemplo:
Este video puede resultarle útil: https://www.youtube.com/watch?v=SowaJlX1uKA
Déjame saber lo que ves.