ChatGPT Tampermonkey Script, clicks klappen nur genau 2 Mal?

bernd7

Grünschnabel
Hallo,
ich hoffe mir kann Jemand helfen:
Ich bin ein Fan von ChatGPT und hätte mir gerne alle meine "Conversations" von ChatGPT heruntergeladen, was ChatGPT leider nicht selbst anbietet.
Durm habe ich dieses Tampermonkey script gefunden
ChatGPT Exporter
und versuche es seit Tagen so anzupassen dass ich mit einem zusätzlichen button dort alle Skripte auf einmal herunterlade als HTML.
Der relevante Code, der beim Klick auf den Button ausgeführt wird, ist der hier:
Javascript:
async function exportToHtmlAll(fileNameFormat){
    let a=document.body.querySelector('div.flex.flex-col.gap-2.text-gray-100.text-sm');

  let he=a.lastChild;
    while(he!==null && he.nodeName == "BUTTON"){
          he.click();
          he=a.lastChild;
        await sleep(1000);
    }
    
    
    let tags=a.childNodes;
    var array = Array.from(tags);
    for(let i=0;i<array.length;i++){
        array[i].click();
        await sleep(2000);
        //await exportToHtml(array[i].textContent);
        console.log(array[i].textContent);
        await sleep(2000);
        console.log(i+"th download done!");
    }
    return;
    
}
Bei der 2. for Schleife soll er ja jedes der Kindernodes einmal anklicken und dann ein paar Sekunden warten.
Leider macht er das mit dem Klick aber nicht!
Dort sind um die 20 Kindernodes drin und nur die ersten 2 (also i=0 und i=1) klickt er an,
die Nachfolgenden klickt er einfach nicht mehr o_O

console.log wird korrekt ausgeführt, also i wird korrekt erhöht.
Der auskommentierte exportToHTML(...) Part funktioniert auch, habe es nur auskommentiert weil das Problem ja am Klicken liegt derzeit.
Alles klappt, nur klickt er mir nicht alle Kinder an!
Hatte zuvor es direkt mit iterieren über die live ChildNodes Lsite versucht, danahc nun über eine Array Version davon, Ergebnis immer Dasselbe:
Nur die ersten 2 Sachen werden angeklickt!
Von Hand kann ich problemlos die 30 divs der Reihe nahc anklicken, auch ohne eine 4 Sekunden Pause zu machen, nur die click() Funktion macht nicht mit :-/
Weiß jemand woran das liegen könnte?
Oder ob die Seite oder der Server an sich irgendwie das "Faken" eines Mausklicks unterbindet?
Abe rhalt verdächtig warum es immer genau bei den ersten 2 Sachen geht und dann nicht mehr....
Übrigens, wenn eins der Teile geklickt wird, ändern sich die Klassen der Kinder etwas.
Könnte das da irgendwie für Probleme sorgen?
 
Zuletzt bearbeitet von einem Moderator:
Habe gerade mal den relevanten Codeteil etwas umgeschrieben:

Javascript:
let tag=a.childNodes[0];
    tag.scrollIntoView();
    await sleep(1000);
    tag.click();
    await sleep(5000);
    //await exportToHtml(tag.textContent);
    console.log(tag.textContent);
    console.log("Download done!");
    tag=tag.nextElementSibling;
        
    while (tag!==null){
        tag.scrollIntoView();
      await sleep(1000);
      tag.click();
      await sleep(5000);
      //await exportToHtml(tag.textContent);
      console.log(tag.textContent);
      console.log("Download done!");
      tag=tag.nextElementSibling;   
    }
Damit er sich statt anhand der Indizes, vom ersten kind aus immer zum nächsten (kind) Node hangelt.
Ergebnis Dasselbe:
console.log gibt schön brav alle Inhalte aus, also die richtigen Nodes werden der Reihe nach gefunden.
Nur das sch... click() funktioniert nur bei den ersten 2 Nodes, danach bewirkt es nichts mehr (falls es überhaupt ausgeführt wird)
 
Ich habe keine Lösung aber zwei Anmerkungen:
  • AFAIK gibt es in Javascript kein sleep, man findet jedoch Nachbildungen, z. B. hier: JavaScript: Sleep und setTimeout Wie sieht deine Implementierung aus?
  • Könnte es sein, dass der Betreiber der Seite nicht wünscht, dass automatisch geklickt wird und es unterbunden hat?
 
Ich habe den typischen 0815 Weg benutzt um zu "sleepen":

Javascript:
function sleep(ms) {
    return new Promise((resolve) => setTimeout(resolve, ms));
  }
Sleep funktioniert auch wunderbar.
Klar durchaus sein dass der Seitenbetreiber automatische Klicks nicht mag.
Wäre dann halt die Frage wie man da drum herum kommt?Bzw wie ich überhaupt rausfinde wie der "fake" klicks von Echten unterscheiden kann und wie man es umgeht? :)
 
Und ich bin der Meinung das mich die Wünsche des Betreibers einen Dreck interessieren weil ich keine 20§ im Monat hinlege um ChatGPT Plus zu kaufen.
Und ich habe Null Bock, 80+ mal händisch den Downloadbutton zu klicken.
 
Zurück