2013-12-07 4 views
6

수동으로 양식을 제출하지 않고 PhantomJS를 사용하여 특정 페이지로 파일을 업로드 할 수 있습니까? Content-Type : multipart/form-data를 사용하여 무언가 가능하다고 생각합니다.PhantomJS - 양식을 제출하지 않고 파일 업로드

https://github.com/ariya/phantomjs/blob/master/examples/imagebin.js의 예제는 정상적으로 작동하지만 모든 요소와 상호 작용하지 않고 POST 요청으로 파일을 직접 보내려고합니다.

의견이 있으십니까?

는 xhr2의로 (당신에게

+0

어떤 해결책이 있습니까? – themiurgo

+0

@Ros - 가능한 답의 시작이있는 것처럼 보였습니다. 결론을 더 명확하게 말하기 위해 다시 말할 수 있는지 확인하십시오. –

답변

3

파일 업로드 AJAX를 통해 할 수있는 대단히 감사합니다 - 당신은 오래된 브라우저를 지원해야하는 경우, jQuery-File-Upload과 같이 사용, 그것은 바로 업로드 부분을 어떻게 사용에 a good tutorial here이를, Blueimp의 UI를 사용하지 마십시오.) 질문의 "수동으로 양식을 제출하지 않고"와 관련이 있습니다. 파일을 선택하기 위해 파일 업로드 요소와 상호 작용해야하며, 여기서는 page.uploadFile()을 사용합니다.

"페이지의 요소와 상호 작용하지"않고 JavaScript 만 사용하려면 page.evaluate()를 사용하여 일부 맞춤 JavaScript를 실행할 수 있습니다. 그런 다음 File Reader API을 사용하여 로컬 디스크에서 파일을 찾고 blob에 저장 한 다음 AJAX에 해당 BLOB를 업로드 할 수 있습니다. PhantomJS의 WebKit (Chrome 13에 해당)은 Chrome 6 이후 FileReader API가 있었던 것처럼 작동합니다.

(BTW, 헤드리스 스크립트를 사용하여 파일을 서버에 업로드하는 것이 좋습니다. , PhantomJS는 잔인하며 curl을 사용할 수 있습니다. 그러나 다른 이유로 PhantomJS를 사용하고 싶다고 가정합니다!)

+1

downvoting 할 때 좋은 매너를 언급하십시오. (나는이 대답을 다시 읽었으며 여전히 좋은 대답은 아니라고 생각한다. 그러나 올바른 대답은 - 나는 OP와 같은 문제를 가지고 있으며, 여러 번 내 제안을 모두 사용했다. 그래서 내가 왜 잘못 생각하는지 더 궁금해합니다.) –

0

내가 사용한 솔루션은 NodeJS와 PhantomJS가 혼합 된 것입니다 나는 프로세스를 포크하고 NodeJS "요청"모듈을 사용하여 파일을 업로드 한 다음 수동으로 처리해야하는 페이지의 출력을 PhantomJS로 다시 전송하는 무언가를 업로드해야합니다.

관련 문제