在抓取之前用excel vba改变输入数据

时间:2018-01-06 19:22:54

标签: excel vba web-scraping inputbox

我正在尝试更改网站上的输入字段数据,并在页面上刷新该信息。我已经更新了输入字段,但我不确定如何刷新页面以便内部表使用输入字段中的新数据

以下是我的代码:

Dim IE As InternetExplorer
Dim htmldoc As HTMLDocument
Dim ieURL As String
Dim sPicker As String

ieURL = "https://www.investing.com/commodities/crude-oil-historical-data"

sPicker = "10/01/2017 - 12/31/2017"

'Open InternetExplorer
Set IE = New InternetExplorer
IE.Visible = True

IE.Navigate ieURL

Set htmldoc = IE.document 'Document webpage

' wait until the page loads before doing anything
Do Until (IE.readyState = 4 And Not IE.Busy)
    DoEvents ' DoEvents releases the macro and lets excel do other thing while it waits
Loop

Dim drp As HTMLFormElement
Set drp = htmldoc.getElementById("widgetFieldDateRange")
drp.innerText = sPicker     'Set the new timeframe for scraping

Dim inpt As HTMLInputElement
Set inpt = htmldoc.getElementById("picker")
inpt.Value = sPicker     'Set the new timeframe for scraping

' wait until the page loads before doing anything
Do Until (IE.readyState = 4 And Not IE.Busy)
    DoEvents ' DoEvents releases the macro and lets excel do other thing while it waits
Loop

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

尝试以下脚本。它应该解决这个问题。

Sub Web_Data()

    Dim IE As New InternetExplorer, html As New HTMLDocument
    Dim post As Object, elem As Object, t_data As Object
    Dim trow As Object, tcel As Object

    With IE
        .Visible = True
        .navigate "https://www.investing.com/commodities/crude-oil-historical-data"
        While .readyState < 4: DoEvents: Wend
        Set html = .document
    End With

    Application.Wait Now + TimeValue("00:00:05")

    html.getElementById("widgetFieldDateRange").Click
    Application.Wait Now + TimeValue("00:00:03")

    Set post = html.getElementById("startDate")
    post.innerText = ""
    post.Focus
    Application.SendKeys "10/01/2017"
    Application.Wait Now + TimeValue("00:00:03")

    Set elem = html.getElementById("endDate")
    elem.innerText = ""
    elem.Focus
    Application.SendKeys "12/31/2017"
    Application.Wait Now + TimeValue("00:00:03")

    html.getElementById("applyBtn").Click
    Application.Wait Now + TimeValue("00:00:03")


    Set t_data = html.getElementById("curr_table")

    For Each trow In t_data.Rows
        For Each tcel In trow.Cells
            y = y + 1: Cells(x + 1, y) = tcel.innerText
        Next tcel
        y = 0
        x = x + 1
    Next trow

End Sub

参考添加到库:

1. Microsoft Internet Controls
2. Microsoft HTML Object Library