检测链接的前端代码
2026/9/24 17:46:38 网站建设 项目流程

##任务1:在WEB前端中,提取所有图片URL和图片绑定的响应跳转链接。##任务2:在WEB前端中,提取所有外站链接的地址。##任务3:在WEB前端中,提取所有带文字描述的内部链接及其对应的文字标题。##任务4:在WEB前端中,除上述3个任务中的元素以外,提取出内部链接和对应的元素类型如button、icon等。

void(function() { const currentHost = window.location.hostname; // 获取当前域名,用于判断内外站 const extractedLinks = new Set(); // 记录已提取的链接,用于任务4的去重 const results = { task1_images: [], // 图片及跳转链接 task2_externalLinks: [], // 外站链接 task3_internalTextLinks: [],// 内部文字链接 task4_otherInternalLinks: []// 其他内部链接(按钮/图标等) }; // 辅助函数:判断是否为外站 const isExternal = (url) => { try { return new URL(url, window.location.origin).hostname !== currentHost; } catch { return false; } }; // 辅助函数:判断元素是否包含图标(通过类名或属性) const isIconElement = (el) => { const classStr = el.className?.toString().toLowerCase() || ''; const roleStr = el.getAttribute('role')?.toLowerCase() || ''; return classStr.includes('icon') || roleStr.includes('icon') || roleStr.includes('button'); }; // ================= 任务 1:提取所有图片URL和绑定的跳转链接 ================= document.querySelectorAll('img').forEach(img => { const imgUrl = img.src || img.dataset.src || img.dataset.original; if (!imgUrl || imgUrl.startsWith('data:')) return; const linkTag = img.closest('a'); const redirectUrl = linkTag ? linkTag.href : null; results.task1_images.push({ imageUrl: imgUrl, redirectUrl: redirectUrl || '无跳转链接', tagName: linkTag ? linkTag.tagName.toUpperCase() : 'IMG' // 增加标签名称 }); if (redirectUrl) extractedLinks.add(redirectUrl); // 记录已处理的链接 }); // ================= 遍历所有 <a> 标签处理任务 2 & 3 & 4 ================= document.querySelectorAll('a[href]').forEach(link => { const href = link.href; const text = link.innerText?.trim(); const hasText = text && text.length > 0; const tagName = link.tagName.toUpperCase(); // 获取标签名 // 任务 2:提取外站链接 if (isExternal(href)) { results.task2_externalLinks.push({ url: href, text: hasText ? text : '无文字描述', tagName: tagName }); } // 内部链接处理 else { extractedLinks.add(href); // 只要是内部链接,都记录到已提取集合中 // 任务 3:带文字描述的内部链接 if (hasText) { results.task3_internalTextLinks.push({ url: href, title: text, tagName: tagName }); } // 任务 4:除上述任务外,提取其他内部链接及元素类型 else { // 判断该链接是否已经被任务1(图片)处理过,避免重复 const hasImg = link.querySelector('img') !== null; if (!hasImg) { let elementType = 'Link'; // 默认类型 if (link.getAttribute('role') === 'button') { elementType = 'Button'; } else if (isIconElement(link)) { elementType = 'Icon'; } results.task4_otherInternalLinks.push({ url: href, elementType: elementType, tagName: tagName }); } } } }); // ================= 任务 4 补充:提取非 <a> 标签的内部按钮/图标 ================= document.querySelectorAll('button, [role="button"], [class*="icon"], [role="icon"]').forEach(el => { // 排除已经是 <a> 标签且被处理过的元素 if (el.tagName.toLowerCase() === 'a' && extractedLinks.has(el.href)) return; let elementType = 'Unknown'; if (el.tagName.toLowerCase() === 'button') elementType = 'Button'; else if (isIconElement(el)) elementType = 'Icon'; // 尝试获取按钮/图标的文字或 aria-label const text = el.innerText?.trim() || el.getAttribute('aria-label') || '无文字描述'; results.task4_otherInternalLinks.push({ url: el.onclick?.toString() || '无跳转链接', elementType: elementType, description: text, tagName: el.tagName.toUpperCase() // 增加标签名称 }); }); // ================= 格式化输出结果 ================= const resultDiv = document.createElement('div'); resultDiv.id = 'web-asset-extractor-result'; const oldDiv = document.getElementById('web-asset-extractor-result'); if (oldDiv) oldDiv.remove(); let html = `<b>🚀 网页资产提取完成 (含标签名)</b><hr>`; html += `<b>🖼️ 任务1 - 图片及跳转 (${results.task1_images.length})</b><br>`; results.task1_images.slice(0, 3).forEach(i => html += `• [${i.tagName}] ${i.imageUrl} ➔ ${i.redirectUrl}<br>`); if (results.task1_images.length > 3) html += `... 等共 ${results.task1_images.length} 项<br>`; html += `<br><b>🌐 任务2 - 外站链接 (${results.task2_externalLinks.length})</b><br>`; results.task2_externalLinks.slice(0, 3).forEach(i => html += `• [${i.tagName}] ${i.url} (${i.text})<br>`); if (results.task2_externalLinks.length > 3) html += `... 等共 ${results.task2_externalLinks.length} 项<br>`; html += `<br><b>📝 任务3 - 内部文字链接 (${results.task3_internalTextLinks.length})</b><br>`; results.task3_internalTextLinks.slice(0, 3).forEach(i => html += `• [${i.tagName}] ${i.title} ➔ ${i.url}<br>`); if (results.task3_internalTextLinks.length > 3) html += `... 等共 ${results.task3_internalTextLinks.length} 项<br>`; html += `<br><b>🔘 任务4 - 其他内部元素 (${results.task4_otherInternalLinks.length})</b><br>`; results.task4_otherInternalLinks.slice(0, 3).forEach(i => html += `• [${i.tagName} / ${i.elementType}] ${i.description || i.url}<br>`); if (results.task4_otherInternalLinks.length > 3) html += `... 等共 ${results.task4_otherInternalLinks.length} 项<br>`; resultDiv.style.cssText = 'position:fixed;top:10px;left:10px;z-index:999999;background:#fff;border:1px solid #ccc;padding:15px;max-height:500px;overflow:auto;font-size:12px;box-shadow:0 4px 15px rgba(0,0,0,0.15);color:#333;max-width:600px;word-break:break-all;line-height:1.6;'; resultDiv.innerHTML = html; document.body.appendChild(resultDiv); // 在控制台输出完整的 JSON 数据,方便复制使用 console.log('📊 完整提取数据 (JSON):', results); })();

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询