如何在 Chrome 線上應用程式商店中對擴充功能進行排序?

如何在 Chrome 線上應用程式商店中對擴充功能進行排序?

Google Chrome 線上應用程式商店對我來說似乎是一場災難。我無法理解它。

如何依受歡迎程度對擴充功能進行排序?按評級?按下載量?按最新的?透過最近更新?

我是否完全忽略了某些事情?

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

答案1

我創建了一個簡單的排序器 js,可以在 Chrome 開發工具控制台上運行。您可以造訪 GitHub 頁面這裡

它主要對Chrome Web Store上的擴充功能進行排序。它在 Chrome 開發工具控制台上運行,該控制台透過 Ctrl+Shift+I 啟動。

打開連結上的搜尋擴充頁面後https://chrome.google.com/webstore/search/PHRASE?_category=extensions將您的搜尋短語替換為 PHRASE。然後 sorter.js 下的程式碼在 chrome 開發控制台上運行。

它首先透過自動滾動頁面直到不滾動來加載無限滾動頁面上的所有擴充功能。然後根據票數對它們進行排序。

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

答案2

沒什麼可做的,但您可以做以下一些小事:

  • 按評級(1)
    • 您可以按評級進行過濾 - 設定結果的啟動下限。
  • 透過最近更新(2)
    • 正如穀歌所說,最近更新了,我們不知道背後是否還有更多內容。我猜(據我所知),這實際上是“最近更新的流行擴展”。
  • 人氣(3) :
    • 我認為最接近的是編輯精選部分。這些通常都是優秀且流行的應用程式/擴展,它們被選中的事實也促進了它們的發展。
  • 最新:
    • 不幸的是,這似乎不可能。如果網路應用程式商店有更新來源,您也許可以從那裡取得此資訊。
  • 下載次數:
    • 這並不是一個真正的選擇,儘管我認為它可以(或多或少)透過其他參數(評級、特色、編輯選擇等)來了解。

在此輸入影像描述

答案3

我找到了一種透過使用 Google 以稍微迂迴的方式按「最近更新」對擴充功能進行排序的方法:

例如,我正在尋找最近的 jQuery 外掛:

  • www.google.com, 搜尋...
    '網站:chrome.google.com“jquery”' (或者你也可以使用 '標題:“jquery”')
  • 點擊 '工具 > 隨時',將其更改為 '上週' 或任何你想要的時間範圍

結果將包括最近添加和更新的插件

答案4

這對我有用(2024 年 3 月

按幾次“加載更多”按鈕

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

按評級對擴充功能進行排序

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

相關內容