tamper_dexscreengetitran_solana.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. // ==UserScript==
  2. // @name DexScreen-GetTran
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description try to take over the world!
  6. // @author You
  7. // @match https://dexscreener.com/solana/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
  9. // @grant none
  10. // ==/UserScript==
  11. function funcDownload(content, filename) {
  12. console.log('begin download');
  13. // 创建隐藏的可下载链接
  14. var eleLink = document.createElement('a');
  15. eleLink.download = filename;
  16. eleLink.style.display = 'none';
  17. // 字符内容转变成blob地址
  18. var blob = new Blob([content]);
  19. eleLink.href = URL.createObjectURL(blob);
  20. // 触发点击
  21. document.body.appendChild(eleLink);
  22. eleLink.click();
  23. // 然后移除
  24. document.body.removeChild(eleLink);
  25. }
  26. function sleep(sleepdelay) {
  27. return new Promise((resolve, reject) => {
  28. setTimeout(() => {
  29. resolve(sleepdelay);
  30. }, sleepdelay);
  31. })
  32. }
  33. var number_chars_obj = {
  34. "k": 3,
  35. "m": 6,
  36. "b": 9,
  37. "t": 12,
  38. "p": 15
  39. };
  40. var monthmatch = {
  41. "January": "01",
  42. "February": "02",
  43. "March": "03",
  44. "Apr": "04",
  45. "May": "05",
  46. "June": "06",
  47. "July": "07",
  48. "August": "08",
  49. "September": "09",
  50. "October": "10",
  51. "November": "11",
  52. "December": "12",
  53. };
  54. var objcsv = {
  55. "tokenname": null,
  56. "res": null,
  57. "simres": null,
  58. "msimrs": null,
  59. }
  60. var number_chars_arr = ["k", "m", "b", "t", "p"];
  61. function get_thead_arr(_thead) {
  62. let titlearr = _thead.innerText.trim().split(/\r?\n/);
  63. titlearr = ['DATE', 'TYPE', 'USD', 'Token', 'SOL', 'PRICE', 'MAKER', 'TXN'];
  64. return titlearr;
  65. }
  66. function handletime(res, date_idx) {
  67. for (let i = 1; i < res.length; i++) {
  68. let md = res[i][date_idx].slice(0, 2);
  69. let hms = res[i][date_idx].slice(2);
  70. res[i][date_idx] = md.join("-") + " " + hms.join(":");
  71. }
  72. return res;
  73. }
  74. function autoScroll(downstep, upstep, element, tbody, indexstart) {
  75. let interval;
  76. let timeout;
  77. let equaltimes = 0
  78. let dataindex, totaldataindex;
  79. //回调time相关
  80. let myDelay = 1000;
  81. let thisDelay = 1000;
  82. let start = Date.now();
  83. async function notimeoutup(upstep) {
  84. let tbodytrs = tbody.querySelectorAll('tr[class*="custom-"]');
  85. let firdataindex = parseInt(tbodytrs[0].getAttribute('data-index'));
  86. while (firdataindex >= indexstart) {
  87. tbodytrs = tbody.querySelectorAll('tr[class*="custom-"]');
  88. firdataindex = parseInt(tbodytrs[0].getAttribute('data-index'));
  89. console.log("firdataindex,dataindex", firdataindex, dataindex);
  90. let curpos = dataindex - 1 - firdataindex;
  91. for (let i = curpos; i >= 0; i--) {
  92. dataindex--;
  93. let arr_tds;
  94. try {
  95. arr_tds = Array.from(tbodytrs[i].getElementsByTagName("td")[0].children);
  96. } catch (err) {
  97. await sleep(100);
  98. arr_tds = Array.from(tbodytrs[i].getElementsByTagName("td")[0].children);
  99. }
  100. let tdtexts = [];
  101. for (let i = 0; i < arr_tds.length; i++) {
  102. if (i == 0) {
  103. //date
  104. //title 01:36:59, Saturday, February 4, 2023
  105. //text Feb 4 10:54:35 PM
  106. //有bug 12AM 为凌晨0点 -12 12PM就是中午12
  107. let month, day, hour, minute, second, isPM;
  108. isPM = arr_tds[0].innerText.includes("PM");
  109. let arr_dateinfo = arr_tds[0].innerText.trim().split(" ");
  110. //y,m,d concat,
  111. [hour, minute, second] = arr_dateinfo[2].trim().split(':');
  112. // arr_dateinfo[2] = arr_dateinfo[2].trim().split(" ");
  113. month = monthmatch[arr_dateinfo[0]];
  114. day = arr_dateinfo[1];
  115. if (hour == "12") {
  116. if (!isPM) {
  117. hour = "00";
  118. }
  119. } else if (isPM) {
  120. hour = (parseInt(hour) + 12).toString();
  121. }
  122. //if want UTCtimestamp
  123. let utctime = [month, day, hour, minute, second];
  124. tdtexts.push(utctime);
  125. // simtdtexts.push(utctime);
  126. } else if (i >= 6) {
  127. tdtexts.push(arr_tds[i].querySelector("a").href.split('/').pop());
  128. } else if (i == 5) {
  129. if (arr_tds[5].querySelectorAll("span").length == 2) {
  130. tdtexts.push(arr_tds[5].querySelector("span").title.trim().replace(/[(\$),]/g, ""));
  131. // simtdtexts.push(tds[5].querySelector("span").title.trim().replace(/[(\$),]/g, ""));
  132. } else {
  133. tdtexts.push(arr_tds[i].innerText.trim().replace(/[(\$),]/g, ""));
  134. // simtdtexts.push(tds[i].innerText.trim().replace(/[(\$),]/g, ""));
  135. }
  136. } else if (i == 2) {
  137. let usdstr = arr_tds[i].innerText.trim().replace(/[(\$)<,]/g, "");
  138. if (usdstr == '-') usdstr = '0';
  139. tdtexts.push(usdstr);
  140. } else {
  141. //make $ , replace ''
  142. tdtexts.push(arr_tds[i].innerText.trim().replace(/[(\$)<,]/g, ""));
  143. }
  144. }
  145. res.push(tdtexts);
  146. }
  147. element.scrollTop -= upstep;
  148. await sleep(200);
  149. }
  150. console.log('reslen totalindex', res.length, totaldataindex);
  151. res = handletime(res, 0);
  152. res.forEach((val, index, arr) => { arr[index] = val.join() + "\n" });
  153. let urlpathname = window.location.pathname.slice(1).split('/');
  154. urlpathname[0] = urlpathname[0].slice(0, 3);
  155. // funcDownload(res.join(""), "Dex-" + objcsv.tokenname + "-" + urlpathname.join('-') + ".csv");
  156. funcDownload(res.join(""), "Dex_" + 'tran_' + urlpathname.join('_') + ".csv");
  157. }
  158. function down() {
  159. interval = setInterval(() => {
  160. let sTop = element.scrollTop;
  161. element.scrollTop += downstep;
  162. if (sTop == element.scrollTop) {
  163. equaltimes++;
  164. if (equaltimes == 5) {
  165. clearInterval(interval);
  166. let tbodytrs = tbody.querySelectorAll('tr[class*="custom-"]');
  167. dataindex = parseInt(tbodytrs[tbodytrs.length - 1].getAttribute('data-index'));
  168. totaldataindex = dataindex;
  169. console.log('totaldataindex', totaldataindex);
  170. notimeoutup(upstep);
  171. }
  172. }
  173. }, 1500)
  174. }
  175. down()
  176. }
  177. var res = [];
  178. // var simres = [];
  179. // window.addEventListener('load', () => {
  180. (async function () {
  181. console.log("enter load");
  182. await sleep(6000);
  183. console.log("create button");
  184. var mydivbox = document.createElement("div");
  185. var input = document.createElement("input")
  186. var button_tran = document.createElement("button");//创建 获取toptran一个按钮
  187. mydivbox.appendChild(input);
  188. mydivbox.appendChild(button_tran);
  189. input.value = "350";
  190. input.className = "tam-myinput"
  191. input.type = "number"
  192. button_tran.className = "tam-mybutton-gettran"
  193. button_tran.textContent = "gettran"; //按钮内容
  194. button_tran.style.width = "90px"; //按钮宽度
  195. //button.style.height = "28px"; //按钮高度
  196. button_tran.style.align = "center"; //文本居中
  197. button_tran.style.color = "blue"; //按钮文字颜色
  198. button_tran.style.background = "#e33e33"; //按钮底色
  199. button_tran.style.border = "1px solid #e33e33"; //边框属性
  200. button_tran.addEventListener("click", clickBotton); //监听按钮点击事件
  201. mydivbox.style.position = "fixed";
  202. mydivbox.style.top = "60px";
  203. mydivbox.style.right = "60px";
  204. document.body.appendChild(mydivbox);
  205. var theadtr = document.getElementsByClassName("custom-19qkkht")[0].getElementsByTagName("thead")[0];
  206. theadtr.style.color = "blue";
  207. function clickBotton() {
  208. let arr_urlpathname = window.location.pathname.slice(1).split('/');
  209. let table_div_ep1 = document.getElementsByClassName('custom-p3e2vj')[0];
  210. let divscrollerdep2 = table_div_ep1.querySelector('[data-test-id="virtuoso-scroller"]');
  211. let table_ = table_div_ep1.getElementsByTagName('table')[0];
  212. let thead_ = table_.getElementsByTagName('thead')[0];
  213. let titlearr = get_thead_arr(thead_);
  214. res.push(titlearr);
  215. let tbody_ = table_.getElementsByTagName('tbody')[0];
  216. let upstep = parseInt(input.value);
  217. console.log(upstep);
  218. //ori titlearr = ['DATE', 'TYPE', 'USD', 'Token', 'SOL', 'PRICE', 'MAKER', 'TXN'];
  219. //changeto titlearr = ['DATE', 'TYPE', 'USD', 'Token', 'MAKER', 'TXN'];
  220. autoScroll(7000, upstep, divscrollerdep2, tbody_, 80);
  221. }
  222. })();