123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- // ==UserScript==
- // @name DexScreen-GetTran-HasStartDate
- // @namespace http://tampermonkey.net/
- // @version 0.1
- // @description try to take over the world!
- // @author You
- // @match https://dexscreener.com/solana/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
- // @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);
- })
- }
- var number_chars_obj = {
- "k": 3,
- "m": 6,
- "b": 9,
- "t": 12,
- "p": 15
- };
- var monthmatch = {
- "January": "01",
- "February": "02",
- "March": "03",
- "Apr": "04",
- "May": "05",
- "June": "06",
- "July": "07",
- "August": "08",
- "September": "09",
- "October": "10",
- "November": "11",
- "December": "12",
- };
- var number_chars_arr = ["k", "m", "b", "t", "p"];
- function get_thead_arr(_thead) {
- let titlearr = _thead.innerText.trim().split(/\r?\n/);
- titlearr = ['DATE', 'TYPE', 'USD', 'Token', 'SOL', 'PRICE', 'MAKER', 'TXN'];
- return titlearr;
- }
- function handletime(res) {
- for (let i = 1; i < res.length; i++) {
- let md = res[i][0].slice(0, 2);
- let hms = res[i][0].slice(2);
- res[i][0] = md.join("-") + " " + hms.join(":");
- }
- return res
- }
- function autoScroll(downstep, upstep, element, tbody, indexstart, startdate_timestamp) {
- let interval;
- let timeout;
- let equaltimes = 0
- let dataindex, totaldataindex;
- async function notimeoutup(upstep) {
- console.log("enter notimeoutup")
- let tbodytrs = tbody.querySelectorAll('tr[class*="custom-"]');
- let firdataindex = parseInt(tbodytrs[0].getAttribute('data-index'));
- let print_idx = 0;
- while (firdataindex >= indexstart) {
- print_idx++;
- tbodytrs = tbody.querySelectorAll('tr[class*="custom-"]');
- firdataindex = parseInt(tbodytrs[0].getAttribute('data-index'));
- if (print_idx % 30 == 0) {
- console.log("firdataindex,dataindex", firdataindex, dataindex);
- }
- let curpos = dataindex - 1 - firdataindex;
- for (let i = curpos; i >= 0; i--) {
- dataindex--;
- let arr_tds;
- while (true) {
- try {
- arr_tds = Array.from(tbodytrs[i].getElementsByTagName("td")[0].children);
- break;
- } catch (err) {
- await sleep(150);
- }
- }
- let tdtexts = [];
- for (let i = 0; i < arr_tds.length; i++) {
- if (i == 0) {
- //date
- //title 01:36:59, Saturday, February 4, 2023
- //text Feb 4 10:54:35 PM
- //有bug 12AM 为凌晨0点 -12 12PM就是中午12
- let month, day, hour, minute, second, isPM;
- let cur_date = new Date(arr_tds[0].innerText.trim());
- month = cur_date.getMonth() + 1;// Returns the month (0-11)
- day = cur_date.getDate();//Returns the day of the month (1-31)
- hour = cur_date.getHours(); // Returns the hour (0-23)
- minute = cur_date.getMinutes(); // Returns the minute (0-59)
- second = cur_date.getSeconds(); // Returns the second (0-59)
- //if want UTCtimestamp
- let utctime = [month, day, hour, minute, second];
- tdtexts.push(utctime);
- // simtdtexts.push(utctime);
- } else if (i >= 6) {
- tdtexts.push(arr_tds[i].querySelector("a").href.split('/').pop());
- } else if (i == 5) {
- if (arr_tds[5].querySelectorAll("span").length == 2) {
- tdtexts.push(arr_tds[5].querySelector("span").title.trim().replace(/[(\$),]/g, ""));
- // simtdtexts.push(tds[5].querySelector("span").title.trim().replace(/[(\$),]/g, ""));
- } else {
- tdtexts.push(arr_tds[i].innerText.trim().replace(/[(\$),]/g, ""));
- // simtdtexts.push(tds[i].innerText.trim().replace(/[(\$),]/g, ""));
- }
- } else if (i == 2) {
- let usdstr = arr_tds[i].innerText.trim().replace(/[(\$)<,]/g, "");
- if (usdstr == '-') usdstr = '0';
- tdtexts.push(usdstr);
- } else {
- //make $ , replace ''
- tdtexts.push(arr_tds[i].innerText.trim().replace(/[(\$)<,]/g, ""));
- }
- }
- res.push(tdtexts);
- }
- // element.scrollTop -= upstep;
- tbodytrs[0].scrollIntoView({ behavior: "smooth", block: "end" });
- await sleep(200);
- }
- console.log('reslen totalindex', res.length, totaldataindex);
- res = handletime(res);
- res.forEach((val, index, arr) => { arr[index] = val.join() + "\n" });
- let urlpathname = window.location.pathname.slice(1).split('/');
- urlpathname = urlpathname.pop()
- funcDownload(res.join(""), urlpathname + "_raydium" + ".csv");
- }
- function down() {
- interval = setInterval(async () => {
- let sTop = element.scrollTop;
- element.scrollTop += downstep;
- let tbodytrs;
- if (sTop == element.scrollTop) {
- equaltimes++;
- console.log("equaltimes=", equaltimes)
- await sleep(300);
- if (startdate_timestamp != 0) {
- return;
- }
- if (equaltimes >= 20) {
- clearInterval(interval);
- tbodytrs = tbody.querySelectorAll('tr[class*="custom-"]');
- dataindex = parseInt(tbodytrs[tbodytrs.length - 1].getAttribute('data-index'));
- totaldataindex = dataindex;
- console.log('totaldataindex', totaldataindex);
- try {
- arr_tds = Array.from(tbodytrs[0].getElementsByTagName("td")[0].children);
- } catch (err) {
- await sleep(100);
- arr_tds = Array.from(tbodytrs[0].getElementsByTagName("td")[0].children);
- }
- let cur_date = new Date(arr_tds[0].innerText.trim());
- console.log("cur_date=", cur_date);
- notimeoutup(upstep);
- }
- } else {
- equaltimes = 0;
- tbodytrs = tbody.querySelectorAll('tr[class*="custom-"]');
- let arr_tds;
- try {
- arr_tds = Array.from(tbodytrs[0].getElementsByTagName("td")[0].children);
- } catch (err) {
- await sleep(100);
- arr_tds = Array.from(tbodytrs[0].getElementsByTagName("td")[0].children);
- }
- let cur_date = new Date(arr_tds[0].innerText.trim());
- if (cur_date.valueOf() >= startdate_timestamp) {
- return;
- }
- console.log("startate=", cur_date);
- clearInterval(interval);
- await sleep(2000);
- tbodytrs = tbody.querySelectorAll('tr[class*="custom-"]');
- dataindex = parseInt(tbodytrs[tbodytrs.length - 1].getAttribute('data-index'));
- totaldataindex = dataindex;
- console.log('totaldataindex', totaldataindex);
- notimeoutup(upstep);
- }
- }, 1300)
- }
- down()
- }
- var res = [];
- // var simres = [];
- // window.addEventListener('load', () => {
- (async function () {
- console.log("enter load");
- await sleep(6000);
- console.log("create button");
- var mydivbox = document.createElement("div");
- var input = document.createElement("input")
- var input_startdate = document.createElement("input")
- var button_tran = document.createElement("button");//创建 获取toptran一个按钮
- mydivbox.appendChild(input);
- mydivbox.appendChild(input_startdate);
- mydivbox.appendChild(button_tran);
- input.value = "300";
- input.className = "tam-myinput";
- input.type = "number";
- input.style.width = "80px";
- input_startdate.value = "0101-0000";
- input_startdate.className = "tam-myinput-startdate";
- input_startdate.type = "text";
- input_startdate.style.width = "80px";
- button_tran.className = "tam-mybutton-gettran"
- button_tran.textContent = "gettran"; //按钮内容
- button_tran.style.width = "90px"; //按钮宽度
- //button.style.height = "28px"; //按钮高度
- button_tran.style.align = "center"; //文本居中
- button_tran.style.color = "blue"; //按钮文字颜色
- button_tran.style.background = "#e33e33"; //按钮底色
- button_tran.style.border = "1px solid #e33e33"; //边框属性
- button_tran.addEventListener("click", clickButton); //监听按钮点击事件
- mydivbox.style.position = "fixed";
- mydivbox.style.top = "60px";
- mydivbox.style.right = "40px";
- document.body.appendChild(mydivbox);
- // var theadtr = document.getElementsByClassName("custom-19qkkht")[0].getElementsByTagName("thead")[0];
- var theadtr = document.getElementsByTagName("table")[0].getElementsByTagName("thead")[0];
- theadtr.style.color = "blue";
- function clickButton() {
- res = [];
- console.log("enter clickButton res=", res);
- let arr_urlpathname = window.location.pathname.slice(1).split('/');
- // let table_div_ep1 = document.getElementsByClassName('custom-p3e2vj')[0];
- // let divscrollerdep2 = table_div_ep1.querySelector('[data-testid="virtuoso-scroller"]');
- let divscrollerdep2 = document.querySelector('[data-testid="virtuoso-scroller"]');
- var table_ = document.getElementsByTagName("table")[0];
- let thead_ = table_.getElementsByTagName('thead')[0];
- let titlearr = get_thead_arr(thead_);
- res.push(titlearr);
- let tbody_ = table_.getElementsByTagName('tbody')[0];
- // let tbody_ = document.getElementsByClassName('custom-p3e2vj')[0].getElementsByTagName('table')[0].getElementsByTagName('tbody')[0];
- let upstep = parseInt(input.value);
- let startdate_timestamp = 0;
- if (input_startdate.value.trim() == "0101-0000") {
- ;
- } else {
- let cur_month = input_startdate.value.trim().slice(0, 2);
- let cur_day = input_startdate.value.trim().slice(2, 4);
- let cur_hour = input_startdate.value.trim().slice(5, 7);
- let cur_minute = input_startdate.value.trim().slice(7, 9);
- console.log("date", cur_month + "-" + cur_day + " " + cur_hour + ":" + cur_minute + ":" + "00");
- startdate_timestamp = new Date(cur_month + "-" + cur_day + " " + cur_hour + ":" + cur_minute + ":" + "00").valueOf();
- }
- console.log(upstep, startdate_timestamp);
- autoScroll(7000, upstep, divscrollerdep2, tbody_, 30, startdate_timestamp);
- }
- })();
|