Скрипт VBA + VBS SendKey - PullRequest
       19

Скрипт VBA + VBS SendKey

0 голосов
/ 05 марта 2019

Я работаю над автоматизацией процесса загрузки нескольких файлов на сайт.Для этого пользователь должен нажать на кнопку «Обзор», выбрать файл и нажать «Открыть».

То же самое я пытаюсь повторить, используя 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>

1 Ответ

0 голосов
/ 05 марта 2019

Когда вы нажимаете кнопку "отправить", возможно, вам также нужно вызвать несколько js или fireevent?Трудно сказать, не видя источник страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...