2017-07-23 3 views
-1

Der Kontext ist ein Bibliothekssystem, wo ich in der Lage sein soll, eine Liste aller Kopien eines Buches zu erstellen und durchzugehen und zu bearbeiten, so dass sie alle einheitlich sind, die richtige haben Rufnummer, usw. Ich würde dieses Skript in der Konsole ausführen, und im Idealfall würde es durch jede Kopie in der Liste gehen und es mit den Werten, die ich fülle, bearbeiten.Javascript. Ein Skript, um auf zwei separaten Seiten zu arbeiten

Unten ist, was ich bis jetzt gekommen bin. Die erste Zeile klickt auf den Bearbeitungslink der ersten Kopie und hier kommt das Problem an. Es öffnet das zu bearbeitende Formular auf einer neuen Seite, aber der Rest des Skripts arbeitet immer noch mit der Originalseite und tut es nicht Lauf nicht. Wenn ich die erste Zeile ausführe und dann den Rest ausführe, funktioniert es, aber mein ultimatives Ziel ist ein Skript, das ich einfach ausführen kann und es nahtlos durch jede Kopie auf der Seite laufen lässt. Ich brauche eine Möglichkeit, um die erste Zeile ausführen zu lassen, und dann anzugeben, dass der Rest des Skripts mit der neuen Seite funktionieren soll, die gerade von der ersten Zeile geöffnet wurde. Die letzte Zeile speichert das Formular und bringt uns zurück zur Liste der Kopien.

Ich habe schon eine ganze Weile nach einer Antwort gesucht und nichts gefunden, was bisher funktioniert. Ich habe erst vor einer Woche angefangen, JavaScript zu lernen, also gibt es vieles, was ich nicht weiß, aber ich sah das Potenzial, eine sehr langweilige Arbeit für mich selbst zu automatisieren und dachte, ich würde es versuchen.

document.querySelectorAll('[title="Edit Copy"]')[0].click(); 

document.querySelector("input[name='callNumber']").value=""; 
document.querySelector("input[name='description1']").value=""; 
document.querySelector("input[name='enumeration1']").value=""; 
document.querySelector("input[name='copyNumber']").value =""; 
document.getElementById("saveCopy").click(); 
+0

Wenn dies Ihre eigene Site ist, können Sie diesen Prozess serverseitig oder direkt in der Datenbank ausführen. So wäre es für dich viel einfacher. Wenn Sie darauf bestehen, Javascript zu verwenden, können Sie entweder die Browsererweiterungen oder den lokalen Speicher versuchen, mit denen Sie den Status des Skripts beibehalten können, wenn sich die Seite ändert. – Nisarg

Antwort

0

Sie sollen eine Schleife erstellen, die Aufgabe zu wiederholen:

// get edit selectors 
    selectors = document.querySelectorAll('[title="Edit Copy"]'); 

    // now loop through them - i would be the index to identify them uniquely. 
    for(var i = 0; i < selectors.length; i++){ 
     var thisDiv = selectors[i]; 
     // do stuff like click: 
     thisDiv[i].click(); 
    } 

Wenn Sie Aufgaben allerdings ist die Automatisierung - dann könnte dies der Ansatz nicht zu nehmen, wie ich Ihre Frage neu lesen. Das Skript wird auf der Seite ausgeführt. Wenn also das Klickereignis zum Ausführen auf einer neuen Seite ausgelöst wird, ist dieser Kontext verloren. Sie könnten etwas wie preventDefault auf dem Link machen, der die neue Seite öffnet, so dass die Seite nicht geladen wird, und einen Post an das URL-Formular schicken, das das Update macht, wo Sie das (saveCopy) .click() machen.

Sie könnten auch etwas wie Phantomjs einen kopflosen Browser verwenden, der diese Art von Sache auch automatisieren kann. http://casperjs.org/ ist eine Bibliothek, die entwickelt wurde, um das Phantom für die Automatisierung ein wenig einfacher zu machen. Es gibt eine Chrome-Erweiterung namens Resurrectio, mit der Sie Ihre Ereignisse automatisieren und Ihnen ein Casper-Skript geben können, das Sie später auch ausführen können.

+0

Die Schleife wäre mein nächster Schritt, wenn ich das Problem in meiner Frage lösen könnte, damit dieses Bit nützlich ist. Dann würde das, was ich oben geschrieben habe, auf jeder Kopie in der Liste laufen. Letztendlich war das etwas, was ich ausprobieren wollte, während ich Javascript lerne. Es ist also nicht wichtig, dass ich es mit allen notwendigen Mitteln funktioniere. Ich dachte, es wäre eine gute Übung, mir beim Lernen zu helfen und gleichzeitig etwas Nützliches zu machen. –

+0

Ja, versuchen Sie herauszufinden, was passiert, wenn document.getElementById ("saveCopy"). Click(); Schaltfläche wird angeklickt. Anstatt auf die Schaltfläche zu klicken, um die Seite zu öffnen, können Sie für jedes Element die Formularübergabe mit Daten angeben, die Sie ausfüllen und mit w/ajax einreichen möchten. In der Chrome-Konsole können Sie zur Registerkarte "Netzwerk" gehen und nach XHR suchen. Dies sollte helfen zu sehen, welche Daten vorhanden sind, wenn Sie das Formular normal übermitteln. Die URL, an die gepostet werden soll - ich gehe davon aus, dass sie für die Schaltflächen "[title =" Edit Copy "]" verfügbar ist, die die neuen URLs öffnen. –

Verwandte Themen