FaceCheck URL Extractor mobile with Ratings

Extracts image URLs and ratings from FaceCheck for mobile phones

  1. // ==UserScript==
  2. // @name FaceCheck URL Extractor mobile with Ratings
  3. // @namespace http://tampermonkey.net/
  4. // @version 2.0.0
  5. // @description Extracts image URLs and ratings from FaceCheck for mobile phones
  6. // @author vin31_ modified by Nthompson096 with perplexity.ai
  7. // @match https://facecheck.id/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. (() => {
  12. 'use strict';
  13. const extractUrls = max => [...Array(max)].map((_, i) => {
  14. const fimg = document.querySelector(`#fimg${i}`);
  15. if (!fimg) return null;
  16. const bg = window.getComputedStyle(fimg).backgroundImage;
  17. const url = atob(bg.match(/base64,(.*)"/)?.[1] || '').match(/https?:\/\/[^\s"]+/)?.[0];
  18. if (!url) return null;
  19. const distSpan = fimg.parentElement.querySelector('.dist');
  20. const confidence = distSpan ? parseInt(distSpan.textContent) : 0;
  21. let rating;
  22. if (confidence >= 90) rating = 'Certain Match';
  23. else if (confidence >= 83) rating = 'Confident Match';
  24. else if (confidence >= 70) rating = 'Uncertain Match';
  25. else if (confidence >= 50) rating = 'Weak Match';
  26. else rating = 'No Match';
  27. return {url, domain: new URL(url).hostname.replace('www.', ''), confidence, rating};
  28. }).filter(Boolean);
  29.  
  30. const init = async () => {
  31. if (document.querySelector('#fimg0')) {
  32. const div = Object.assign(document.createElement('div'), {
  33. style: 'position:fixed;left:5%;top:70px;width:90%;max-height:80%;background:rgba(0,0,0,0.8);color:#00FFFF;z-index:9999;padding:10px;border-radius:8px;overflow-y:auto;font-size:14px',
  34. innerHTML: `
  35. <h2 style="color:#FFF;margin:0 0 10px;cursor:pointer" id="resultsToggle">▼ Results:</h2>
  36. <div id="resultsList" style="display:block"></div>
  37. `
  38. });
  39. document.body.appendChild(div);
  40.  
  41. const urls = extractUrls(Math.min(Math.max(parseInt(prompt('How many URLs to extract? (1-50)', '10')) || 10, 1), 50));
  42. const resultsList = div.querySelector('#resultsList');
  43. resultsList.innerHTML = urls.length ? urls.map((item, i) => {
  44. const ratingColor = item.rating === 'Certain Match' ? 'green' :
  45. item.rating === 'Confident Match' ? 'yellow' :
  46. item.rating === 'Uncertain Match' ? 'orange' :
  47. item.rating === 'Weak Match' ? 'red' : 'white';
  48. return `<a href="${item.url}" target="_blank" style="color:#00FFFF;text-decoration:none;display:block;margin-bottom:10px">
  49. ${i+1}. ${item.domain} <span style="color:${ratingColor};">(${item.confidence}% - ${item.rating})</span>
  50. </a>`;
  51. }).join('') : '<p>No URLs found</p>';
  52.  
  53. div.querySelector('#resultsToggle').addEventListener('click', () => {
  54. resultsList.style.display = resultsList.style.display === 'none' ? 'block' : 'none';
  55. div.querySelector('#resultsToggle').textContent = (resultsList.style.display === 'none' ? '▶' : '▼') + ' Results:';
  56. });
  57. }
  58. };
  59.  
  60. const checkInterval = setInterval(() => {
  61. if (/https:\/\/facecheck\.id\/?(([a-z]{2})?\#.+)/.test(location.href) && document.querySelector('#fimg0')) {
  62. init();
  63. clearInterval(checkInterval);
  64. }
  65. }, 1000);
  66. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址