// ==UserScript==
// @name Dune-Get-Data
// @namespace http://tampermonkey.net/
// @version 2024-11-09
// @description try to take over the world!
// @author You
// @match https://dune.com/queries/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=dune.com
// @grant none
// ==/UserScript==
function funcDownload(content, filename) {
console.log('begin download');
// 创建隐藏的可下载链接
var eleLink = document.createElement('a');
eleLink.download = filename;
eleLink.style.display = 'none';
// 字符内容转变成blob地址
var blob = new Blob([content]);
eleLink.href = URL.createObjectURL(blob);
// 触发点击
document.body.appendChild(eleLink);
eleLink.click();
// 然后移除
document.body.removeChild(eleLink);
}
function sleep(sleepdelay) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(sleepdelay);
}, sleepdelay);
})
}
async function get_thead_data() {
let table = document.querySelectorAll('table.table_table__FDV2P')[0];
// Get the element
let thead = table.querySelector('thead');
let tr_of_thead = thead.querySelectorAll('tr')[0];
let row_th = []
let arr_td = tr_of_thead.querySelectorAll('th');
for (let idx_th = 0; idx_th < arr_td.length; idx_th++) {
let td = arr_td[idx_th];
// console.log(td.innerText);
row_th.push(td.innerText);
}
res_data_get_dune_data.push(row_th);
}
async function get_tbody_data() {
// Get the table element
let table = document.querySelector('table.table_table__FDV2P');
// Get the
element
let tbody = table.querySelector('tbody');
// Get all elements in
let tbodyTrs = tbody.querySelectorAll('tr');
// Traverse the elements in
and get the data
for (let i = 0; i < tbodyTrs.length; i++) {
let tr = tbodyTrs[i];
let row_tr = []
let arr_td = tr.querySelectorAll('td');
for (let idx_td = 0; idx_td < arr_td.length; idx_td++) {
let td = arr_td[idx_td];
console.log(td.innerText);
row_tr.push(td.innerText)
}
res_data_get_dune_data.push(row_tr);
}
}
async function clickButton_get_data() {
await get_thead_data();
let ul_table_footer__Ky_k2 = document.querySelector('div.visual_vizFooter__vCe59').querySelector("ul.table_footer__Ky_k2");
let arr_ul_children = ul_table_footer__Ky_k2.children;
let page_count = arr_ul_children[4].querySelectorAll("option").length;
// 获取 页数 并且不断next 页
console.log("first= ", res_data_get_dune_data);
for (let cur_page = 1; cur_page <= page_count; cur_page++) {
await get_tbody_data();
let button_next = arr_ul_children[5].querySelector("button");
button_next.click();
await sleep(3000);
}
res_data_get_dune_data.forEach((val, index, arr) => { arr[index] = val.join() + "\n" });
let curTime = getCurrentTime();
let urlpathname = window.location.pathname.slice(1).split('/').pop();
urlpathname = urlpathname.replaceAll('-', "_");
funcDownload(res.join(""), "sol_" + curTime + urlpathname + ".csv");
funcDownload((res_data_get_dune_data), "dune_data.csv");
}
var res_data_get_dune_data = [];
(async function () {
console.log("enter load");
await sleep(6000);
console.log("create button");
var mydivbox = document.createElement("div");
var button_ = document.createElement("button");//创建 获取 holders 一个按钮
button_.className = "tam-mybutton-getdata"
button_.textContent = "getdata"; //按钮内容
button_.style.width = "90px"; //按钮宽度
button_.style.height = "30px"; //按钮高度
button_.style.align = "center"; //文本居中
button_.style.color = "blue"; //按钮文字颜色
button_.style.background = "#045710"; //按钮底色
button_.style.border = "1px solid #045710"; //边框属性
mydivbox.appendChild(button_);
mydivbox.style.position = "fixed";
mydivbox.style.top = "180px";
mydivbox.style.right = "40px";
document.body.appendChild(mydivbox);
button_.addEventListener("click", clickButton_get_data); //监听按钮点击事件
})();