如何通过 excel VBA 在 IE11 中浏览 PDF 时单击下载按钮

How to click on the download botton while exploring the PDF in IE11 through excel VBA

子Drop_Down() Dim objIE 作为对象,ele 作为对象,opt 作为对象 设置 objIE = CreateObject("InternetExplorer.Application")

objIE.Visible = True
objIE.navigate "https://isgs-oas.isgs.illinois.edu/reports/rwservlet?oil_permit_activity"

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

Set ele = objIE.document.getElementsByTagName("INPUT")

For Each opt In ele
    If opt.getAttribute("name") = "p_YEAR" Then
        opt.Focus
        opt.Value = "2018"
        Exit For
    End If
Next opt

Set ele = objIE.document.getElementsByTagName("select")

For Each opt In ele
    If opt.getAttribute("name") = "p_MONTH" Then
        opt.Focus
        opt.Value = "January"
        Exit For
    End If
Next opt
objIE.document.forms(0).submit
Do While objIE.Busy: DoEvents: Loop

'请帮忙 '现在要下载PDF文件

结束子

如果您已经知道查询参数的名称,则可以自动构建 URL。我使用 Chrome 的检查器为上面的示例 ("https://isgs-oas.isgs.illinois.edu/reports/rwservlet?hidden_run_parameters=oil_permit_activity&p_MONTH=January&p_YEAR=2018").

找到了 URL

您可以修改脚本以根据参数自动构建 URL,然后使用现有的几个 "save file from URL" 脚本之一。这是我在 SE 上找到的:

希望对您有所帮助:)

我通过遍历月和年并将其转换为字符串来构建 URL,然后将其连接到 URL 的基数。我猜你想从哪一年开始,你会在 "For year =" 声明中看到。

Sub DownloadFile()
Dim WinHttpReq As Object
Dim oStream As Object
Dim myURL As String
Dim LocalFilePath As String
Dim month As String
Dim year As Integer
Dim monthNo As Integer

For year = 2010 To 2018
    For monthNo = 1 To 12
        month = MonthName(monthNo)
            myURL = "https://isgs-oas.isgs.illinois.edu/reports/rwservlet?hidden_run_parameters=oil_permit_activity&p_MONTH=" & month & "&p_YEAR=" & CStr(year)
            LocalFilePath = Environ("USERPROFILE") & "\Desktop\rwservlet\oil_permit_activity_" & month & "_" & CStr(year) & ".pdf"

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

                If WinHttpReq.Status = 200 Then
                    Set oStream = CreateObject("ADODB.Stream")
                    oStream.Open
                    oStream.Type = 1
                    oStream.Write WinHttpReq.responseBody
                    oStream.SaveToFile LocalFilePath, 2 ' 1 = no overwrite, 2 = overwrite
                    oStream.Close
                End If
    Next monthNo
Next year
End Sub

上面的代码对我有用,但你必须确保文件夹 "rwservlet" 存在于你的桌面上,否则它会抛出错误(我不擅长错误处理,但我们所有学习)。否则,您可以更改 LocalFilePath 字符串。