【问题标题】:scrape with excel vba changing input data before scraping在抓取之前用 excel vba 更改输入数据
【发布时间】:2018-01-06 19:22:54
【问题描述】:

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

下面是我的代码:

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

感谢您的帮助

【问题讨论】:

  • 您是否尝试过以下脚本@EddiRae?你有什么反馈?

标签: excel vba web-scraping inputbox


【解决方案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

【讨论】:

  • Shahin,我确实注意到,一旦完成此代码,它会返回主页 (investing.com),然后我才能获取刚刚使用新日期更新的表格。
  • 另外,有没有办法在 IE 不可见的情况下使用 SendKeys?当页面被隐藏时,它似乎用日期而不是网站字段更新代码。
  • 我已经更新了上面的脚本,用于解析新填充的表中的数据。你错了@EddiRae。我检查了自己,根据您在帖子中要求的日期,我确实在我的电子表格中找到了正确的数据。执行上面的脚本,自己看看。至于你的第二个问题:我不知道如何使用 IE invisible 来达到同样的效果。
猜你喜欢
  • 2014-07-12
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多