您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
AtCoderのサンプルをダウンロードするボタンを追加
当前为
// ==UserScript== // @name AtCoder Sample Downloader // @namespace http://tampermonkey.net/ // @version 0.1 // @description AtCoderのサンプルをダウンロードするボタンを追加 // @author y-i // @match https://atcoder.jp/contests/*/tasks/* // @grant none // @require https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.0/FileSaver.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.6.0/jszip.min.js // ==/UserScript== (function() { 'use strict'; const problemName = location.href.split('/').pop(); const titleElem = document.querySelector('.row > div > .h2'); if (!titleElem) return; const dlBtn = document.createElement('a'); dlBtn.classList.add('btn', 'btn-default', 'btn-sm'); dlBtn.textContent = 'Sample DL'; titleElem.appendChild(dlBtn); dlBtn.addEventListener('click', async e => { e.preventDefault(); const samples = Array.from(document.querySelectorAll('[id^="pre-sample"]')).map(el => el.innerText); const n = samples.length / 2; const zip = new JSZip(); for (let i = 0; i < n; ++i) { const sampleNum = (i - i % 2) / 2; const inOut = i % 2 ? 'out' : 'in'; const filename = `sample-${sampleNum}.${inOut}`; zip.file(filename, samples[i]); } const content = await zip.generateAsync({type:"blob"}); saveAs(content,`${problemName}.zip`); }); })();