通过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代码

通过 VBA 将查询从 Access 导入 Excel 并删除单个单元格

通过 VBA 访问 Excel 表中的图像

用vba给Excel单元格赋值

通过VBA将EXCEL的数据传给WORD

如何用vba给excel数据画图