Используя 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>
Обычно я бы не рекомендовал регулярное выражение для синтаксического анализа веб-страницы, но то, что вы хотите, настолько специфично, что это может быть наиболее эффективным способом. Предполагая, что будет только один "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