¿Cómo ordenar extensiones en Chrome Web Store?

¿Cómo ordenar extensiones en Chrome Web Store?

La Google Chrome Web Store me parece un desastre. No puedo encontrarle sentido.

¿Cómo se pueden ordenar las extensiones por popularidad? ¿Por calificación? ¿Por cantidad de descargas? ¿Por más nuevo? ¿Por actualizado recientemente?

¿Estoy pasando por alto algo por completo?

https://chrome.google.com/webstore/category/extensions

Respuesta1

He creado un clasificador js simple que funciona en la consola de herramientas de Chrome Dev. Puedes llegar a la página de GitHub.aquí.

Principalmente ordena las extensiones en Chrome Web Store. Se ejecuta en la consola Chrome Dev Tools que se inicia con Ctrl+Shift+I.

Después de abrir la página de extensiones de búsqueda en el enlacehttps://chrome.google.com/webstore/search/PHRASE?_category=extensionscon su frase de búsqueda reemplazada por FRASE. Y luego el código en sorter.js se ejecuta en la consola de desarrollo de Chrome.

En primer lugar, carga todas las extensiones en la página de desplazamiento infinito desplazándose automáticamente por la página hasta que no se desplaza. Luego los clasifica por número de votos.

var i = 0;
var num_of_items = 0;
var stop = false;
function startCheck(max)
{
    i++;
    
    //document.querySelectorAll('div.h-a-Kd.a-Hd-mb')[0];
    var bottom = document.querySelectorAll('div.h-a-Hd-mb.a-Hd-mb')[0];
    bottom.scrollIntoView();
    //scrollTo(scrollX,scrollY+1000); 
    console.log(i.toString());  
    
    var items = document.querySelectorAll('.a-d-na.a-d.webstore-test-wall-tile.a-d-zc.Xd.dd');
    var new_num_of_items = items.length;
    if (num_of_items != new_num_of_items)
    {
        num_of_items = new_num_of_items;
        console.log('Loaded items : ' + new_num_of_items);
    }   
    
    if (i>max || stop) 
    {
        i = 0;
        num_of_items = 0;
        stop = false;
        items[new_num_of_items-1].scrollIntoView(false);
        sortsort();
        return;
    }
    
    var t = setTimeout(function (){startCheck(max);}, 100);
}

var MAX_COUNT = 25;
var counter = 0;
function stopCheck()
{   
    var spin = document.querySelectorAll('div.h-a-Kd.a-Hd-mb')[0];  
    var state_new = spin.attributes.style.value == "display: none;"
    
    if (state_new)
        counter++;
    else
        counter=0;
    
    console.log('Counter : ' + counter);
    if (counter > MAX_COUNT)
    {
        counter = 0;
        stop = true;        
        return;
    }
    
    var t = setTimeout(function (){stopCheck();}, 100);
}

var sortsort = function() {

    var ab = document.querySelectorAll('.a-d-na.a-d.webstore-test-wall-tile.a-d-zc.Xd.dd');
    console.log(ab.length);
    var ab_arry = Array.from(ab);

    var index_str;
    var star_str;
    ab_arry.forEach((star) => {
        
        index_str = star.attributes.hasOwnProperty("index") ? Number(star.attributes.index.value.toString().replace(/,/g, '')) : 0
        star_str  = star.getElementsByClassName("nAtiRe").length > 0 ? Number(star.getElementsByClassName("nAtiRe")[0].textContent.toString().replace(/,/g, '')).toString() : "Not voted";

        console.log( index_str + " = >>>> " + star_str);        
    });

    ab_arry.sort(function (a,b) {
        var a_star =  a.getElementsByClassName("nAtiRe").length > 0 ? Number(a.getElementsByClassName("nAtiRe")[0].textContent.toString().replace(/,/g, '')) : 0;
        var b_star =  b.getElementsByClassName("nAtiRe").length > 0 ? Number(b.getElementsByClassName("nAtiRe")[0].textContent.toString().replace(/,/g, '')) : 0;
        
        return (b_star - a_star);   
    });


    let row_nodes = document.querySelectorAll('.h-a-x > [role="grid"] > [role="row"]');
    var row_nodes_arry = Array.from(row_nodes);
    var sr;

    for (var rr = 0; rr < row_nodes_arry.length; rr++)
    {   
        sr_start = rr * 3;
        
        var msg = rr.toString() + ' <--- ';
        for (var sr = sr_start; sr < sr_start + 3 && sr < ab_arry.length ; sr++)
        {
            msg += '1:' + sr + ' ';
            row_nodes_arry[rr].appendChild(ab_arry[sr]);
        }   
        console.log(msg);
    }

}

startCheck(3000);
stopCheck();

Respuesta2

No hay mucho que hacer, pero estas son las pequeñas cosas que puedes hacer:

  • Por calificación (1) :
    • Puede filtrar por calificación: establezca el límite bajo de inicios para sus resultados.
  • Por actualizado recientemente (2) :
    • Actualizado recientemente según lo indicado por Google, no podemos saber si hay más detrás. Supongo (por lo que veo), que en realidad son "extensiones populares recientemente actualizadas".
  • Popularidad (3) :
    • Creo que lo más cercano sería elDestacadossección. Suelen ser aplicaciones/extensiones buenas y populares, y el hecho de que sean elegidas también las impulsa.
  • El más nuevo:
    • Lamentablemente no parece posible. Tal vez, si hay actualizaciones de la Tienda Web, puedas obtener esta información desde allí.
  • Descargas:
    • Realmente no es una opción, aunque creo que se puede conocer (más o menos) por los otros parámetros (calificación, destacados, selecciones del editor, etc.)

ingrese la descripción de la imagen aquí

Respuesta3

Encontré una manera de ordenar las extensiones por "actualizadas recientemente" de una manera un poco indirecta usando Google:

Por ejemplo, estaba buscando complementos jQuery recientes:

  • ir awww.google.com, buscar...
    'sitio:chrome.google.com "jquery"' (o también podrías usar 'título: "jquery"')
  • haga clic en 'Herramientas > En cualquier momento', cámbialo a 'Semana pasada' o el plazo que desees

los resultados incluirán complementos agregados recientemente y actualizados

Respuesta4

esto funciona para mí (marzo 2024)

presionar el botón "Cargar más" varias veces

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function demo() {
    for (let i = 0; i < 5; i++) {
        document.querySelector('button.Vs7jVd').click();
        await sleep(i * 1000);
    }
    console.log('Done');
}

demo();

para ordenar extensiones por calificaciones

// Function to sort extensions by downloads
function sortExtensionsByDownloads() {
  var extensions = [];
  // Selecting each extension item
  var extensionElements = document.querySelectorAll('[jsname="hs2VQd"]:not(.load-more-button)');
  extensionElements.forEach(function(extension) {
    var name = extension.querySelector('.GzKZcb').innerText.trim();
    var downloadsText = extension.querySelector('.Y30PE').innerText.trim();
    extensions.push({ name: name, downloadsText: downloadsText, element: extension });
  });

  // Sorting extensions by number of downloads
  extensions.sort(function(a, b) {
    return compareDownloads(a.downloadsText, b.downloadsText);
  });

  // Reordering extensions on the webpage
  var parentElement = extensionElements[0].parentNode;
  extensions.forEach(function(extension) {
    parentElement.appendChild(extension.element);
  });
}

// Function to compare download counts
function compareDownloads(a, b) {
  // Regular expression to extract numeric value and unit
  var regex = /([\d.]+)\s*([KM]*)/;
  var matchA = regex.exec(a);
  var matchB = regex.exec(b);

  // Extract numeric value and unit
  var aValue = parseFloat(matchA[1]);
  var aUnit = matchA[2];
  var bValue = parseFloat(matchB[1]);
  var bUnit = matchB[2];

  // Convert units to numerical values
  if (aUnit === 'K') aValue *= 1000;
  if (bUnit === 'K') bValue *= 1000;
  if (aUnit === 'M') aValue *= 1000000;
  if (bUnit === 'M') bValue *= 1000000;

  // Compare numerical values
  return bValue - aValue;
}

// Call the function to sort extensions by downloads
sortExtensionsByDownloads();

información relacionada