Arbeitsheft.online Aufgabenlöser

Fügt einen "Aufgabe lösen" Button hinzu, der die Lösung aus dem Quelltext extrahiert

  1. // ==UserScript==
  2. // @name Arbeitsheft.online Aufgabenlöser
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.0
  5. // @description Fügt einen "Aufgabe lösen" Button hinzu, der die Lösung aus dem Quelltext extrahiert
  6. // @author spezifischer
  7. // @match https://arbeitsheft.online/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. // Funktion zum Hinzufügen des Lösungs-Buttons
  15. function addSolveButton() {
  16. // Suche nach dem "Prüfen" Button
  17. const checkButton = document.querySelector('button[type="submit"]');
  18. if (checkButton) {
  19. // Erstelle neuen "Aufgabe lösen" Button
  20. const solveButton = document.createElement('button');
  21. solveButton.type = 'button';
  22. solveButton.className = checkButton.className; // Gleiche Klassen wie der Prüfen-Button
  23. solveButton.innerText = 'Aufgabe lösen';
  24. solveButton.style.marginLeft = '10px';
  25. // Event-Listener für den Klick auf den Button
  26. solveButton.addEventListener('click', findSolution);
  27. // Füge den Button neben dem Prüfen-Button ein
  28. checkButton.parentNode.insertBefore(solveButton, checkButton.nextSibling);
  29. }
  30. }
  31. // Funktion zum Finden der Lösung im Quelltext
  32. function findSolution() {
  33. // Versuche, verschiedene mögliche Lösungselemente im Quelltext zu finden
  34. let solution = null;
  35. // Methode 1: Suche nach data-solution Attribut
  36. const elementsWithSolution = document.querySelectorAll('[data-solution]');
  37. if (elementsWithSolution.length > 0) {
  38. solution = Array.from(elementsWithSolution).map(el => el.getAttribute('data-solution')).join(', ');
  39. }
  40. // Methode 2: Suche nach versteckten Input-Feldern mit Lösungen
  41. if (!solution) {
  42. const hiddenSolutions = document.querySelectorAll('input[type="hidden"][name*="solution"], input[type="hidden"][name*="answer"]');
  43. if (hiddenSolutions.length > 0) {
  44. solution = Array.from(hiddenSolutions).map(el => el.value).join(', ');
  45. }
  46. }
  47. // Methode 3: Suche nach JavaScript-Variablen im Seitenquelltext
  48. if (!solution) {
  49. const scriptTags = document.querySelectorAll('script');
  50. const solutionRegex = /(?:solution|answer|ergebnis|lösung)\s*[=:]\s*['"]?([^'";\s]+)['"]?/i;
  51. for (const script of scriptTags) {
  52. const match = script.textContent.match(solutionRegex);
  53. if (match && match[1]) {
  54. solution = match[1];
  55. break;
  56. }
  57. }
  58. }
  59. // Wenn eine Lösung gefunden wurde, fülle die Antwortfelder aus
  60. if (solution) {
  61. fillAnswers(solution);
  62. alert('Lösung gefunden: ' + solution);
  63. } else {
  64. alert('Keine Lösung im Quelltext gefunden. Versuchen Sie, die Aufgabe manuell zu lösen.');
  65. }
  66. }
  67. // Funktion zum Ausfüllen der Antwortfelder
  68. function fillAnswers(solution) {
  69. // Suche nach Eingabefeldern
  70. const inputFields = document.querySelectorAll('input[type="text"], input[type="number"]');
  71. // Wenn es nur ein Eingabefeld gibt, fülle die Lösung dort ein
  72. if (inputFields.length === 1) {
  73. inputFields[0].value = solution;
  74. return;
  75. }
  76. // Bei mehreren Feldern: Versuche, die Lösung aufzuteilen (falls es mehrere Werte gibt)
  77. const solutionParts = solution.split(/[,;]/);
  78. // Fülle so viele Felder wie möglich aus
  79. for (let i = 0; i < Math.min(inputFields.length, solutionParts.length); i++) {
  80. inputFields[i].value = solutionParts[i].trim();
  81. }
  82. }
  83. // Führe die Hauptfunktion aus, nachdem die Seite geladen ist
  84. window.addEventListener('load', function() {
  85. setTimeout(addSolveButton, 1000); // Warte 1 Sekunde, um sicherzustellen, dass alle Elemente geladen sind
  86. });
  87. // Beobachte DOM-Änderungen für dynamisch geladene Inhalte
  88. const observer = new MutationObserver(function(mutations) {
  89. for (const mutation of mutations) {
  90. if (mutation.addedNodes.length > 0) {
  91. // Wenn neue Elemente hinzugefügt wurden, prüfe ob der Button hinzugefügt werden muss
  92. setTimeout(addSolveButton, 500);
  93. }
  94. }
  95. });
  96. // Starte die Beobachtung des Dokuments
  97. observer.observe(document.body, { childList: true, subtree: true });
  98. })();

QingJ © 2025

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