您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Downloading the queries csv export for free subscription users
当前为
// ==UserScript== // @name Dune Csv Export // @namespace http://tampermonkey.net/ // @version 0.2 // @description Downloading the queries csv export for free subscription users // @author lulu // @match https://dune.com/queries* // @icon https://www.google.com/s2/favicons?sz=64&domain=dune.com // @grant none // @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js // ==/UserScript== function getElementByXpath(path){ return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; } function getHeaders(table){ const headers = []; $.each($(table).find("thead").find("tr").find("th"), function (key, val2) { headers[key] = $(val2).find("div").text(); }); return headers; } function getValues(table){ const values = [] $.each($(table).find("tbody").find("tr"), function (key, val) { const row = []; $.each($(val).find("td"), function (tkey, tval) { row[tkey] = $(tval).find("div").first().text(); }); values[key] = row; }); return values; } function collectLoop(last_values=[]){ let nextButton = getElementByXpath('//*[@id="results"]/div/div[2]/div/div[2]/ul/li[6]/button'); let table = getElementByXpath('//*[@id="results"]/div/div[2]/div/div[1]/table'); const values = getValues(table); const newValues = last_values.concat(values); if (!$(nextButton).is(":disabled") && nextButton != null){ $(nextButton).trigger("click"); setTimeout(()=>{ return collectLoop(newValues); }, 20) } else { const headers = getHeaders(table); download_csv(headers, newValues); } } function download_csv(headers, rows) { let csvHeaders = headers.join(",") + "\n"; let csvRows = rows.map(row => row.join(",")).join("\n"); let csvButton = getElementByXpath('//*[@id="results"]/div/div[1]/div[1]/div/button'); let custom_name = document.getElementById("customName").value; var downloadBtn = document.createElement("a"); downloadBtn.href = "data:text/csv;charset=utf-8,"+encodeURI(csvHeaders+csvRows); downloadBtn.target = "_blank"; if (custom_name.length > 1) { downloadBtn.download = custom_name+".csv"; } else { let url = window.location.href; downloadBtn.download = "query_"+url.split("queries/")[1].replace("/", "_")+".csv" } downloadBtn.click(); csvButton.disabled = false; } function collectCsv() { let csvButton = getElementByXpath('//*[@id="results"]/div/div[1]/div[1]/div/button'); csvButton.disabled = "disabled"; let nextButton = getElementByXpath('//*[@id="results"]/div/div[2]/div/div[2]/ul/li[6]/button'); if (nextButton == null){ // console.log("Butt not exists"); collectLoop(); } else { // go to first let firstPageBtn = getElementByXpath('//*[@id="results"]/div/div[2]/div/div[2]/ul/li[3]/button'); if (firstPageBtn != null && !$(firstPageBtn).is(":disabled")){ $(firstPageBtn).trigger("click"); setTimeout(()=>{ collectLoop(); }, 5); } else { collectLoop(); } } } function changeCsvButton(){ // console.log("Running Dune Script"); let csvButton = getElementByXpath('//*[@id="results"]/div/div[1]/div[1]/div/button'); if (csvButton != null && $(csvButton).is(":disabled")){ csvButton.disabled = false; csvButton.onclick = collectCsv; // adding a input for custom csv file name var inp_element = document.createElement('input'); inp_element.className = "IconButton_iconButton___v3YQ buttonThemes_button__jfRFC buttonThemes_theme-tertiary__v7VoN IconButton_size-M__FIXfN"; inp_element.id = "customName"; inp_element.placeholder = "Custom filename"; getElementByXpath('//*[@id="results"]/div/div[1]/div[1]').appendChild(inp_element); } else { setTimeout(()=>{ changeCsvButton(); }, 1000) } } (function() { 'use strict'; $(document).ready ( function(){ changeCsvButton(); }); })();