我想将网页(http://www.debentures.com.br/exploreosnd/consultaadados/sndemumclique/)中的一些数据下载到Excel电子表格中。
加载此页面后,我必须从“CódigadoAtivo”下拉列表中手动选择一个选项,然后选择“议程”。
有没有办法可以通过VBA自动完成?
例如:从“CódigadoAtivo”下拉列表中选择“RDVT11”,选择“议程”,然后从页面底部显示的表中下载数据?
到目前为止我的宏:
Private Sub Agenda()
Sheets("Dados").Select
Dim ProductionAddress As String
ProductionAddress = "http://www.debentures.com.br/exploreosnd/consultaadados/sndemumclique/x_pu_historico_r.aspx?"
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Silent = True
.Visible = True
.Navigate ProductionAddress
End With
While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend
ie.document.getElementByid("ctl00_ddlAti").Value = "RDVT11|11001110111100001"
While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend
Set objButton = ie.document.getElementByid("ctl00_x_agenda_r")
objButton.Focus
objButton.Click
While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend
ie.Quit
Set ie = Nothing
End Sub
答案 0 :(得分:0)
您需要捕获浏览器在下拉列表激活时发送的请求。打开Chrome开发工具并观看网络标签。您将看到sndemumclique/
的POST请求。这将有一些标题和表单数据。您的代码需要基本上复制此请求。可能,并非所有的标题和表单字段都是必需的,但如果不尝试就无法知道。
答案 1 :(得分:0)
以下是全部3部分。做两个选择并将表格写入表格。
备注:强>
①首选:
要进行RDVT11
选择,我首先使用下拉列表的Id
来捕获变量中的元素:
Set a = .document.getElementById("ctl00_ddlAti")
接下来,我循环下拉选项,使用a.getElementsByTagName("Option")
生成我循环的集合。找到目标选择文本后,我将该选项设置为Selected
并退出循环。
For Each currentOption In a.getElementsByTagName("Option")
If InStr(currentOption.innerText, optionText) > 0 Then
currentOption.Selected = True
Exit For
End If
Next currentOption
②选择议程:
然后我将agenda
的{{1}}选项定位到其Sobre e emissão
和id
,然后等待刷新页面:
click
③获取表格并写入工作表:
然后我定位由.document.getElementById("ctl00_x_agenda_r").Click
While .Busy Or .readyState < 4: DoEvents: Wend
加载的表。这是在循环内完成的,以确保表存在:
id
我最后,循环表格中的行和列,写出Do: On Error Resume Next: Set nTable = .document.getElementById("aGENDA"): On Error GoTo 0: DoEvents: Loop While nTable Is Nothing
。
<强>代码:强>
Activesheet
页面上的数据(示例)
代码输出(示例):