从Internet页面的下拉列表中选择

时间:2019-01-09 16:16:16

标签: vba web-scraping drop-down-menu

ı是新的vba,在这里。我正在做股票,我需要您的帮助。 所以首先,正如您在标题上所看到的,我想在下拉列表中自动选择我在Excel中写的内容。因此,我需要从此网站website中的“MALİTABLOLAR”页面中获得摊销信息。土耳其语中的摊销是amortisman,它是页面的末尾。 ı可以只进入“马里语”页面,而ı不能从下拉列表中选择日期。

Sub Düğme2_Tıkla()
sirketismi = Range("A2")

昏暗即作为新的InternetExplorer     即可见=真     ie.navigate(“ https://www.isyatirim.com.tr/tr-tr/analiz/hisse/Sayfalar/sirket-karti.aspx?hisse=”&sirketismi)

Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE

Dim doc As HTMLDocument
Set doc = ie.document

Do Until Not ie.Busy
DoEvents
Loop
ie.document.all("page-4").Click
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE





End Sub

html code image  my excel link

在缩影中,我将写入a2单元,并且此宏将采用正确的日期进行摊销。 对不起,英语不好。 我希望你能理解我 谢谢你的帮助

3 个答案:

答案 0 :(得分:1)

您可以避免打开浏览器并使用更快的方法。这些页面构造了一个查询字符串,该字符串在xhr requests中用于更新表值。响应是您可以解析的json。例如,按如下所示设置左右下拉菜单,您可以在“网络”标签中查看xhr

enter image description here

查询字符串参数示例:

enter image description here

左侧的下拉列表生成:

https://www.isyatirim.com.tr/layouts/15/IsYatirim.Website/Common/Data.aspx/MaliTabloShortTable?companyCode=EGEEN&exchange=TRY&year1=2018&period1=6&=1547055336791

权利产生:

https://www.isyatirim.com.tr/layouts/15/IsYatirim.Website/Common/Data.aspx/MaliTabloShortTable?companyCode=EGEEN&exchange=TRY&year1=2018&period1=3&=1547055336792

请注意,币种由(mn $mn TL)定义:

exchange: USDexchange=TRY

使用JSONConverter.bas解析json,然后将.bas添加到项目以及通过vbe>工具>引用> Microsoft Scripting Runtime进行引用,您可以从JSON解析出值。还需要引用Microsoft HTML Object Library

例如第一个网址的 json响应


VBA:

Option Explicit   
Public Sub GetInfo()
    Dim html As HTMLDocument, col As Collection
    Set html = New HTMLDocument: Set col = New Collection
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.isyatirim.com.tr/_layouts/15/IsYatirim.Website/Common/Data.aspx/MaliTabloShortTable?companyCode=EGEEN&exchange=TRY&year1=2018&period1=6&_=1547055336791", False
        .send
         col.Add JsonConverter.ParseJson(.responseText)("value")
        .Open "GET", "https://www.isyatirim.com.tr/_layouts/15/IsYatirim.Website/Common/Data.aspx/MaliTabloShortTable?companyCode=EGEEN&exchange=TRY&year1=2018&period1=3&_=1547055336792", False
        .send
        col.Add JsonConverter.ParseJson(.responseText)("value")
    End With
    EmptyDict col
End Sub

Public Sub EmptyDict(ByVal col As Object)
    Dim item As Object, item2 As Object
    For Each item In col
       For Each item2 In item
        Debug.Print item2("KT_TANIMI"), item2("value1")
       Next
    Next
End Sub

输出:

答案 1 :(得分:0)

ı用`

做到了

Set HTMLdoc = ie.document
    Set evtChange = HTMLdoc.createEvent("HTMLEvents")
    evtChange.initEvent "change", True, False
    Set selectElement = HTMLdoc.getElementById("ddlMaliTabloDonem1")
     selectElement.Value = Range("B2")
     selectElement.dispatchEvent evtChange`

它现在可以工作,但现在还有另一个问题:D

我想获取数据“ amortisman giderleri”,但我不知道我怎么能从td获取数据(没有java pls:D)

https://hizliresim.com/nQEN6a

答案 2 :(得分:0)

有效

For i = 0 To ie.document.getElementsByTagName("td").Length - 1
If ie.document.getElementsByTagName("td")(i).innerText = "Amortisman Giderleri" Then
result = ie.document.getElementsByTagName("td")(i + 1).innerText
Range("B11").Value = result
End If
Next i