通过excel vba从excel给一个html输入框赋值
Posted
技术标签:
【中文标题】通过excel vba从excel给一个html输入框赋值【英文标题】:Assign a value from excel to a html input box through excel vba 【发布时间】:2020-02-06 17:39:29 【问题描述】:我在 Excel 表(A 列)中有一些来自债券的 ISIN 代码。我想从网站https://www.moodys.com
中找到相应的评级。
由于这应该定期完成,我想通过 Excel VBA 自动执行此过程。
该网站没有使用任何 ID,所以我不能使用 getElementById
。
我尝试通过getElementsByClassName
使用,但这不起作用。我也不确定“search-widget”是否是正确的类名。
错误信息是:
对象不支持此属性或方法(错误 438)
Sub SearchBot()
Dim objIE As InternetExplorer 'special object variable representing the IE browser
Nbr = ThisWorkbook.Sheets("Sheet1").Cells(1, 1).End(xlDown).Row - 1
With Worksheets("Sheet1").Range(Cells(2, 2), Cells(100000, 6))
.ClearContents
End With
For i = 1 To 1 'Nbr
'initiating a new instance of Internet Explorer and asigning it to objIE
Set objIE = New InternetExplorer
'make IE browser visible (False would allow IE to run in the background)
objIE.Visible = True
'navigate IE to this web page (a pretty neat search engine really)
objIE.navigate "https://www.moodys.com"
'wait here a few seconds while the browser is busy
Application.Wait (Now + TimeValue("00:00:04"))
'Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
Do
DoEvents
Loop Until objIE.readyState = 4
objIE.document.getElementsByClassName("search-widget").Value = Sheets("Sheet1").Range("A" & i + 1).Value
...
【问题讨论】:
【参考方案1】:getElementsByClassName
方法返回一个包含具有该类名的所有元素的数组,即使这只是一个元素。所以如果你知道它是第一个也是唯一一个具有该类名的元素,你可以使用getElementsByClassName("search-widget")(0).Value
此外,您可以通过检查页面 html 找到正确的类名。在 chrome 中,您可以通过右键单击元素并按“检查”来执行此操作。顺便说一下,我在网站上看到的唯一搜索栏有“typeahead search-box-input left”作为类名。
【讨论】:
您好亚历克斯,感谢您的快速回复。实际上,如果我输入 objIE.document.getElementsByClassName("typeahead search-box-input left")(0).Value = "something" 那么它可以工作。但是,它仅在我之前手动选择此输入框时才有效。如果我不这样做,那么什么都不会发生。你知道我应该如何自动执行此操作吗? 你也知道我如何在那个输入框中按“回车”吗? 可以使用SendKeys功能:contextures.com/excelvbasendkeys.html以上是关于通过excel vba从excel给一个html输入框赋值的主要内容,如果未能解决你的问题,请参考以下文章
在EXCEL中,需要一个在某一个日期就自杀的工作溥VBA代码