是否可以使用PhantomJS将文件上传到某个页面而无需手动提交表单?我认为可以使用Content-Type:multipart / form-data。
https://github.com/ariya/phantomjs/blob/master/examples/imagebin.js上的示例工作正常,但我想直接在POST请求中发送文件而不与任何元素交互。
有什么建议吗?
非常感谢
答案 0 :(得分:3)
文件上传可以通过AJAX完成(从xhr2开始 - 如果您需要支持旧版浏览器,请使用类似jQuery-File-Upload的内容;有a good tutorial here使用它来执行上传部分,以及没有使用Blueimp的用户界面。)这与你的问题中的“无需手动提交表单”有关。您仍然需要与文件上传元素进行交互以选择文件,这就是您使用page.uploadFile()
的位置。
要完全使用JavaScript,而不“与页面上的任何元素进行交互”,您可以使用page.evaluate()来运行一些自定义JavaScript。然后,它可以使用File Reader API在本地磁盘上查找文件,将其存储在blob中,然后通过AJAX上传该blob。 PhantomJS中的WebKit(大致相当于Chrome 13)应该可以工作,因为从Chrome 6开始,FileReader API就已存在。
(顺便说一句,如果你想做的就是使用无头脚本将文件上传到服务器,PhantomJS有点过分,你可以使用curl
。但我假设你想要使用PhantomJS其他原因!)
答案 1 :(得分:0)
我最后使用的解决方案是NodeJS和PhantomJS的混合,以防我需要上传一些东西我分叉一个进程并使用NodeJS上传文件"请求&#34 ;模块然后发送回PhantomJS页面的输出,需要手动处理。