загрузка файлов может быть сделано через AJAX (как из xhr2 - если вам необходимо поддерживать старые браузеры, использовать что-то вроде jQuery-File-Upload, есть a good tutorial here на его использование только, чтобы сделать часть загрузки, и не использовать пользовательский интерфейс Blueimp.) Это связано с тем, что «без ручной отправки формы» часть вашего вопроса. Вам все равно нужно будет взаимодействовать с элементом загрузки файла, чтобы выбрать файл, и именно там вы используете page.uploadFile()
.
Чтобы сделать это исключительно с помощью JavaScript, без «взаимодействия с любым элементом на странице», вы можете использовать page.evaluate() для запуска пользовательского JavaScript. Затем он может использовать File Reader API, чтобы найти файл на локальном диске, сохранить его в блобе, а затем загрузить этот блок с помощью AJAX. WebKit в PhantomJS (примерно эквивалентный Chrome 13) должен работать, поскольку, по-видимому, FileReader API существует с Chrome 6.
(BTW, если все, что вы хотели сделать, это загрузить файл на сервер с помощью безголового скрипта , PhantomJS переполнен, и вы можете использовать curl
.Но я предполагаю, что вы хотите использовать PhantomJS по какой-то другой причине!)
Вы нашли это решение? – themiurgo
@Ros - у вас, казалось, есть начало возможного ответа там, пожалуйста, посмотрите, можете ли вы перефразировать его, чтобы более четко сформулировать свой вывод. –