// ==UserScript== // @name Export All Useful Links // @name:zh-CN 导出网页中的全部有效链接 // @namespace xcl // @version 1.2 // @description:zh-CN 点击右下角导出图标,自动爬取全部有效链接并导出为excel表格 // @author xcl // @match *://*/* // @run-at document-end // @grant none // @description Get all links from a website. right-click -> tampermonkey -> "Get All Links". // @downloadURL none // ==/UserScript== // 格式化网址作为文件名 function formatFilename(url) { if (url.indexOf("http://") != -1) { url = url.replace('http://', '') } else { url = url.replace('https://', '') } var symbol = ['<', '>', '/', '\\', '|', ':', '*', '?', '#'] symbol.forEach(ch => { var reg = new RegExp("/" + ch + "/g") url = url.replace(reg, '_') }); return url } // 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载 function sheet2blob(sheet, sheetName) { sheetName = sheetName || 'sheet1'; var workbook = { SheetNames: [sheetName], Sheets: {} }; workbook.Sheets[sheetName] = sheet; // 生成excel的配置项 var wopts = { bookType: 'xlsx', // 要生成的文件类型 bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性 type: 'binary' }; var wbout = XLSX.write(workbook, wopts); var blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" }); // 字符串转ArrayBuffer function s2ab(s) { var buf = new ArrayBuffer(s.length); var view = new Uint8Array(buf); for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; return buf; } return blob; } function downloadExcel(aoa, filename) { var sheet = XLSX.utils.aoa_to_sheet(aoa); console.log("正在导出表格") const blob = sheet2blob(sheet, "Sheet1") const url = URL.createObjectURL(blob) const link = document.createElement('a') link.href = url link.download = `${filename}.xlsx` document.body.appendChild(link) link.click() document.body.removeChild(link) } function make_list(results) { var data_list = []; let table = "
${result.url} | ${result.name} |