123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- // ==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 <thead> 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 <tbody> element
- let tbody = table.querySelector('tbody');
- // Get all <tr> elements in <tbody>
- let tbodyTrs = tbody.querySelectorAll('tr');
- // Traverse the <tr> elements in <tbody> 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); //监听按钮点击事件
- })();
|