使用JavaScript功能自动化网页

时间:2018-11-30 12:32:48

标签: javascript html vba web-scraping

我要自动执行此URL。我的输入为例:

输入框:

افزودن صندوقid="symbolSearch"

افزودن شاخصid="indexSearch"

symbolSearch的一些值:

我搜索کیان,然后点击آوای ثروت کیان-در سهام

我搜索خوارزمی,然后点击مشترك خوارزمي-در سهام

indexSearch的一些值:

我搜索شاخص کل,然后点击شاخص کل

我搜索شاخص کل,然后点击شاخص كل (هم وزن)

如何在VBA中自动执行此操作?

注意:“ symbolSearch”中的每个元素都与具有特定RegNo的共同基金相关联。 this link

中的URL搜索元素
Sub MakeChart()

    Dim appIE As Object
    Set appIE = CreateObject("internetexplorer.application")

    'Get the WebPage Content to HTMLFile Object
    With appIE
        .navigate "http://www.fipiran.ir/AnalysisTools/MFInteractiveChart"
        .Visible = True

        'wait until the page loads
        Do While .Busy Or .readyState <> READYSTATE_COMPLETE
            DoEvents
        Loop
        Application.Wait (Now + TimeValue("00:00:05"))

        For Each cell In Range("C:C")
           If Not IsNumeric(cell) Or cell.Value = "" Or cell.EntireRow.Hidden Then GoTo Next_iteration
           '''
            **' codes to add RegNo in range C:C to webpage **


Next_iteration:
        Next

        .Quit
    End With
    Set appIE = Nothing
End Sub

1 个答案:

答案 0 :(得分:2)

我不确定我是否已完全理解。我可以使用JSON parser从第一个链接解析regNos并将它们存储在数组中。然后,我可以将这些数字合并到XMLHTTP请求URL字符串中,该字符串返回JSON数据,该数据存储在另一个可以解析的数组中。

Option Explicit   
Public Sub GetInfo()
    Dim url As String, json As Object, item As Object, regNos(), responseInfo(), i As Long
    url = "http://www.fipiran.ir/AnalysisTools/MFAutocomplete?term="

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False
        .send
        Set json = JsonConverter.ParseJson(.responseText)

        ReDim regNos(1 To json.Count)
        ReDim responseInfo(1 To json.Count)
        For Each item In json
            i = i + 1
            regNos(i) = item("RegNo")
        Next
        For i = LBound(regNos) To 2  'UBound(regNos)
            .Open "GET", "http://www.fipiran.ir/AnalysisTools/MFHistory?regNo=" & CStr(regNos(i)), False
            .send
            responseInfo(i) = .responseText
            'Application.Wait Now + TimeSerial(0, 0, 1) '< == to avoid being blocked
        Next
    End With
End Sub

responseInfo数组中的示例信息:

enter image description here

jsonconverter.bas添加到项目后,我通过VBE>工具> Microsoft脚本运行时引用添加了引用。