zurück zur Übersicht Mehr Artikel

Erkennt eine Website Inspect Element und offene DevTools?

Fraglich
Öffne die DevTools (F12) und sieh zu, wie diese Seite es merkt

Alles läuft in deinem Browser, nichts wird gesendet. Öffne die DevTools, ändere den Preis, drück den Button.

Letzte Events, die die Seite protokolliert hat

  • noch nichts

Was diese Seite mitbekommen kann

  • Angedocktes Panel (Fenstergrößen-Differenz) wartet
    dock die DevTools an der Seite oder unten an
  • Konsolenkosten (Zeitmessung) wartet
    öffne die DevTools (F12), beliebiges Panel, beliebige Position
  • debugger-Zeitmessung wartet
    öffne die DevTools und drück dann den Button unten
  • Änderungen an der Seite wartet
    untersuche den Preis unten und ändere seinen Text
  • Kürzel und Rechtsklick wartet
    drück F12 oder klick mit der rechten Maustaste auf diese Seite
Preis: $49.00

Rechtsklick auf den Preis, Untersuchen wählen und den Text ändern. Der Button führt ein debugger-Statement aus: Bei offenen DevTools friert die Seite ein, bis du die Skriptausführung fortsetzt (F8).

Was kein Event meldet

  • Welches Element du mit Untersuchen ausgewählt hast unsichtbar
  • Welches Panel du gerade liest (Netzwerk, Quellen, …) unsichtbar
  • Dass ein view-source-Tab geöffnet wurde unsichtbar

Wird nur im Arbeitsspeicher gezählt und ist weg, sobald du den Tab schließt. Das Widget beobachtet nur: Es blockiert kein Kürzel und versteckt dir nichts.

Du drückst F12 und die Seite wird weiß. Oder sie wirft dich auf die Startseite, friert hinter dem Banner „In Debugger pausiert“ ein oder gibt „developer tools detected“ aus und lädt nicht weiter. So oder so hat die Seite etwas gemerkt, und kein Event hat es ihr gesagt.

Die Skripte einer Seite bekommen kein Signal, wenn du die DevTools öffnest, ein Element auswählst oder ein Panel liest. Was sie können: bemerken, was offene DevTools mit der Seite anstellen. Das Widget auf dieser Seite führt diese Checks in deinem eigenen Browser aus. Öffne also jetzt die DevTools und sieh zu, wie es reagiert.

Die Kurzfassung: Kein Seitenskript erfährt, dass du etwas untersucht hast. Skripte schließen aus Nebeneffekten, dass die DevTools offen sind: Ein angedocktes Panel verkleinert die Seite, Logging wird langsamer, ein debugger-Statement hält die Seite an, während die Uhr weiterläuft. Gegen zwei dieser drei Checks gibt es einen einfachen Ausweg (Panel abdocken, Breakpoints deaktivieren). Gegen die Konsolen-Zeitmessung nicht, und sie schlägt auch bei Puppeteer an. Nichts davon identifiziert eine Person, und die Checks im Widget laufen komplett in deinem Browser.

Sieht eine Website, wenn du Inspect Element benutzt?

Nicht über ihre Skripte. Browser feuern kein Event „DevTools geöffnet“, und ein ausgewähltes Element oder ein gelesenes Panel verrät der Seite nichts. Der Server sieht weiterhin ganz normale Anfragen. „Seitenquelltext anzeigen“ ist eine gewöhnliche Anfrage nach der Seite oder ein Lesezugriff auf deinen Cache, und Chrome lädt die Source Maps einer Website, sobald die DevTools aufgehen. Liefert ein Server sie aus, kann er das also protokollieren. Welches Element du ausgewählt oder welches Panel du gelesen hast, erfährt er nie.

Eine Seite in Inspect Element zu bearbeiten, ändert für niemand sonst etwas. Du änderst die Kopie in deinem Tab, die Kopie des Servers bleibt unberührt, und ein Reload bringt das Original zurück. Dass eines ihrer Elemente verändert wurde, kann die Seite allerdings bemerken, denn ein MutationObserver meldet solche Änderungen als ganz normale DOM-Änderungen. Ich habe das in Chrome für Text- und Attributänderungen bestätigt, und aus dem Eintrag geht nicht hervor, wer die Änderung gemacht hat. Probier es am Preis im Widget: Rechtsklick, Untersuchen, Text ändern. Das Diagramm zeigt, wo die Änderung landet.

Wessen Kopie hast du bearbeitet?
Der Server der Website
$49.00
was der Shop berechnet
Dein Browser, dieser Tab
$49.00
eine Kopie der Seite im Arbeitsspeicher
Der eigene MutationObserver der Seite noch nichts geändert
Eine Simulation dessen, was eine Änderung im Panel „Elemente“ bewirkt. Sie ändert die Kopie in deinem Tab. Die Seite kann bemerken, dass sich ihre eigenen Elemente geändert haben, aber nicht, dass die DevTools es waren, und der Server berechnet weiterhin $49.00. Ein Reload wirft die Änderung weg.

Wie eine Seite erkennt, dass die DevTools offen sind

Drei der Tricks funktionieren nach demselben Prinzip. Die Seite kann nicht fragen „Sind die DevTools offen?“, also baut sie eine Messung auf und wartet auf einen Nebeneffekt. Die Idee kennst du von der Adblocker-Erkennung: Die Seite sieht das Tool nicht, also misst sie, was das Tool verändert.

Die Fenstergrößen-Differenz. Dockst du die DevTools an der Seite oder unten an, nehmen sie der Seite Platz weg, und window.outerWidth - window.innerWidth (oder das Höhen-Pendant) springt. Skripte werten eine Differenz von etwa 160 bis 170 Pixeln als Treffer. Auf meinem Windows-11-Rechner sprang die Breitendifferenz beim Andocken rechts von 14 auf 569 Pixel, und nach dem Abdocken lag sie wieder bei 14. Fälschlich schlägt der Check an, wenn du die Seite zoomst oder eine Seitenleiste öffnest. Die bekannteste Bibliothek dafür, devtools-detect, wurde im Mai 2026 archiviert, und ihr README räumt ein, dass die Methode viele False Positives liefert.

Konsolenkosten. Der Klassiker loggt ein Objekt mit einem Getter und wartet, ob die Konsole ihn ausliest. Viele ältere Antworten beschreiben das noch, aber im aktuellen Chrome feuert es nicht mehr: In meinem Test mit Chrome 155 unter Windows blieben ein Getter auf Error.stack und einer auf der id eines Elements bei offenen DevTools stumm. Andere Varianten, etwa ein eigenes toString, feuern immer, egal ob die DevTools offen sind, und sagen deshalb nichts aus.

Was weiterhin auffällt, ist die Zeit. Logging ist nahezu kostenlos, bis sich ein Konsolen-Client anhängt, dann muss Chrome für jedes Objekt eine Vorschau bauen. Vierzig console.debug-Aufrufe auf einem Objekt mit 40 Schlüsseln brauchten bei geschlossenen DevTools unter einer Millisekunde und bei offenen einige Millisekunden, auf meinem Rechner etwa das Zehnfache. Ob das Panel angedockt war oder in einem eigenen Fenster, machte keinen Unterschied. Derselbe Sprung zeigte sich bei einer reinen Chrome-DevTools-Protocol-Session, wie Puppeteer und Playwright sie standardmäßig öffnen. Eine Seite, die ihr eigenes Logging gegen eine Baseline misst, merkt das. Der Check unterscheidet allerdings nicht zwischen Entwickler und Skript, und genau deshalb setzt die Bot-Erkennung ihn ein. Firefox und Safari habe ich nicht getestet.

Das debugger-Statement. Ohne DevTools tut es nichts. Bei offenen DevTools und aktiven Breakpoints hält es die Seite an, bis du die Skriptausführung fortsetzt (F8). Ein Skript liest davor und danach die Uhr, und eine Lücke von über etwa 100 ms gilt als Pause. Skripte deuten das als „jemand schaut hin“, auch wenn ein gedrosselter Tab oder ein langsamer Rechner das vortäuschen kann. Das ist auch das Banner „In Debugger pausiert“. Der Button im Widget führt es einmal aus, damit du es spürst.

Der Edit-Watcher. Das vierte Signal ist gar kein DevTools-Check. Es ist der MutationObserver aus dem Abschnitt oben, gerichtet auf alles, was ein Skript schützen will, etwa einen Preis oder ein Paywall-Element. Er meldet die Änderung, nicht die DevTools.

Drei Checks, zwei einfache Umgehungen
  • Fenstergrößen-Differenz
    Äußeres Fenster minus Seitenbereich
    erkannt
  • Konsolenkosten
    40 Konsolenaufrufe gegen eine Baseline messen
    erkannt
  • debugger-Zeitmessung
    Ein debugger-Statement und eine Stoppuhr
    erkannt
Checks, die die DevTools bemerken: 3 / 3
Kein einzelner Check erfasst jede Art, die DevTools zu öffnen. Gegen zwei gibt es einen einfachen Ausweg (Panel abdocken, Haltepunkte deaktivieren), deshalb kombinieren Erkennungsskripte mehrere Checks, und deshalb lassen sich die Konsolenkosten am schwersten vermeiden.

Warum eine Website einfriert, umleitet oder „developer tools detected“ sagt

Websites, die reagieren, nutzen nicht nur einen Trick. Christian Heilmann hat ein solches Skript in Cracking a “Developer Tools Killer” script auseinandergenommen. Es blockiert Rechtsklick sowie die Kürzel F12, Ctrl+Shift+I und Ctrl+U, lässt dann alle 100 ms eine debugger-Schleife laufen und leitet die Seite um, wenn eine Pause länger als 200 ms dauert. Seine Check-Funktion steckt nicht in einer Closure, also hat er sie einfach überschrieben.

Das Motiv ist meist, Kopieren und Scrapen lästiger zu machen. Geschützt wird damit nichts, denn alles, was der Server schickt, liegt schon in deinem Browser. Kopieren, Einfügen, Tabwechsel und Screenshots sind eine eigene Gruppe von Signalen, die wir in Sieht eine Website Tabwechsel, Kopieren und Screenshots behandeln.

Kann eine Website Inspect Element oder F12 blockieren?

Eine Seite kann die Key-Events für F12 und Ctrl+Shift+I sowie das Rechtsklick-Menü abbrechen, und die meisten „Blocker“-Skripte tun genau das. Das ist Kosmetik. Das Browsermenü (Weitere Tools, Entwicklertools) läuft außerhalb der Seite und lässt sich nicht aufhalten. Die letzte Zeile des Widgets protokolliert, welche dieser Events in deinem Browser die Seite erreichen. Es beobachtet nur und bricht nie etwas ab.

DevTools-Erkennung umgehen und den Freeze stoppen

Die DevTools sind eine Standardfunktion des Browsers. Wenn ein Check darauf anschlägt, ist das das Problem der Website. Wähle den Fix passend zum Check:

  1. Haltepunkte deaktivieren im Panel „Quellen“ (Ctrl+F8, auf dem Mac Cmd+F8). Jedes debugger-Statement wird zum No-op, und der Pausen-Check sieht keine Lücke.
  2. Das Panel abdocken in ein eigenes Fenster, was die Fenstergrößen-Differenz aushebelt.
  3. Das Skript selbst behandeln, wenn die Konsolen-Zeitmessung anschlägt. Keine Einstellung versteckt die Konsole vor einer Seite. Du kannst das Erkennungsskript überschreiben oder blockieren, wie es Heilmanns Walkthrough durch das Überschreiben der Check-Funktion tut, oder eine gespeicherte Kopie der Seite untersuchen, die keine Skripte ausführt.

Greif nicht zu einer Erweiterung, die window.outerWidth fälscht oder console patcht. Ein ersetztes Built-in meldet nicht mehr [native code], und das ist ein eigenes Erkennungszeichen, genauso wie gepatchte native Funktionen bei der Bot-Erkennung.

Ist Inspect Element illegal?

Nein. Jeder große Browser liefert es mit und dokumentiert es, und es ändert nur deine lokale Kopie. Ärger beginnt erst bei dem, was du danach tust: Ein manipulierter Screenshot, der als echte Quittung, Rechnung oder echter Kontoauszug ausgegeben wird, kann je nach Land und Absicht Fälschung oder Betrug sein, egal mit welchem Tool er entstanden ist.

Wenn du Browser in großem Stil betreibst

Für Entwickler bedeutet ein Treffer eine kaputte Seite, bis sie die Breakpoints deaktivieren. Wer Browser in großem Stil betreibt, bekommt auf jeder Website, die die Kosten ihres Konsolen-Loggings misst, ein Flag, denn die Kosten verschieben sich, sobald sich ein Automatisierungskanal anhängt, nicht nur wenn ein Mensch die DevTools öffnet. Wenn du Profile mit Puppeteer oder Playwright steuerst, lass jedes Setup gegen das Widget oben laufen, ohne geöffnetes DevTools-Fenster, bevor du dich darauf verlässt.

Incogniton-Profile sind echte Chromium-Builds, die Checks oben gelten für sie also genauso wie für Chrome. Ob die Konsolen-Zeitmessung ruhig bleibt, hängt davon ab, wie du das Profil ansteuerst, das musst du selbst testen. Ob eine Website Automatisierung erlaubt, bestimmen ihre eigenen Regeln, lies sie also zuerst.

Probier es gleich aus: Öffne die DevTools, während das Widget zusieht, dann dock das Panel ab und deaktiviere die Breakpoints. Zwei Zeilen werden still. Die Konsolen-Zeile nicht. Der komplette Browser-Scan deckt den Rest dessen ab, was eine Seite lesen kann, vom Netzwerk bis zum Fingerprint.

Incogniton-Logo

Bring deine Privatsphäre aufs nächste Level

Pfeil