2014-12-11 3 views
2

Я пытаюсь загрузить полную веб-страницу. Другими словами автоматизировать этот процесс:VBA Excel Загрузить веб-страницу полностью

1- Откройте веб-страницу 2- Нажмите на Сохранить как 3- Выберите Complete 4 Закройте веб-страницу.

Это то, что я получил до сих пор:

URL = "google.com" 'for TEST 
Dim IE 
Set IE = CreateObject("Internetexplorer.Application") 
IE.Visible = False 
IE.Navigate URL 
Do 
Loop While IE.Busy = True 
Dim i 
Dim Filename 
i = 0 
Filename = "C:\Test.htm" 
IE.Document.ExecCommand "SaveAs", False, Filename 

Когда я запускаю код в последней строке появляется диалоговое окно сохранения файла. Есть ли способ подавить это?

Любая помощь была бы очень признательна.

ответ

0

какдиалоговое cannot be suppressed:

диалоговое окно сохранения документа HTML не может быть подавлено при вызове этого метода из сценария.

Это также модальный диалог, и вы не можете автоматизировать способ щелчка по кнопке «Сохранить». Выполнение VBA приостанавливается во время ожидания ввода пользователем вручную, когда сталкивается с диалогом такого типа.

Вместо того, чтобы использовать метод IE.Document.ExecCommand, вы можете попробовать прочитать HTML-код страницы и распечатать его в файл с помощью стандартных функций ввода-вывода.

Option Explicit 
Sub SaveHTML() 
Dim URL as String 
Dim IE as Object 
Dim i as Long 
Dim FileName as String 
Dim FF as Integer 

URL = "http://google.com" 'for TEST 
Filename = "C:\Test.htm" 

Set IE = CreateObject("Internetexplorer.Application") 
IE.Visible = True 
IE.Navigate URL 
Do 
Loop While IE.Busy 

'Creates a file as specified 
' this will overwrite an existing file if already exists 
CreateObject("Scripting.FileSystemObject").CreateTextFile FileName 

FF = FreeFile 
Open Filename For Output As #FF 

With IE.Document.Body 
    Print #FF, .OuterHtml & .InnerHtml 
End With 

Close #FF 

IE.Quit 
Set IE = Nothing 
End Sub 

Я не уверен, что это даст вам именно то, что вы хотите, или нет. Существуют и другие способы получения данных из Интернета, и, вероятно, лучше всего получить необработанный HTML-код от XMLHTTP request и распечатать его в файле.

Конечно, редко бывает, что на самом деле нам нужна вся веб-страница в формате HTML, поэтому, если вы ищете, чтобы затем очистить определенные данные с веб-страницы, XMLHTTP и DOM были бы лучшим способом сделать это, и нет необходимости сохранять это в файле вообще.

Или вы можете использовать оболочку Selenium для автоматизации IE, которая намного более надежна, чем использование относительно небольшого количества собственных методов для класса InternetExplorer.Application.

Обратите внимание, что вы используете довольно грубый метод ожидания загрузки веб-страницы (Loop While IE.Busy). Хотя это может работать иногда, это может быть ненадежным. Есть десятки вопросов о том, как сделать это правильно здесь, на SO, поэтому я хотел бы отнести вас к функции поиска здесь, чтобы немного изменить этот код.