WordPress上传插件表单无法在无头浏览器中激活

时间:2017-03-12 07:17:53

标签: javascript wordpress phantomjs

我正在开发一个小项目,PhamtomJS将登录我的网站并上传一个插件。我几乎拥有它,除了一个奇怪的问题。尽管我的代码的file.upload部分运行正常,但“立即安装”按钮仍处于禁用状态。这是从幻影渲染的图片:

Screenshot

如您所见,该按钮仍处于禁用状态。因此,当我尝试使用getElementById()方法单击它时,它将无法正常工作。如果我尝试通过以下方式提交表单,它也不会起作用:

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

我还尝试手动启用该按钮,然后通过Javascript单击它,但这也没有用。有什么想法吗?

修改 在尝试拉出按钮的外部HTML时,我将以下内容输入console

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

此代码的结果如下:

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

1 个答案:

答案 0 :(得分:1)

您是如何将值输入文件输入框的?根据浏览器(客户端)的实现,只需添加文本作为文件输入值可能会触发方框change事件。

第一个(读取:最简单)解决方案可能是在您重写值后尝试$('form.wp-upload-form input[type="file"]').trigger('change');。 (如果您不使用jQuery,请参阅here了解如何触发本机事件;看起来您已经知道如何选择节点.PhantomJS很可能具有本机触发功能,因为它可以使用jQuery。你在那种应用中做的事情。)

如果不这样做,您可能只想通过JS上传文件。我在4.7.3上,我的表格如下:

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

FormData放在一起,从表单上的操作标记中抓取提交网址,确保包含nonce并可能传递提交值以获得良好的衡量标准。在没有合适插件的情况下组装multipart/form-data POST很烦人但是如果你已经达到这个目的,你可能已经不得不处理更烦人的事情。

WordPress 不应该能够区分您从自己的表单提交的内容或您假装在一起并扔在同一URL上的内容。如果是,请检查客户端字符串设置,确保您已正确使用现场值并确保正确设置引用[sic。]。