tamper_test_dune.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // ==UserScript==
  2. // @name Dune-Get-Data
  3. // @namespace http://tampermonkey.net/
  4. // @version 2024-11-09
  5. // @description try to take over the world!
  6. // @author You
  7. // @match https://dune.com/queries/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=dune.com
  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. async function get_thead_data() {
  34. let table = document.querySelectorAll('table.table_table__FDV2P')[0];
  35. // Get the <thead> element
  36. let thead = table.querySelector('thead');
  37. let tr_of_thead = thead.querySelectorAll('tr')[0];
  38. let row_th = []
  39. let arr_td = tr_of_thead.querySelectorAll('th');
  40. for (let idx_th = 0; idx_th < arr_td.length; idx_th++) {
  41. let td = arr_td[idx_th];
  42. // console.log(td.innerText);
  43. row_th.push(td.innerText);
  44. }
  45. res_data_get_dune_data.push(row_th);
  46. }
  47. async function get_tbody_data() {
  48. // Get the table element
  49. let table = document.querySelector('table.table_table__FDV2P');
  50. // Get the <tbody> element
  51. let tbody = table.querySelector('tbody');
  52. // Get all <tr> elements in <tbody>
  53. let tbodyTrs = tbody.querySelectorAll('tr');
  54. // Traverse the <tr> elements in <tbody> and get the data
  55. for (let i = 0; i < tbodyTrs.length; i++) {
  56. let tr = tbodyTrs[i];
  57. let row_tr = []
  58. let arr_td = tr.querySelectorAll('td');
  59. for (let idx_td = 0; idx_td < arr_td.length; idx_td++) {
  60. let td = arr_td[idx_td];
  61. console.log(td.innerText);
  62. row_tr.push(td.innerText)
  63. }
  64. res_data_get_dune_data.push(row_tr);
  65. }
  66. }
  67. async function clickButton_get_data() {
  68. await get_thead_data();
  69. let ul_table_footer__Ky_k2 = document.querySelector('div.visual_vizFooter__vCe59').querySelector("ul.table_footer__Ky_k2");
  70. let arr_ul_children = ul_table_footer__Ky_k2.children;
  71. let page_count = arr_ul_children[4].querySelectorAll("option").length;
  72. // 获取 页数 并且不断next 页
  73. console.log("first= ", res_data_get_dune_data);
  74. for (let cur_page = 1; cur_page <= page_count; cur_page++) {
  75. await get_tbody_data();
  76. let button_next = arr_ul_children[5].querySelector("button");
  77. button_next.click();
  78. await sleep(3000);
  79. }
  80. res_data_get_dune_data.forEach((val, index, arr) => { arr[index] = val.join() + "\n" });
  81. let curTime = getCurrentTime();
  82. let urlpathname = window.location.pathname.slice(1).split('/').pop();
  83. urlpathname = urlpathname.replaceAll('-', "_");
  84. funcDownload(res.join(""), "sol_" + curTime + urlpathname + ".csv");
  85. funcDownload((res_data_get_dune_data), "dune_data.csv");
  86. }
  87. var res_data_get_dune_data = [];
  88. (async function () {
  89. console.log("enter load");
  90. await sleep(6000);
  91. console.log("create button");
  92. var mydivbox = document.createElement("div");
  93. var button_ = document.createElement("button");//创建 获取 holders 一个按钮
  94. button_.className = "tam-mybutton-getdata"
  95. button_.textContent = "getdata"; //按钮内容
  96. button_.style.width = "90px"; //按钮宽度
  97. button_.style.height = "30px"; //按钮高度
  98. button_.style.align = "center"; //文本居中
  99. button_.style.color = "blue"; //按钮文字颜色
  100. button_.style.background = "#045710"; //按钮底色
  101. button_.style.border = "1px solid #045710"; //边框属性
  102. mydivbox.appendChild(button_);
  103. mydivbox.style.position = "fixed";
  104. mydivbox.style.top = "180px";
  105. mydivbox.style.right = "40px";
  106. document.body.appendChild(mydivbox);
  107. button_.addEventListener("click", clickButton_get_data); //监听按钮点击事件
  108. })();