Загрузка файла данных с веб-страницы в нужное место файла путем «нажатия» на «кнопку» - PullRequest
0 голосов
/ 05 января 2019

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

Я использую приведенный ниже код, однако он сохраняет файл CSV по желаемому пути. Я хочу «щелкнуть» ссылку для скачивания и сохранить файл по указанному пути.

Информация об элементе проверки на веб-странице выглядит следующим образом:

input type="hidden" name="download" value=""

a href="#" onclick="var dl_var = find_control('download'); dl_var.value = '1'; submitFormByPost(dl_var.form); dl_var.value = ''; return false;">
                        <img src="/i/prices_export_excel.gif" height="48" width="48" alt="Download to spreadsheet"><br>
                        download to spreadsheet
                    </a

Я попытался просмотреть ряд различных ссылок, однако ни одна из них, похоже, не имеет решения. Мой код ниже.

Sub DownloadFile()

Dim myURL As String
myURL = "https://YourWebSite.com/?your_query_parameters"

Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", myURL, False, "username", "password"
WinHttpReq.send

myURL = WinHttpReq.responseBody
If WinHttpReq.Status = 200 Then
    Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 1
    oStream.Write WinHttpReq.responseBody
    oStream.SaveToFile "C:\file.csv", 2 ' 1 = no overwrite, 2 =          overwrite
    oStream.Close
End If

End Sub`

Вместо сохранения страницы я хочу скачать файл по желаемому пути к файлу.

Ответы [ 2 ]

0 голосов
/ 31 января 2019
</td>
            <td>
            <table width=100%>
            <tr>
                            <td style="width:20px;"></td>

            <td align="center" width="100">
                <input type="hidden" name="download" value="" />
                <a href="#" onclick="var dl_var = find_control('download'); dl_var.value = '1'; submitFormByPost(dl_var.form); dl_var.value = ''; return false;">
                    <img src="/i/prices_export_excel.gif" height="48" width="48" alt="Download to spreadsheet" /><br />
                    download to spreadsheet
                </a>
            </td>

                            <td style="width:20px;"></td>

            <td align="center" width="100">
                <a href="#" onclick="graph_print(AmCharts.getExport(jQuery('#amcharts2_container').get(0))[0]); return false;">
                    <img src="/i/prices_graph_print.gif" height="48" width="51" alt="Print graph" /><br />
                    print graph
                </a>
            </td>

            <td style="width:20px;"></td>

            <td align="center" width="100">
                <a href="#" onclick="graph_download(AmCharts.getExport(jQuery('#amcharts2_container').get(0))[0]); return false;">
                    <img src="/i/prices_export_image.gif" height="48" width="51" alt="Export image" /><br />
                    export image
                </a>
            </td>
                            </tr>
                            </table>
            </td>
        </tr>
    </table>



    <div id="amcharts2_container" style="z-index: -1; width: 780px; height: 550px;"></div>
            <script type="text/javascript">                 
        AmCharts.ready(function(){
0 голосов
/ 05 января 2019

У меня есть собственное решение для загрузки файла с веб-страницы и работает.

  1. ссылка (выбрать): Microsoft Internet Controls, библиотека объектов Microsoft HTML

пример моего кода

Dim htmlDoc As HTMLDocument ' global variable
Dim myHtmlElement As IHTMLElement 'global variable
Sub test()
Dim dominio As String

dominio = "your url"

Dim ie As InternetExplorer

Set ie = New InternetExplorer
ie.Visible = True
ie.navigate dominio

'Do
'DoEvents
'Loop Until ie.readyState = READYSTATE_COMPLETE
Do While ie.Busy
        Application.Wait DateAdd("s", 1, Now)
    Loop

    Set htmlDoc = ie.document

    Call ie.document.getElementById("tag_id_username").setAttribute("value", "your username")
    Call ie.document.getElementById("tag_id_password").setAttribute("value", "your password")

ie.document.getElementById("loginForm").Click 'button login

While ie.readyState <> READYSTATE_COMPLETE
    DoEvents
Wend

Call ie.document.getElementById("link_document_download").Click 

Do While ie.Busy
        Application.Wait DateAdd("s", 1, Now)
    Loop

Application.SendKeys "%{S}" ' download the file when is open the pop up

Set ie = Nothing

End Sub

Это решение требует, чтобы вы держали браузер открытым и сфокусированным, иначе application.SendKeys "{S}" не будет работать. Если у вас нет тега id, вы можете использовать имя класса (Set element = ie.Document.querySelector(".classname")) ...

Этот файл находится в папке загрузки (по умолчанию). Вы можете прочитать этот пост, как изменить путь .. Как изменить путь к файлу рабочей книги в VBA?

Надеюсь, это поможет

РЕДАКТИРОВАТЬ ПОСТ ПОСЛЕ ВАШЕГО КОММЕНТАРИЯ

не забудьте добавить эту ссылку

enter image description here

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

Sub test()

Dim dominio, value As String
Dim myInput As Object

dominio = "https://www.steelbb.com"

Dim ie As InternetExplorer

Set ie = New InternetExplorer
ie.Visible = True
ie.navigate dominio

Do While ie.Busy
        Application.Wait DateAdd("s", 1, Now)
    Loop

For Each myInput In ie.document.getElementsByTagName("input") 'Cells
    If myInput.Name = "username" Then
        Call myInput.setAttribute("value", "write your username")

    ElseIf myInput.Name = "password" Then
        Call myInput.setAttribute("value", "write your password")

    ElseIf myInput.Name = "doLogin" Then
        'Application.Wait DateAdd("s", 1, Now)
        Call myInput.Click
    End If
Next myInput

'Add next code after login


Set ie = Nothing

End Sub

Второй РЕДАКТИРОВАТЬ

ЕСЛИ приведенный выше код работает для вас, добавьте этот код после комментария 'Добавить следующий код после входа в систему '---------------------- скачать файл

'Add next code after login
Do While ie.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

For Each myInput In ie.document.getElementsByTagName("a")
    If myInput.href = "#" And myInput.onclick = "var dl_var = find_control('download'); dl_var.value = '1'; submitFormByPost(dl_var.form); dl_var.value = ''; return false;" Then
       myInput.Click
       ' wait 2 seconds we give the time to load the file and only when there is the pop up we can click save button
       Application.Wait DateAdd("s", 2, Now)
       ' download the file when is open the pop up
       Application.SendKeys "%{S}"
       Exit For
    End If
Next myInput

Set ie = Nothing

End Sub

Я попробовал этот код с вашей входной информацией, присутствующей в вашем сообщении

В ПОЧТУ

Информация об элементе проверки на веб-странице выглядит следующим образом:

input type = "hidden" name = "download" value = ""

a href = "#" onclick = "var dl_var = find_control ('download'); dl_var.value = '1'; submitFormByPost (dl_var.form); dl_var.value = ''; вернуть ложь; ">
скачать в электронную таблицу

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