Excel VBA를 통해 웹 사이트로 파일로드를 자동화하려고하지만 웹 페이지의 파일로드 부분과 제대로 상호 작용하는 데 어려움을 겪고 있습니다. 나는 여러 가지 다른 웹 페이지를 읽었으며 여기에서 그리고 다른 방법으로이 방법에 대한 답변을했지만 내 시도는 실패하고 있습니다.Excel VBA 자동 IE 파일로드
틀림없이 나는 VBA와 다양한 HTML (또는 기타) 요소를 통해 IE와 상호 작용하고 도움이 필요하다고 인정합니다.
내가와 상호 작용하는 데 어려움을 겪고하고있는 웹 페이지의 부분은 이것이다 :
<LABEL ACCESSKEY=U CLASS=filelabel>Upload a file to current older:
<INPUT TYPE="file" NAME="eftupload" CLASS=filefield/></LABEL>
<INPUT TYPE="submit" value="Upload" CLASS=submitbutton>
다음과 같이 내가 코드를 관리하신 VBA 지금까지입니다 (난 여전히 다양한 일하고 나는 알고 지저분한 조금 방법은 내가 사용하려고 웹 요소가 "내 URL 2"에 위치)는 작업을 진행합니다 :
Sub File2Web()
'dimension (declare or set aside memory for) our variables
Dim objIE As InternetExplorer 'special object variable representing the IE browser
Dim aEle As HTMLLinkElement 'special object variable for an <a> (link) element
'initiating a new instance of Internet Explorer and asigning it to objIE
Set objIE = New InternetExplorer
'make IE browser visible (False would allow IE to run in the background)
objIE.Visible = True
'navigate IE to this web page (a pretty neat search engine really)
objIE.Navigate "my URL"
'wait here a few seconds while the browser is busy
Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
'in the userid box put value
objIE.Document.getElementById("username").Value = "userID"
'in the password box put value
objIE.Document.getElementById("password").Value = "PassWD"
'click the 'go' button
objIE.Document.getElementById("loginSubmit").Click
'wait again for the browser
Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
'navigate IE to this web page
'Upload file using input type=file
Dim sFormData As String, d As String
Dim FileName As String, FieldName As String
FieldName = "File"
FileName = "C:\FTP Temp\Test.txt"
'Boundary of fields. Be sure this string is Not In the source file
Const Boundary As String = ""
'Get source file As a string.
sFormData = GetFile(FileName)
FieldName = "frmUpload"
'Build source form with file contents
d = d + "Content-Disposition: form-data; name=""" + FieldName + """;"
d = d + " filename=""" + FileName + """" + vbCrLf
d = d + "Content-Type: application/upload" + vbCrLf + vbCrLf
d = d + sFormData
d = d + vbCrLf
Dim URL As String, FormData As String
FormData = d
Dim bFormData() As Byte
ReDim bFormData(Len(FormData) - 1)
bFormData = StrConv(FormData, vbFromUnicode)
URL = "my URL 2"
objIE.Navigate URL, , , bFormData, "Content-Type: multipart/form-data; boundary=" + vbCrLf
'wait here a few seconds while the browser is busy
Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
End Sub
'read binary file As a string value
Function GetFile(FileName As String) As String
Dim FileContents() As Byte, FileNumber As Integer
ReDim FileContents(FileLen(FileName) - 1)
FileNumber = FreeFile
Open FileName For Binary As FileNumber
Get FileNumber, , FileContents
Close FileNumber
GetFile = StrConv(FileContents, vbUnicode)
End Function
모든 파일로드에서 떨어져 작동합니다. 그것이 실행되면, 그것은 단지 화면을 찾을 수없는 웹 페이지로 이동 끝나고 파일이 업로드되지 않지만 VBA 오류 등을 전혀 얻지 못합니다.
어떤 도움을 주시면 감사하겠습니다. 네트워크, 응용 프로그램 및 기타 작업 제한으로 인해 파일을 업로드 할 수있는 다른 방법이 없으므로이 페이지/양식과 상호 작용해야합니다.
편집 : 전체 페이지 코드는 다음과 같다 ...
<html>
<head><title>sftp.mysite.com</title>
<link href="/EFTClient/efthtmladvanced.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/EFTClient/efthtmladvanced.js">
</script>
<script type="text/javascript" src="/EFTClient/Shared/PTCs.js">
</script>
</head>
<body onload="javascript:init();"><div class=header><H1 CLASS=cwd>sftp.mysite.com - /Input/Applications/UKC Apps/</H1></div>
<h3><i>NOTE: Web Transfer Client Access has been disabled for this user or container. Reverting to basic client.</i></h3>
<hr />
<FORM NAME="frmUpload" METHOD="POST" ACTION="/Input/Applications/UKC Apps/" ENCTYPE="multipart/form-data"><table border=0 width='90%'>
<tr>
<td width='70%'>
<LABEL ACCESSKEY=U CLASS=filelabel>Upload a file to current folder: <INPUT TYPE="file" NAME="eftupload" CLASS=filefield/></LABEL>
<INPUT TYPE="submit" value="Upload" CLASS=submitbutton>
</td>
<td width='30%' align='right'>
<INPUT TYPE='button' value='Change Password' onclick="setChangePassDivPosition();showDiv('ChangePass', true);">
<INPUT style="visibility:visible;valign='top';" TYPE='button' value='Log Out' onclick='doLogout(); window.location.reload(true); return false;'>
</td>
</tr>
</table>
</FORM><hr />
<pre>
<a href="/Input/Applications/;html">[To Parent Directory]</a><br><br>
<input type="button" value="Delete" name="btnDelete" id="btnDelete" onClick="javascript:deleteFiles();"><BR>
<input type='checkbox' name='folderitem' value="/Input/Applications/UKC Apps/my file.txt" id='1'> <a href='javascript:void(0);' onclick="rename('/Input/Applications/UKC Apps/my file.txt');">Rename</a> 18 Dec 2017 14:02 56955145 <a href="/Input/Applications/UKC Apps/myfile.txt;html">my file.txt</a><BR>
</pre><hr>
<form name="changePassForm" id="changePassForm" method="post"><div id="ChangePass" class="floatingDiv" style="{ visibility:hidden; }"><table cellpadding="5" cellspacing="0" width="100%" style="border:1px solid black; border-bottom:0px"><tr class="divHeader"><td><table cellpadding=0 cellspacing=0 width="100%%"><tr><td class="formCopy"><b>Change Password</b></td><td class="formCopy" align="right"><a title="Click here to close this dialog" href="javascript:void(0)" onclick="showDiv('ChangePass', false);" style="font-family:verdana; font-size:10px; color:black; text-decoration:none">X</a></td></tr></table></td></tr></table><table cellpadding="5" cellspacing="0" width="100%%" style="border:1px solid black;"><tr><td class="formCopy">Current Password:</td><td class="formCopy"><input type="password" value="" name="oldpass" id="oldpass"></td></tr><tr><td class="formCopy">New Password:</td><td class="formCopy"><input type="password" value="" name="newpass" id="newpass"></td></tr><tr><td class="formCopy">Confirm Password:</td><td class="formCopy"><input type="password" value="" name="confirmpass" id="confirmpass"></td></tr><tr><td class="formCopy"> </td><td class="formCopy"> </td></tr></table><table cellpadding="5" cellspacing="0" style="border:1px solid black; border-top:2px solid #aaaaaa;" class="divHeader" width="100%%"><tr><td colspan="2" align="right"><input type="button" value="Change Password" onclick="changePassword(this.form);"> <input type="button" value="Cancel" onclick="showDiv('ChangePass', false);"></td></tr></table></div></form><br /><br />
<center><font face="arial" size="1" color=#3366CC><em>Powered by the <b>Globalscape EFT Server</b></em></font></center>
<br />
</body>
</html>
나는 그 웹 페이지에 업로드를 위해 파일을 준비 할 프론트 엔드가있을 것이라고 생각합니다. 아마도 DOM 요소 조작으로 인해 실행되지 않는 자바 스크립트 이벤트 일 수 있습니다. 내 추측이 될 정도로 심오하지 않고 ... 일반적으로 예를 들어 마우스 클릭 이벤트로 인해 발생합니까? 이걸 가지고 갈 누군가가 도와 줄 수있을 때까지 조사해 봐야합니다. (너무 바빠서 두려워요.) –
웹 페이지에서 요소를 클릭하면 자동으로 파일 브라우저 창이 열리고 파일을 선택하면 상자를 채 웁니다 (그러나 뒤로 클릭하고 수동으로 아무 것도 입력 할 수 없음). 그런 다음 제출 버튼을 눌러야하고 파일이로드되고 pafe가 새로 고침됩니다. 아마 전체 페이지 코드를 추가하여 도움을 줄 것입니다. –
이 주제에 대한 전문가는 아니지만이 링크는 https://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data에서 'multipart/폼 데이터 '폼은 폼 데이터에 경계 (vbCrlf)를 포함 할 수 없습니다. 나는 당신이 변수'd'에 vbCrlf를 포함시킨 것을 보았습니다. 아마도 그게 문제입니까? 할 수 없을 때 경계를 포함 시켰습니까? –