Google Chrome ウェブストアは私にとっては大惨事のように思えます。理解できません。
拡張機能を人気順、評価順、ダウンロード数順、最新順、最近更新された順で並べ替えるにはどうすればよいでしょうか?
私は何かを完全に見落としているのでしょうか?
答え1
Chrome Devツールコンソールで動作するシンプルなソートJSを作成しました。GitHubページにアクセスしてください。ここ。
主に Chrome ウェブストアの拡張機能を分類します。Ctrl+Shift+I で起動する Chrome Dev Tools コンソールで実行されます。
リンク先の検索拡張機能ページを開いた後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) :
- Google が述べているように、最近更新されましたが、その背後に何か他のものがあるかどうかはわかりません。(私が見る限り) それは実際には「最近更新された人気の拡張機能」だと思います。
- 人気度(3) :
- 一番近いのはエディターズ・ピックセクションに表示されます。これらは通常、優れた人気のあるアプリ/拡張機能であり、選ばれているという事実によっても評価が高まります。
- 最新:
- 残念ながら、それは不可能のようです。Web ストアからの更新フィードがあれば、そこからこの情報を取得できるかもしれません。
- ダウンロード:
- 実際にはオプションではありませんが、他のパラメータ(評価、特集、編集者のおすすめなど)によって(多かれ少なかれ)わかると思います。
答え3
Google を使用して、少し回りくどい方法で拡張機能を「最近更新された」順に並べ替える方法を見つけました。
たとえば、最近の jQuery アドオンを探していました:
- 行くグーグル、 検索する...
'サイト:chrome.google.com "jquery"'(または'タイトル:"jQuery"') - クリック 'ツール > いつでも' を ' に変更しますこの1週間'または任意の期間
結果には最近追加されたアドオンと更新されたアドオンの両方が含まれます
答え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();