A Google Chrome Web Store parece um desastre para mim. Não consigo entender isso.
Como você pode classificar as extensões por popularidade? Por classificação? Por quantidade de downloads? Por mais novo? Por atualizado recentemente?
Estou negligenciando completamente alguma coisa?
Responder1
Eu criei um classificador js simples que funciona no console de ferramentas do Chrome Dev. Você pode acessar a página do GitHubaqui.
Ele classifica principalmente as extensões na Chrome Web Store. Ele é executado no console Chrome Dev Tools, iniciado por Ctrl+Shift+I.
Depois de abrir a página de extensões de pesquisa no linkhttps://chrome.google.com/webstore/search/PHRASE?_category=extensionscom sua frase de pesquisa substituída por PHRASE. E então o código em sorter.js é executado no chrome dev cosole.
Em primeiro lugar, ele carrega todas as extensões na página de rolagem infinita, rolando automaticamente a página até não rolar. Em seguida, ele os classifica 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();
Responder2
Não há muito o que fazer, mas aqui estão as pequenas coisas que você pode fazer:
- Por classificação (1) :
- Você pode filtrar por classificação - defina o limite inferior de partidas para seus resultados.
- Por atualizado recentemente (2) :
- Atualizado recentemente conforme declarado pelo Google, não podemos saber se há mais por trás disso. Eu acho (pelo que vejo), na verdade são "extensões populares atualizadas recentemente".
- Popularidade (3) :
- Acho que o mais próximo seria oEscolhas dos editoresseção. Esses geralmente são aplicativos/extensões bons e populares, e o fato de estarem sendo escolhidos também os impulsiona.
- O mais novo:
- Infelizmente não parece ser possível. Talvez se houver um feed de atualizações da Web Store, você possa obter essas informações de lá.
- Transferências:
- Não é realmente uma opção, embora eu ache que pode ser conhecida (mais ou menos) pelos outros parâmetros (classificação, destaque, escolhas do editor etc.)
Responder3
Encontrei uma maneira de classificar as extensões por 'atualizadas recentemente' de uma forma um pouco indireta usando o Google:
Por exemplo, eu estava procurando complementos recentes do jQuery:
- Vá parawww.google.com, procurar...
'site:chrome.google.com"jquery"' (ou você também pode usar 'título:"jquery"') - Clique em 'Ferramentas > A qualquer hora', mude para 'Semana passada' ou qualquer período de tempo que você quiser
os resultados incluirão complementos adicionados recentemente e atualizados
Responder4
isso funciona para mim (março de 2024)
pressionar o botão "Carregar mais" várias vezes
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 classificar extensões por classificações
// 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();