Я работаю над автоматизацией процесса загрузки нескольких файлов на сайт.Для этого пользователь должен нажать на кнопку «Обзор», выбрать файл и нажать «Открыть».
То же самое я пытаюсь повторить, используя VBA и VBS, с того момента, как поле «Выбрать файл для загрузки»появляется, код VBA застрял Итак, используя VBA, я создаю файл VBS, который запускается до появления окна загрузки файла, добавляет имя файла в поле ввода и затем нажимает ENTER
Public Sub CompleteUploadThread(ByVal fName As String)
Dim strScript As String, sFileName As String, wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
'---Create VBscript String---
strScript = "WScript.Sleep 1500" & vbCrLf & _
"Dim wsh" & vbCrLf & _
"Set wsh = CreateObject(""WScript.Shell"")" & vbCrLf & _
"wsh.SendKeys """ & Trim(fName) & """" & vbCrLf & _
"WScript.Sleep 500" & vbCrLf & _
"wsh.SendKeys ""{ENTER}""" & vbCrLf & _
"WScript.Sleep 500" & vbCrLf & _
"Set wsh = Nothing"
'---Save the VBscript String to file---
sFileName = Application.ActiveWorkbook.path & "\Authorized\zz_automation.vbs"
Open sFileName For Output As #1
Print #1, strScript
Close #1
'---Execute the VBscript file asynchronously---
wsh.run """" & sFileName & """"
Set wsh = Nothing
End Sub
Все работает довставив имя файла, нажмите «Открыть» и закройте диалоговое окно.Как только диалоговое окно закрыто, VBA необходимо нажать кнопку Продолжить , которая должна запустить процесс загрузки. После нажатия кнопки Продолжить вставленный текст исчезает и ничего не загружается
Если ясделайте тот же процесс вручную, он будет работать, так что я думаю, это должно быть связано с тем, что Sendkeys делает что-то странное
Может кто-нибудь помочь мне разобраться?
Ниже, пожалуйста, найдите частьVBA, где я использую функцию, упомянутую выше:
CompleteUploadThread el
'el is the filename and path
'click on the Browse button
Call Doc.parentWindow.execScript("document.getElementsByName('filename')[0].click();", "JavaScript")
Dim oHTML_Element As HTMLDDElement
For Each oHTML_Element In Doc.getElementsByTagName("input")
If oHTML_Element.Type = "submit" Then oHTML_Element.Click: Exit For
Next
Полный источник страницы:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>File Upload</title>
<h3>File Upload</h3>
<div class="indent20">
<form method="post"
action="process_upload_case.jsp"
name="dform"
enctype="multipart/form-data"
onsubmit="return checkForm();">
<input type="hidden" name="action" value="eoEata" />
<input type="hidden" name="n" value="99999999" />
<input type="hidden" name="appid" value="999" />
<table class="boundedForm alignTop">
<tr>
<th>Case</th>
<td>14792562</td>
</tr>
<tr>
<th>File Description<br/></th>
<td><textarea name="comments" rows="5" cols="40" style="width:350px;"></textarea></td>
</tr>
<tr>
<th>Select File</th>
<td><input type="file" name="filename" size="45" multiple /></td>
</tr>
<tr>
<td colspan="2">
<br/><br/>
<input type="submit" value="Continue" />
<input type="button" value="Cancel" onclick="reset(); window.close();" />
</td>
</tr>
</table>
</form>
</div>
<script type="text/javascript">
<!--
function checkForm()
{
var f = document.dform;
var ret = true;
if (f.filename.value == '')
{
alert('Error: No file selected.');
ret = false;
}
if (f.comments.value.length > 500 )
{
alert('Error: Description too long.' );
ret = false;
}
return(ret);
}
function reset()
{
var f = document.dform;
f.filename.value = '';
f.comments.value = '';
return true;
}
-->
</script>