123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- // ==UserScript==
- // @name DexScreen-GetTran
- // @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 objcsv = {
- "tokenname": null,
- "res": null,
- "simres": null,
- "msimrs": null,
- }
- 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, date_idx) {
- for (let i = 1; i < res.length; i++) {
- let md = res[i][date_idx].slice(0, 2);
- let hms = res[i][date_idx].slice(2);
- res[i][date_idx] = md.join("-") + " " + hms.join(":");
- }
- return res;
- }
- function autoScroll(downstep, upstep, element, tbody, indexstart) {
- let interval;
- let timeout;
- let equaltimes = 0
- let dataindex, totaldataindex;
- //回调time相关
- let myDelay = 1000;
- let thisDelay = 1000;
- let start = Date.now();
- async function notimeoutup(upstep) {
- let tbodytrs = tbody.querySelectorAll('tr[class*="custom-"]');
- let firdataindex = parseInt(tbodytrs[0].getAttribute('data-index'));
- while (firdataindex >= indexstart) {
- tbodytrs = tbody.querySelectorAll('tr[class*="custom-"]');
- firdataindex = parseInt(tbodytrs[0].getAttribute('data-index'));
- console.log("firdataindex,dataindex", firdataindex, dataindex);
- let curpos = dataindex - 1 - firdataindex;
- for (let i = curpos; i >= 0; i--) {
- dataindex--;
- let arr_tds;
- try {
- arr_tds = Array.from(tbodytrs[i].getElementsByTagName("td")[0].children);
- } catch (err) {
- await sleep(100);
- arr_tds = Array.from(tbodytrs[i].getElementsByTagName("td")[0].children);
- }
- 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;
- isPM = arr_tds[0].innerText.includes("PM");
- let arr_dateinfo = arr_tds[0].innerText.trim().split(" ");
- //y,m,d concat,
- [hour, minute, second] = arr_dateinfo[2].trim().split(':');
- // arr_dateinfo[2] = arr_dateinfo[2].trim().split(" ");
- month = monthmatch[arr_dateinfo[0]];
- day = arr_dateinfo[1];
- if (hour == "12") {
- if (!isPM) {
- hour = "00";
- }
- } else if (isPM) {
- hour = (parseInt(hour) + 12).toString();
- }
- //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;
- await sleep(200);
- }
- console.log('reslen totalindex', res.length, totaldataindex);
- res = handletime(res, 0);
- res.forEach((val, index, arr) => { arr[index] = val.join() + "\n" });
- let urlpathname = window.location.pathname.slice(1).split('/');
- urlpathname[0] = urlpathname[0].slice(0, 3);
- // funcDownload(res.join(""), "Dex-" + objcsv.tokenname + "-" + urlpathname.join('-') + ".csv");
- funcDownload(res.join(""), "Dex_" + 'tran_' + urlpathname.join('_') + ".csv");
- }
- function down() {
- interval = setInterval(() => {
- let sTop = element.scrollTop;
- element.scrollTop += downstep;
- if (sTop == element.scrollTop) {
- equaltimes++;
- if (equaltimes == 5) {
- clearInterval(interval);
- let tbodytrs = tbody.querySelectorAll('tr[class*="custom-"]');
- dataindex = parseInt(tbodytrs[tbodytrs.length - 1].getAttribute('data-index'));
- totaldataindex = dataindex;
- console.log('totaldataindex', totaldataindex);
- notimeoutup(upstep);
- }
- }
- }, 1500)
- }
- 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 button_tran = document.createElement("button");//创建 获取toptran一个按钮
- mydivbox.appendChild(input);
- mydivbox.appendChild(button_tran);
- input.value = "350";
- input.className = "tam-myinput"
- input.type = "number"
- 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", clickBotton); //监听按钮点击事件
- mydivbox.style.position = "fixed";
- mydivbox.style.top = "60px";
- mydivbox.style.right = "60px";
- document.body.appendChild(mydivbox);
- var theadtr = document.getElementsByClassName("custom-19qkkht")[0].getElementsByTagName("thead")[0];
- theadtr.style.color = "blue";
- function clickBotton() {
- 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-test-id="virtuoso-scroller"]');
- let table_ = table_div_ep1.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 upstep = parseInt(input.value);
- console.log(upstep);
- //ori titlearr = ['DATE', 'TYPE', 'USD', 'Token', 'SOL', 'PRICE', 'MAKER', 'TXN'];
- //changeto titlearr = ['DATE', 'TYPE', 'USD', 'Token', 'MAKER', 'TXN'];
- autoScroll(7000, upstep, divscrollerdep2, tbody_, 80);
- }
- })();
|