Нажмите «Сохранить как» в IE, используя Excel VBA - PullRequest
0 голосов
/ 14 марта 2020

У меня есть следующий код для хранения списка ссылок:

Dim allHREFs As New Collection
Dim TableName As String

    For iRow = 0 To 20
        TableName = "docTypeForm:documentTbl:" & iRow & ":j_idt250"
        On Error GoTo DownloadFiles
        Set allLinks = obJIE.Document.getElementById(TableName).getElementsByTagName("a")
            For Each link In allLinks
                allHREFs.Add link.href
            Next link
    Next iRow

DownloadFiles:
    For j = 1 To allHREFs.Count
        obJIE.Navigate Url + allHREFs(j)
        'Application.Wait (Now + TimeValue("0:00:04"))
   Download_default
    Next

Я ищу много сайтов, и они всегда приводят к одному и тому же коду. Я до момента, когда файл должен быть загружен через всплывающее окно, которое вы получаете (в IE). Желательно «сохранить как», чтобы сохранить в нужной папке. Для кода ниже я получаю ошибку на hWnd = find window. Ошибка, которая у меня есть, это подфункция не определена. Я чувствую, что это как-то связано с LongPtr, но когда я ищу его, похоже, что оно должно работать. Любые предложения об этой ошибке? Или, может быть, другой способ сохранить или загрузить файлы по ссылке href?

Private Sub Download_Default()

    Dim AutomationObj As IUIAutomation
    Dim WindowElement As IUIAutomationElement
    Dim Button As IUIAutomationElement
    Dim hWnd As LongPtr

    Set AutomationObj = New CUIAutomation

    Do While oBrowser.Busy Or oBrowser.readyState <> 4: DoEvents: Loop
    Application.Wait (Now + TimeValue("0:00:05"))
    hWnd = oBrowser.hWnd
    hWnd = FindWindowEx(hWnd, 0, "Frame Notification Bar", vbNullString)
    If hWnd = 0 Then Exit Sub

    Set WindowElement = AutomationObj.ElementFromHandle(ByVal hWnd)
    Dim iCnd As IUIAutomationCondition
    Set iCnd = AutomationObj.CreatePropertyCondition(UIA_NamePropertyId, "Save")

    Set Button = WindowElement.FindFirst(TreeScope_Subtree, iCnd)
    Dim InvokePattern As IUIAutomationInvokePattern
    Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
    InvokePattern.Invoke

End Sub

Обновление: я пытался скопировать вставить ссылки в Google chrome, потому что он будет загружаться автоматически при нажатии на ссылку, но это тоже не работает. Открывается chrome, но сервер недоступен.

1 Ответ

1 голос
/ 15 марта 2020

Вы включили определения API?

Для использования FindWindowEx

Public Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Long, _
    ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
в модуле должна быть указана следующая строка
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...