您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Calculate and display vote difference between two candidates with formatted numbers, improved styling, and time
// ==UserScript== // @name Candidate Vote Difference with Formatting and Styling // @namespace http://tampermonkey.net/ // @version 0.3 // @description Calculate and display vote difference between two candidates with formatted numbers, improved styling, and time // @author You // @match https://prezenta.roaep.ro/prezidentiale24112024/pv/romania/results/ // @grant none // ==/UserScript== (function() { 'use strict'; // Function to extract candidate data function extractData() { // Candidates you're interested in const candidates = ["ION-MARCEL CIOLACU", "ELENA-VALERICA LASCONI"]; // Wait for the page to load properly and then execute the logic const rows = document.querySelectorAll("tr"); let candidateVotes = {}; rows.forEach(row => { const nameElement = row.querySelector("span"); if (nameElement) { const candidateName = nameElement.innerText.trim(); // If it's one of the candidates we're tracking if (candidates.includes(candidateName)) { const numbers = row.querySelectorAll("span"); if (numbers.length >= 2) { const votes = parseInt(numbers[1].innerText.trim().replace(/\D/g, '')); // Remove non-numeric characters candidateVotes[candidateName] = votes; } } } }); // Check if both candidates' votes were found if (candidateVotes["ION-MARCEL CIOLACU"] && candidateVotes["ELENA-VALERICA LASCONI"]) { const ciolacuVotes = candidateVotes["ION-MARCEL CIOLACU"]; const lasconiVotes = candidateVotes["ELENA-VALERICA LASCONI"]; const voteDifference = ciolacuVotes - lasconiVotes; // Display the result on the page displayResult(ciolacuVotes, lasconiVotes, voteDifference); } } // Function to format numbers with a dot as a thousands separator function formatNumber(number) { return number.toLocaleString('en-GB'); // 'en-GB' uses a dot as the thousands separator } // Function to get the current time in a readable format function getCurrentTime() { const now = new Date(); return now.toLocaleTimeString(); // Returns time in the format HH:MM:SS AM/PM } // Function to display the result on the page function displayResult(ciolacuVotes, lasconiVotes, voteDifference) { // Create a div element to show the result const resultDiv = document.createElement("div"); resultDiv.style.position = "fixed"; resultDiv.style.top = "10px"; resultDiv.style.right = "10px"; resultDiv.style.backgroundColor = "#333"; // Dark background for better readability resultDiv.style.color = "#fff"; // White text for contrast resultDiv.style.borderRadius = "15px"; // Rounded corners resultDiv.style.padding = "20px"; // Padding around the content resultDiv.style.boxShadow = "0 4px 8px rgba(0, 0, 0, 0.2)"; // Subtle shadow for depth resultDiv.style.fontFamily = "'Arial', sans-serif"; // Clean font style resultDiv.style.zIndex = "9999"; resultDiv.style.fontSize = "16px"; // Slightly larger text for better readability resultDiv.style.maxWidth = "300px"; // Limit the width for better layout resultDiv.innerHTML = ` <h3 style="font-size: 18px; font-weight: bold;">Vote Difference:</h3> <p style="color: rgb(201, 35, 43);">ION-MARCEL CIOLACU Votes: <strong>${formatNumber(ciolacuVotes)}</strong></p> <p style="color: rgb(45, 111, 163);">ELENA-VALERICA LASCONI Votes: <strong>${formatNumber(lasconiVotes)}</strong></p> <p>Vote Difference: <strong>${formatNumber(voteDifference)}</strong></p> <p style="font-size: 14px;">Last Updated: <strong>${getCurrentTime()}</strong></p> `; // Append the result div to the body document.body.appendChild(resultDiv); } // Wait for the page to load and then extract data window.addEventListener('load', () => { setTimeout(extractData, 3000); // Wait a few seconds for the page to fully load }); })();