【发布时间】:2020-11-18 18:10:38
【问题描述】:
我正在尝试使用 VBA 在 html 中获取与会话“T”有关的一些数据。有两种方法可以做到这一点:
- 从“交易时段”下的下拉列表中选择“T”
- 点击标题“Session”并对数据进行排序
下面是代码,不起作用
Dim ie As Object
Dim dropdown As Object
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.navigate "https://www.sgx.com/derivatives/delayed-prices-futures?cc=AJ&category=fx"
Do Until ie.readyState = 4: DoEvents: Loop
Set dropdown = ie.Document.getElementsByClassName("sgx-input-control sgx-input-select-filter")(2)
dropdown.Focus
dropdown.selectedIndex = 1 *'Error Msg "Object doesn't support this property or method"*
dropdown.FireEvent ("onchange")
ie.Quit
另外,我还尝试了方法2,使用以下几行,但没有任何反应(列表未排序但也没有错误):
ie.Document.getElementsByClassName("sgx-table-header-wrapper")(0).Click
我是编码新手,如果有人能帮助我,我将不胜感激。谢谢。
【问题讨论】:
-
您尝试设置值的元素是只读的。它也不是实际的选择下拉菜单。因此无法设置其值或触发更改事件。当用户单击该元素时,它有一个 css 类 isactive,但源代码中没有 HTML 代码。因此,由于这个原因,很难从下拉列表中选择 T 并更新数据。如果可能的话,请尝试使用 VBA 代码单击一次向下箭头对 T 值数据进行排序。
-
谢谢您的解释,我尝试使用VBA点击向下箭头对T值数据进行排序,但是点击标题时没有任何反应。
-
很难对网站上的表格进行排序。如果您尝试复制表格数据,则可以先复制,然后在将数据粘贴到 Excel 后对数据进行排序。这可以解决上述问题。
-
网页只允许下载前 26 行,我将数据粘贴到 Excel 后排序意味着我只会得到 13 行有用的数据(因为我不需要 T+1)这不是对我来说够多的了。因此,我需要在下载数据之前进行排序。我尝试使用 Chrome 而不是 IE 来使用以下代码对数据进行排序:
ie.FindElementByClass("sgx-table-header-sort-button").Click。效果很好,但是我在 Excel 中刮取行和列中的数据时遇到了问题。 -
我建议尝试使用 Selenium Web 驱动程序进行测试。然后尝试单击向下箭头对数据进行排序。看看它是否工作。 selenium.dev/documentation/en/webdriver
标签: excel vba internet-explorer automation dropdown