Идентификация кнопки HTML с VBA - PullRequest
0 голосов
/ 28 января 2020

я пишу макрос, чтобы попытаться автоматизировать очень утомительное ежемесячное задание, оно включает в себя вход на веб-сайт, загрузку файла CSV, а затем некоторую очистку и перегруппировку перед загрузкой его в базу данных.

Я застрял в одной очень специфической c части процесса и перепробовали несколько решений, но не могут заставить его работать, определенно определяя и нажимая кнопку, которая создает файл загрузки,

Это HTML для кнопки Мне нужно получить доступ -

<button class="btn btn-primary btn-xs" type="button" data-toggle="modal" data-target="#download_modal" data-licenceno="33872" data-dfname="Care &amp; Nursing Homes Master" data-dfid="1001">Create a new file containing all records</button>

Это то, что у меня есть, оно работает до тех пор, пока для каждого l oop в подпрограмме загрузки файла, в настоящее время я просто пытаюсь определить кнопку так, Я могу щелкнуть по нему, но он ничего не идентифицирует с этим классом, несмотря на то, что имя класса точно скопировано из HTML, никаких ошибок, но также ничего не записывается в непосредственное окно, я не могу найти какой-либо способ доступа к кнопке поэтому любая помощь будет оценена.

Option Explicit
Sub Opensite()
'open caredata URL and login
    Dim IEapp As Object, WebURL As String, HTMLdoc As HTMLDocument
        Set IEapp = CreateObject("InternetExplorer.Application")
        WebURL = "URL"
    With IEapp
        .silent = True
        .Visible = True
        .Navigate WebURL
        Do Until IEapp.readyState = 4
            DoEvents
        Loop
        Set HTMLdoc = IEapp.document
    End With
    With HTMLdoc.forms(0)
        .UserName.Value = "myusername"
        .Password.Value = "mypassword"
        .btn_signin.Click
    End With
    downloadfile IEapp, HTMLdoc
End Sub
Private Sub downloadfile(IE As Object, HTML_doc As HTMLDocument)
'download CSV file
    Dim o As Object, i As Object
    Do Until IE.readyState = 4
        DoEvents
    Loop
    Set o = IE.document.getElementsByClassName("btn btn-primary btn-xs")
    For Each i In o
        Debug.Print i.innerHTML
    Next i
End Sub

1 Ответ

0 голосов
/ 28 января 2020

То, что происходит, это то, что IE висит на нагрузке, а затем ваш o устанавливается в ничто. Когда вы проходите через него, вы даете ему время для загрузки, но когда он работает автоматически, он не может позволить себе роскошь разницы во времени. Даже если вы ожидаете правильный тип ответа, он по-прежнему загружается в какой-то бэкэнд-контент.

Вы по-прежнему можете использовать приложение IE для нажатия кнопок и входа в систему, но см. этот ответ , чтобы узнать, как лучше всего получить свой внутренний HTML, как только вы Вы вошли в систему.

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