Использование VBA для извлечения данных из источника функции Javascript

0

Используя VBA, можно ли извлечь только текст функции JavaScript с веб-страницы, подобной той, что приведена ниже?

Я начал использовать.innerText, но меня беспокоит синтаксический анализ огромного количества данных, которые могут быть заполнены на странице выше JavaScript. Я могу выполнить JavaScript, а затем извлечь значение, когда он будет сохранен, но тогда мне нужно иметь дело с окном "Сохранить как". Это внутренняя веб-страница компании, поэтому я не могу предоставить ссылку.

В конце дня все, что мне нужно, это имя файла "save.F1234567890" (они всегда начинаются с "save.F", но цифры меняются каждый раз, когда сайт запускается). Затем я буду использовать функцию filename и URLDownloadToFile для сохранения на моем компьютере, как я успешно использовал в прошлом.

Заранее спасибо!

<input name="stuff" type=HIDDEN value="999" >
<input type=hidden name=orgn value=.>
<SCRIPT LANGUAGE="JavaScript">
function setThis(this)      
 {     
 for (i=0;i<document.forms[0].set_this.length;i++)   
   { 
     if (document.forms[0].set_this[i].checked==true)     
      setthis= document.forms[0].set_this[i].value;     
  }                                      
    if (setthis == 1 )       
        { document.forms[0].filename.value = "save.F1234567890";      
          document.forms[0]._program.value = "download.excel"; }   
      else                                       
        if (setthis == 2 )       
          { document.forms[0].filename.value = "save.MB1234567890";    
            document.forms[0]._program.value = "download.excel"; }    
      else                                       
        if (setthis == 3 )       
           document.forms[0]._program.value = "download.savereport";    

      else                                       
        if (setthis == 4 )       
        { document.forms[0].filename.value = "save.E1234567890";      
           document.forms[0]._program.value = "download.process"; }   

      document.forms[0].submit();       
 }          
</SCRIPT>        
<TABLE BORDER=1>
<tr><td><input name="set_this" type=radio value="3" checked >Save Parameters. <input type=text size=8 name="logon" VALUE="USERNAME"></td></tr>
<tr><td><input name="set_this" type=radio value="1"  >Download data as .CSV file  </td></tr>
<tr><td >  
<input type=button value="Submit" onClick="javascript:setThis(); ">
</td></tr><tr><td >
<input type="button" value="Previous Screen" onClick="history.back()">
</td></tr></table> 
  • 0
    используя VBA? Visual Basic для приложений?
  • 0
    Да. Я запускаю всю автоматизацию с Access 2010.
Показать ещё 3 комментария
Теги:
function

1 ответ

0
Лучший ответ

Обычно я бы не рекомендовал регулярное выражение для синтаксического анализа веб-страницы, но то, что вы хотите, настолько специфично, что это может быть наиболее эффективным способом. Предполагая, что будет только один "save.F", вы можете использовать следующее, чтобы найти строку.

Вы можете добавить библиотеку RegExp в свой проект VBA, нажав "Инструменты" → "Ссылки" и установите флажок "Microsoft VBScript Regular Expressions 5.5".

Public Function GetSaveName(strHTML) As String
    Dim oRegExp As RegExp
    Dim oMatches As MatchCollection
    Dim oMatch As Match

    Set oRegExp = New RegExp
    With oRegExp
        .Global = True
        .Multiline = True
        .IgnoreCase = False
        .Pattern = """save.F[^""]*?"""
        Set oMatches = .Execute(strHTML)
    End With

    Set oMatch = oMatches.Item(0)

    GetSaveName = oMatch.Value
End Function
  • 0
    Предложенный вами ответ сработает, если я потяну innerText веб-страницы и выполню его через вашу функцию. Вы рекомендуете этот метод или другой?
  • 0
    @Mars_Out, есть пара других способов сделать это. Во-первых, используйте HTML DOM, чтобы найти этот конкретный кусок Javascript и выполнить поиск по нему, а не по всей странице. Во-вторых, вы можете даже найти способ запустить его, чтобы получить ваше значение, например, сценарий SHDocVw.InternetExplorer или загрузить внутренний текст тега Script в JScript.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню