I am trying to upload a file using Puppeteer, but, the thing is there is no <input type="file">
, as a result, the following code fails:-
let input = await page.$("input[type=file]");
await input.uploadFile("./test.pdf");
There are some other input fields, but, uploading on them also fails with the following error:-
Error: Protocol error (DOM.setFileInputFiles): Node is not a file input element
The following is the code of the upload button:-
<form name="commonform" id="form_bookinteriorPrimaryForm" method="post" action="https://tsw.createspace.com/title/ajax/paperback/8871655/setup/book_interior/processservice?serviceId=88073343&serviceKey=bookinterior&taskKey=book_interior&submittedBy=4241370&pageCount=120">
<div class="task" id="task123780522">
<div class="action FILE_UPLOAD" id="t123780522a_interiorfile">
<input type="hidden" id="form_bookinterior_upload_tsw_setup_book_interior_tsw_book_interior__upload_s3name" name="TSW_BOOK_INTERIOR-">
<input type="hidden" id="form_bookinterior_upload_tsw_setup_book_interior_tsw_book_interior__upload_asyncTaskPostfix" name="t123780522a_interiorfile_asyncTaskPostfix">
<span class="formFieldContainer" id="form_bookinterior_upload_tsw_setup_book_interior_tsw_book_interior__uploadComplete" style="display: none;">
<div class="contentFormLabel">
<span>Interior File</span>
</div>
<div class="contentFormField">
<span id="form_bookinterior_upload_tsw_setup_book_interior_tsw_book_interior__uploadUserFileName" class="uploadFileName">interior - Copy.pdf</span><br>
<a href="https://tsw.createspace.com/title/8871655/setup/book_interior#" target="" class="changeUploadLink" onclick="universalAjaxHandler.handleOnClick([['element', 'form_bookinterior_upload_tsw_setup_book_interior_tsw_book_interior__uploadComplete', 'hide'], ['element', 'form_bookinterior_upload_tsw_setup_book_interior_tsw_book_interior__uploadEdit', 'show']]); return false;"><span class="">Upload a different file</span></a>
<div class="clearer"></div>
<br>
</div>
</span>
<span class="fixedFormUploadEdit" id="form_bookinterior_upload_tsw_setup_book_interior_tsw_book_interior__uploadEdit" style="">
<div id="t123780522a_interiorfile_upload_field_containerTop" class="cspContainerTop" style="display: none;"></div>
<div id="t123780522a_interiorfile_upload_field_container" class="cspContainer">
<div id="tsw_setup_book_interior_tsw_book_interior__upload_field_container" class="cspContainer formFieldContainer">
<div class="contentFormLabel">
<span class="">Interior File</span>
<span class="requiredColor">*</span>
</div>
<div class="contentFormField">
<span id="tsw_setup_book_interior_tsw_book_interior__uploadIFrame" style="display: none;">
</span>
<span id="tsw_setup_book_interior_tsw_book_interior__uploadSWF" style="">
<div style="float: left;">
<input type="text" class="contentTextField formItemNormal" id="tsw_setup_book_interior_tsw_book_interior__uploadTextTarget" style="width: 200px; margin-top: 5px;" disabled="true">
</div>
<div style="float: left;">
<div class="round_button_link" id="tsw_setup_book_interior_tsw_book_interior__uploadUploadContainer">
<div class="round_button_link_left"></div>
<div class="round_button_link_middle">
<div style="margin-top: 4px;">Browse</div>
</div>
<div class="round_button_link_right"></div>
</div>
</div>
</span>
<div class="clearer"></div>
<span class="note">The following formats are accepted: pdf,doc,docx,rtf</span>
<script type="text/javascript">
/* <![CDATA[ */
if (window.CSP_OK) {
document.observe('dom:loaded', function(e) {
blockHandler = false;
new FormInputField('tsw_setup_book_interior_tsw_book_interior__uploadTextTarget');
});
}
/* ]]> */
</script>
<div id="tsw_setup_book_interior_tsw_book_interior__upload_results" class="cspError contentFormError" style="display: none;"></div>
</div>
<div style="clear: left;"></div>
</div>
<script type="text/javascript">
/* <![CDATA[ */
if (window.CSP_OK) {
document.observe('dom:loaded', function(e) {
blockHandler = false;
new FormField('tsw_setup_book_interior_tsw_book_interior__upload_field_container');
});
}
/* ]]> */
</script>
<div class="clearer"></div>
<div id="t123780522a_interiorfile_upload_results" class="cspError formFieldDefaultError" style="display: none;"></div>
</div>
<div class="clearer"></div>
<script type="text/javascript">
/* <![CDATA[ */
if (window.CSP_OK) {
document.observe('dom:loaded', function(e) {
blockHandler = false;
new FormField('t123780522a_interiorfile_upload_field_container');
});
}
/* ]]> */
</script>
<br>
</span>
<div class="cspError formFieldDefaultError" style="display: none;padding-left:50px;" id="form_bookinterior_clientside_failure">
Please check your internet connection and try again. We highly recommend using a high-speed broadband Internet connection.
</div>
<div class="clearer">
</div>
<script type="text/javascript">
/* <![CDATA[ */
if (window.CSP_OK) {
document.observe('dom:loaded', function(e) {
blockHandler = false;
window['form_bookinterior_interiorfile'] = new AjaxFixedFormUpload(
'form_bookinterior_interiorfile', 'form_bookinterior_upload_tsw_setup_book_interior_tsw_book_interior__upload', 'form_bookinterior', '123780522', 'tsw_setup_book_interior_tsw_book_interior__upload', '/title/ajax/paperback/8871655/setup/book_interior/validateupload',
'/title/ajax/paperback/8871655/setup/book_interior/confirmupload', 'Uploading Interior File', 'Processing Interior File', '*.pdf; *.doc; *.docx; *.rtf', '', '419430400 B',
universalAjaxHandler.handleOnClick.bind(universalAjaxHandler, [['element', 'tsw_setup_book_interior_tsw_book_interior__upload_results', 'show'], ['element', 'tsw_setup_book_interior_tsw_book_interior__upload_results', 'update', 'Your Interior File cannot exceed 400 MB.'], ['element', 'tsw_setup_book_interior_tsw_book_interior__upload_field_container', 'showError'], ['element', 'tsw_setup_book_interior_tsw_book_interior__upload', 'showError']]), universalAjaxHandler.handleOnClick.bind(universalAjaxHandler, [['element', 'tsw_setup_book_interior_tsw_book_interior__upload_results', 'show'], ['element', 'tsw_setup_book_interior_tsw_book_interior__upload_results', 'update', 'The file you selected is empty. Please select another file.'], ['element', 'tsw_setup_book_interior_tsw_book_interior__upload_field_container', 'showError'], ['element', 'tsw_setup_book_interior_tsw_book_interior__upload', 'showError']]), universalAjaxHandler.handleOnClick.bind(universalAjaxHandler, [['element', 'tsw_setup_book_interior_tsw_book_interior__upload_results', 'update', ''], ['element', 'tsw_setup_book_interior_tsw_book_interior__upload_results', 'hide'], ['element', 'tsw_setup_book_interior_tsw_book_interior__upload_field_container', 'hideError'], ['element', 'tsw_setup_book_interior_tsw_book_interior__upload', 'hideError']]), 'e2fae1cd4365a945d1b85c369ac342bd0fae3d626797cd12', 'a8bfdf6173bb60eff9b42c338610dc5b',
'', 0, 100, false
);
window['form_bookinterior_interiorfile'].customRequestParams = {"fileType":"TSW_BOOK_INTERIOR"};
});
}
/* ]]> */
</script>
<div class="" id="bookInteriorWarning" style="display: none;">
<div class="bookInteriorWarning">
<div class="warningTop"></div>
<div class="warningIcon">
<span class="warningText">WARNING:</span>
<span class="">Your book's physical properties were updated. Please resubmit your book's interior.</span>
</div>
<div class="clearer"></div>
</div><br>
</div>
</div>
</div>
</form>
When I use
document.querySelector("#tsw_setup_book_interior_tsw_book_interior__uploadTextTarget").value = "test.pdf";
and click on Save Button, it does show the uploading progress, but, is stuck at 0%, so, maybe it is getting path from the
<input type="text" class="contentTextField formItemNormal" id="tsw_setup_book_interior_tsw_book_interior__uploadTextTarget" style="width: 200px; margin-top: 5px;" disabled="true">
but, that would be a security concern? Setting full path in the value also doesn't help and it is again stuck at 0%.
Maybe they are using AJAX file upload?
I am kinda lost at this point. Is there any way to automate this upload?
Any help would be really appreciated! Thanks!
Edit:- If the above is not possible, is it there any way to handle the file dialog using Puppeteer?