PhantomJS - 上传文件而不提交表格

Fab*_*hia 7 javascript upload file phantomjs

是否可以使用PhantomJS将文件上传到某个页面而无需手动提交表单?我认为可以使用Content-Type:multipart/form-data.

https://github.com/ariya/phantomjs/blob/master/examples/imagebin.js上的示例工作正常,但我想直接在POST请求中发送文件而不与任何元素交互.

有什么建议吗?

非常感谢你

Dar*_*ook 4

文件上传可以通过 AJAX 完成(从 xhr2 开始 - 如果您需要支持较旧的浏览器,请使用jQuery-File-Upload之类的东西;这里有一个很好的教程,介绍如何使用它来完成上传部分,而不是使用 Blueimp 的 UI .)这与您问题的“无需手动提交表单”部分相关。您仍然需要与文件上传元素交互来选择文件,这就是您使用page.uploadFile().

要仅通过 JavaScript 执行此操作,而不“与页面上的任何元素交互”,您可以使用 page.evaluate() 来运行一些自定义 JavaScript。然后,它可以使用文件读取器 API在本地磁盘上查找文件,将其存储在 blob 中,然后通过 AJAX 上传该 blob。PhantomJS 中的 WebKit(大致相当于 Chrome 13)应该可以工作,显然 FileReader API 自 Chrome 6 以来就已经存在了。

(顺便说一句,如果您只想使用无头脚本将文件上传到服务器,PhantomJS 就太过分了,您可以使用curl。但我假设您出于其他原因想要使用 PhantomJS!)