如何获取网页中运行时动态设置而非源码定义的链接href
嘿,我来帮你解决这个动态获取下载链接href的问题!这里有几种不同的方法,从最简单的快速获取到更深入的根源解密,你可以按需选择:
解决方法:获取动态生成的下载链接href
1. 浏览器开发者工具直接提取(最快捷)
这是不需要写代码的最省事方式:
- 打开目标网页,等页面完全加载(确保下载链接的href已经被jQuery动态设置好)
- 右键点击下载按钮/链接,选择「检查」(Inspect),在弹出的Elements面板里找到
id="downloadLink"的<a>标签,直接查看它的href属性,复制即可。 - 或者直接打开浏览器控制台(按F12或Ctrl+Shift+I),输入以下命令回车,控制台会直接输出最终的href:
要是页面加载了jQuery,也可以用:// 原生JS方式 document.getElementById('downloadLink').href// jQuery方式 $('#downloadLink').attr('href')
2. 用用户脚本自动获取(适合频繁使用)
如果你需要经常从这个页面拿下载链接,可以写个Tampermonkey/Greasemonkey脚本,自动帮你提取甚至复制到剪贴板:
// ==UserScript== // @name 自动获取动态下载链接 // @match 替换成目标网页的完整URL // @grant none // ==/UserScript== (function() { 'use strict'; // 给页面一点加载时间,确保链接已经生成 setTimeout(() => { const linkElement = document.getElementById('downloadLink'); if (linkElement && linkElement.href) { const downloadUrl = linkElement.href; console.log('获取到的下载链接:', downloadUrl); // 自动复制到剪贴板 navigator.clipboard.writeText(downloadUrl).then(() => { alert('下载链接已复制到剪贴板啦!'); }).catch(err => { console.error('复制失败:', err); }); } }, 2000); // 可以根据页面加载速度调整延迟时间,比如改成3000 })();
3. 模拟AES解密生成链接(从根源实现)
如果想搞清楚链接是怎么生成的,自己解密出完整href,需要找到页面的加密逻辑:
- 打开浏览器控制台的Sources面板,搜索
AES、encrypt、decrypt这类关键词,定位到处理链接的加密代码。 - 一般来说,页面会从后端拿到加密后的参数(就是你看到的
eyJjdCI6IkFpc003OERmME1uS3dhR1BQcXg1ckE9PSIs...这段),前端用AES解密后拼接成完整的下载URL。 - 你需要找到加密用的密钥(key)、**偏移量(iv)**和加密模式(比如CBC),然后用相同的算法解密参数,再拼接成链接。
举个用CryptoJS库解密的示例(假设你找到了对应的密钥和iv):
// 替换成你从页面代码里找到的密钥和偏移量 const secretKey = CryptoJS.enc.Utf8.parse('页面使用的AES密钥'); const ivParam = CryptoJS.enc.Utf8.parse('页面使用的偏移量'); // 从页面获取的加密参数 const encryptedStr = 'eyJjdCI6IkFpc003OERmME1uS3dhR1BQcXg1ckE9PSIsIml2IjoiNzg0OGI5NWRmMmRjZDg0ZjFlMjVjYTM3MjY1MjdjMTUiLCJzIjoiYjU1NTIyN2Q2MmJiODAyMSJ9'; // 执行解密 const decryptedData = CryptoJS.AES.decrypt(encryptedStr, secretKey, { iv: ivParam, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); const decryptedText = decryptedData.toString(CryptoJS.enc.Utf8); // 拼接成完整下载链接 const finalHref = `http://www.example.com/download/s/${decryptedText}`; console.log('解密生成的链接:', finalHref);
注意:每个网站的加密实现可能差异很大,你得准确找到对应网站的加密参数和算法才能成功哦。
内容的提问来源于stack exchange,提问作者Ehsan
相关产品推荐
相关产品推荐

