Das WordPress-Upload-Plug-in-Formular wird im Headless-Browser nicht aktiviert

Lesezeit: 3 Minuten

Ethans Benutzeravatar
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:

Bildschirmfoto

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:

document.querySelector('form[action*="/wp-admin/update.php?action=upload-plugin"]').submit()

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:

console.log(document.querySelector('#install-plugin-submit').outerHTML)

Das Ergebnis dieses Codes war folgendes:

<input type="submit" name="install-plugin-submit" id="install-plugin-submit" class="button" value="Install Now">

  • 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:

<form method="post" enctype="multipart/form-data" class="wp-upload-form" action="http://[server]/wp-admin/update.php?action=upload-plugin">
<input type="hidden" id="_wpnonce" name="_wpnonce" value="[nonce]"><input type="hidden" name="_wp_http_referer" value="/wp-admin/plugin-install.php"> <label class="screen-reader-text" for="pluginzip">Plugin zip file</label>
<input type="file" id="pluginzip" name="pluginzip">
<input type="submit" name="install-plugin-submit" id="install-plugin-submit" class="button" value="Install Now" disabled="">
</form>

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.

1401760cookie-checkDas WordPress-Upload-Plug-in-Formular wird im Headless-Browser nicht aktiviert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy