Das WordPress-Upload-Plug-in-Formular wird im Headless-Browser nicht aktiviert
Lesezeit: 3 Minuten
Ethan
Ich arbeite an einem kleinen Projekt, bei dem sich PhamtomJS bei meiner Website anmeldet und ein Plugin darauf hochlädt. Ich habe es fast, bis auf ein seltsames Problem. Obwohl die file.upload Teil meines Codes funktioniert einwandfrei, die Schaltfläche Jetzt installieren bleibt deaktiviert. Hier ist ein Bild, das von Phantom gerendert wurde:
Wie Sie sehen können, ist die Schaltfläche immer noch deaktiviert. Also, wenn ich versuche, es mit dem anzuklicken getElementById() Methode, es wird nicht funktionieren. Es funktioniert auch nicht, wenn ich versuche, das Formular zu senden, indem ich Folgendes mache:
Ich habe auch versucht, den Button manuell zu aktivieren und dann per Javascript darauf zu klicken, aber das hat auch nicht funktioniert. Irgendwelche Ideen?
BEARBEITEN
Beim Versuch, den äußeren HTML-Code der Schaltfläche zu ziehen, habe ich Folgendes eingegeben console:
Meinst du die Schaltfläche „Plugin hochladen“ oder „Jetzt installieren“? Hat eines der beiden ein Attribut „deaktiviert“?
– Gopherkhan
14. März 2017 um 18:53 Uhr
@Gopherkhan Die Schaltfläche Jetzt installieren
– Ethan
14. März 2017 um 20:40 Uhr
Können Sie die Schaltfläche greifen und ihr äußeres HTML protokollieren?
– Gopherkhan
14. März 2017 um 23:11 Uhr
@Gopherkhan Was meinst du damit? Zum Beispiel die Seite inspizieren, die Schaltfläche herausgreifen und einen Screenshot teilen oder so?
– Ethan
14. März 2017 um 23:59 Uhr
nein, eher wie console.log(document.querySelector(‘#your_button_id’).outerHTML). Ich gehe davon aus, dass es eine Möglichkeit gibt, die Protokollierung Ihres Phantomlaufs zu löschen
– Gopherkhan
15. März 2017 um 0:13 Uhr
Wie hast du den Wert in das Dateieingabefeld bekommen? Abhängig von der Browser-(Client-)Implementierung reicht wahrscheinlich das einfache Hinzufügen von Text als Dateieingabewert aus nicht löst die Box aus change Veranstaltung.
Die erste (sprich: einfachste) Lösung könnte darin bestehen, es zu versuchen $('form.wp-upload-form input[type="file"]').trigger('change'); nachdem Sie den Wert eingegeben haben. (Wenn Sie jQuery nicht verwenden, siehe hier zum Auslösen eines nativen Ereignisses; Anscheinend wissen Sie bereits, wie man Knoten auswählt. PhantomJS verfügt möglicherweise über eine native Triggerfunktion, da dies die Art von Dingen ist, die Sie in dieser Art von Anwendung tun.)
Andernfalls können Sie die Datei einfach über JS hochladen. Ich bin auf 4.7.3 und mein Formular sieht so aus:
A zusammenstellen FormData, schaben Sie die Übermittlungs-URL aus dem Aktions-Tag im Formular, stellen Sie sicher, dass Sie die Nonce einschließen und übergeben Sie wahrscheinlich den Übermittlungswert für eine gute Maßnahme. Zusammenbau a multipart/form-data POST ist ohne ein geeignetes Plugin ärgerlich, aber wenn Sie so weit gekommen sind, mussten Sie sich wahrscheinlich schon mit lästigeren Dingen auseinandersetzen.
WordPress sollte nicht in der Lage sein, den Unterschied zwischen dem, was Sie über ein eigenes Formular einreichen, oder dem, was Sie zusammen fälschen und auf dieselbe URL werfen, zu erkennen. Wenn dies der Fall ist, überprüfen Sie die Client-String-Einstellung, stellen Sie sicher, dass Sie die richtige Nonce haben, und stellen Sie sicher, dass Sie den Referrer festlegen [sic.] korrekt.
14017600cookie-checkDas WordPress-Upload-Plug-in-Formular wird im Headless-Browser nicht aktiviertyes
Meinst du die Schaltfläche „Plugin hochladen“ oder „Jetzt installieren“? Hat eines der beiden ein Attribut „deaktiviert“?
– Gopherkhan
14. März 2017 um 18:53 Uhr
@Gopherkhan Die Schaltfläche Jetzt installieren
– Ethan
14. März 2017 um 20:40 Uhr
Können Sie die Schaltfläche greifen und ihr äußeres HTML protokollieren?
– Gopherkhan
14. März 2017 um 23:11 Uhr
@Gopherkhan Was meinst du damit? Zum Beispiel die Seite inspizieren, die Schaltfläche herausgreifen und einen Screenshot teilen oder so?
– Ethan
14. März 2017 um 23:59 Uhr
nein, eher wie console.log(document.querySelector(‘#your_button_id’).outerHTML). Ich gehe davon aus, dass es eine Möglichkeit gibt, die Protokollierung Ihres Phantomlaufs zu löschen
– Gopherkhan
15. März 2017 um 0:13 Uhr