Wie sortiere ich Erweiterungen im Chrome Web Store?

Wie sortiere ich Erweiterungen im Chrome Web Store?

Der Google Chrome Web Store kommt mir wie eine Katastrophe vor. Ich kann mir keinen Reim darauf machen.

Wie können Sie Erweiterungen nach Beliebtheit sortieren? Nach Bewertung? Nach Anzahl der Downloads? Nach Neuheit? Nach kürzlicher Aktualisierung?

Übersehe ich etwas völlig?

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

Antwort1

Ich habe ein einfaches Sorter-JS erstellt, das auf der Chrome Dev Tools-Konsole funktioniert. Sie erreichen die GitHub-SeiteHier.

Es sortiert hauptsächlich die Erweiterungen im Chrome Web Store. Es läuft auf der Chrome Dev Tools-Konsole, die mit Strg+Umschalt+I gestartet wird.

Nach dem Öffnen der Sucherweiterungsseite über den Linkhttps://chrome.google.com/webstore/search/PHRASE?_category=extensionswobei Ihr Suchbegriff durch PHRASE ersetzt wird. Und dann wird der Code unter sorter.js auf der Chrome-Entwickler-Konsole ausgeführt.

Zuerst werden alle Erweiterungen auf der Endlos-Scroll-Seite geladen, indem die Seite automatisch gescrollt wird, bis kein Scrollen mehr möglich ist. Dann werden sie nach der Anzahl der Stimmen sortiert.

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();

Antwort2

Es gibt nicht viel zu tun, aber hier sind die kleinen Dinge, die Sie tun können:

  • Nach Bewertung (1) :
    • Sie können nach der Bewertung filtern und eine Mindestanzahl an Starts für Ihre Ergebnisse festlegen.
  • Von kürzlich aktualisiert (2) :
    • Laut Google wurde es kürzlich aktualisiert, wir können nicht wissen, ob mehr dahinter steckt. Ich vermute (soweit ich sehe), dass es sich eigentlich um „kürzlich aktualisierte beliebte Erweiterungen“ handelt.
  • Popularität (3) :
    • Ich denke, das Nächste wäre dasRedakteurfavoritenAbschnitt. Das sind normalerweise gute und beliebte Apps/Erweiterungen, und die Tatsache, dass sie ausgewählt werden, steigert ihren Bekanntheitsgrad zusätzlich.
  • Neueste:
    • Leider scheint das nicht möglich zu sein. Vielleicht können Sie diese Informationen von einem Feed mit Updates aus dem Web Store beziehen.
  • Downloads:
    • Nicht wirklich eine Option, obwohl ich denke, dass man es (mehr oder weniger) anhand der anderen Parameter (Bewertung, Hervorgehoben, Empfehlungen der Redaktion usw.) erkennen kann.

Bildbeschreibung hier eingeben

Antwort3

Ich habe eine Möglichkeit gefunden, Erweiterungen mithilfe von Google auf etwas umständliche Weise nach „kürzlich aktualisiert“ zu sortieren:

Ich habe beispielsweise nach aktuellen jQuery-Add-Ons gesucht:

  • gehe zuwww.google.com, suchen nach...
    'site:chrome.google.com "jquery"' (oder Sie können auch 'in Titel: "jquery"')
  • klicke auf 'Tools > Jederzeit', ändern Sie es in 'Letzte Woche' oder welchen Zeitrahmen Sie auch immer wünschen

Die Ergebnisse umfassen sowohl kürzlich hinzugefügte als auch aktualisierte Add-Ons

Antwort4

das funktioniert bei mir (März 2024)

Drücken Sie die Schaltfläche "Mehr laden" mehrmals

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();

um Erweiterungen nach Bewertungen zu sortieren

// 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();

verwandte Informationen