您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Extract and display links from web sites pages based on specific patterns
- // ==UserScript==
- // @name Link Extractor
- // @namespace http://tampermonkey.net/
- // @version 0.6
- // @description Extract and display links from web sites pages based on specific patterns
- // @author SijosxStudio
- // @match *://*/*
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- console.log('Link Extractor started');
- // Define URL patterns to match specific links
- const patterns = [
- 'https://*/.*',
- ];
- // Function to check if a URL matches any of the defined patterns
- function matchesPattern(url) {
- return patterns.some(pattern => {
- const regex = new RegExp(pattern);
- const matches = regex.test(url);
- console.log(`Checking ${url} against pattern ${pattern}: ${matches}`);
- return matches;
- });
- }
- // Regex to find URL-like strings within page text
- const urlRegex = /https?:\/\/[^ "]+/g;
- // Create an overlay to display matching links
- const overlay = document.createElement('div');
- overlay.style = 'position: fixed; top: 10px; right: 10px; min-width: 300px; max-height: calc(100vh - 20px); background: rgba(255, 255, 255, 0.9); color: #333; padding: 15px; border: 1px solid #ccc; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); z-index: 9999; white-space: nowrap; overflow-y: auto; font-size: 14px; font-family: Arial, sans-serif;';
- document.body.appendChild(overlay); // Append overlay to body
- // Function to extract URLs from text and non-text elements
- function extractURLs() {
- const urls = [];
- // Extract URLs from text nodes
- const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);
- let node;
- while (node = walker.nextNode()) {
- const matches = node.textContent.match(urlRegex);
- if (matches) {
- urls.push(...matches);
- }
- }
- // Extract URLs from non-text elements (e.g., <a>, <iframe>, <p>)
- const elements = document.querySelectorAll('a[href], iframe[src]');
- elements.forEach(element => {
- const url = element.getAttribute('href') || element.getAttribute('src');
- if (url) {
- urls.push(url);
- }
- });
- return urls;
- }
- let isUpdating = false; // Flag to track if the update function is currently executing
- // Function to update the overlay with matching links
- function updateOverlay() {
- if (isUpdating) return; // Skip if the function is already executing
- isUpdating = true; // Set the flag to true to prevent recursive calls
- // Temporarily disconnect the observer to avoid triggering it during overlay update
- observer.disconnect();
- console.log('Updating overlay...');
- const potentialUrls = extractURLs(); // Extract URLs from text and non-text elements
- console.log('Potential URLs:', potentialUrls);
- const links = potentialUrls.filter(url => matchesPattern(url)); // Filter URLs by pattern
- console.log('Matching URLs:', links);
- // Clear previous content
- overlay.textContent = '';
- if (links.length > 0) {
- const ul = document.createElement('ul');
- links.forEach(link => {
- const li = document.createElement('li');
- const a = document.createElement('a');
- a.href = link;
- a.textContent = link;
- a.style.color = 'lightblue';
- li.appendChild(a);
- ul.appendChild(li);
- });
- overlay.appendChild(ul);
- } else {
- overlay.textContent = 'No matching links found.';
- }
- // Adjust width to fit content or screen width
- overlay.style.width = `${Math.min(overlay.offsetWidth, window.innerWidth)}px`;
- isUpdating = false; // Reset the flag after the update is complete
- // Reconnect the observer after updating the overlay
- observer.observe(document.body, { childList: true, subtree: true });
- }
- // Use a mutation observer to detect changes to the DOM
- const observer = new MutationObserver(() => {
- clearTimeout(updateTimeout); // Clear the previous timeout
- updateTimeout = setTimeout(updateOverlay, 500); // Set a new timeout
- });
- // Initial update
- updateOverlay();
- })();