如何让VBA提交javascript表单?

如何让VBA提交javascript表单?,javascript,html,excel,vba,web-scraping,Javascript,Html,Excel,Vba,Web Scraping,我不确定是否正确引用了按钮。我不断得到: 运行时错误“438”:对象不支持此属性或方法 这就是我的代码目前的样子: Sub russInd() Dim oButton As Object, HTMLdoc As Object Dim sht1 As Worksheet, myURL As String Set ie = CreateObject("InternetExplorer.Application") Set sht1 = Worksheets("D

我不确定是否正确引用了按钮。我不断得到:

运行时错误“438”:对象不支持此属性或方法

这就是我的代码目前的样子:

Sub russInd()
    Dim oButton As Object, HTMLdoc As Object
    Dim sht1 As Worksheet, myURL As String
    Set ie = CreateObject("InternetExplorer.Application")
        Set sht1 = Worksheets("Day 1")
        myURL = sht1.Cells(32, 2).Value
        ie.navigate myURL
        ie.Visible = True

        Do Until ie.ReadyState = 4
            DoEvents
        Loop

        'Locate The correct forms and buttons
        Set HTMLdoc = ie.document
        Set oButton = HTMLdoc.querySelectorAll("a[href='javascript:submitForm(document.forms[0].action);']")
        'Check All Checkboxes
        HTMLdoc.getElementByID("chkAll").Click
        oButton.Click
End Sub
我使用的网页是:

  https://indexcalculator.ftserussell.com/
以下是网页代码:

我需要单击“下一步”按钮,我确实尝试使用

.getElementByID(“CtlNavigation\lblControl”)


要单击按钮,但是刚才跳过了命令,我猜它没有单击任何内容。谢谢

将选择器设置为:(意思是在父元素a中查找任何图像。)

以下是修改后的完整代码:

Sub russInd()
    Dim oButton As Object, HTMLdoc As Object
    Dim sht1 As Worksheet, myURL As String
    Set ie = CreateObject("InternetExplorer.Application")
        Set sht1 = Worksheets("Day 1")
        myURL = sht1.Cells(32, 2).Value
        ie.navigate myURL
        ie.Visible = True

        Do Until ie.ReadyState = 4
            DoEvents
        Loop

        'Locate The correct forms and buttons
        Set HTMLdoc = ie.document
        Set oButton = HTMLdoc.querySelectorAll("a > img")
        'Check All Checkboxes
        HTMLdoc.getElementByID("chkAll").Click
        oButton.Click
End Sub

querySelectorAll
返回一个。您可能需要
querySelector

试一试


在所有步骤中使用以下选择器。id为Ctlnavigation2\u lblControl的父级中的子
a
元素的数量会发生变化,因此以下方法是一种可靠的方法,可以始终跨页面获取所需内容

HTMLdoc.querySelector("#Ctlnavigation2_lblControl [href*=action]").Click

注释中部分更正的错误是,您试图使用某些节点类型的方法,例如节点列表上的标记元素(这是querySelectorAll返回的)。它不返回集合。这是VBA中一个非常重要的区别。如果您尝试为每个节点创建一个节点列表,就像使用集合一样,在该节点列表上Excel将崩溃

使用selenium,VBA有一个库:)querySelectorAll返回一个集合。你可能想要querySelector@mplungjan就这样!谢谢!或者更简单的
HTMLdoc.getElementById(“CtlNavigation\u lblControl”).querySelector(“a”)。单击
或者
HTMLdoc.querySelector(“表单”).submit()
接受的答案在您的各个步骤中都不起作用。您希望每次都单击“下一步”,而不是在以后的步骤中后退。
HTMLdoc.getElementById("CtlNavigation_lblControl").querySelector("a").Click
HTMLdoc.querySelector("CtlNavigation_lblControl a").Click
HTMLdoc.querySelector("#Ctlnavigation2_lblControl [href*=action]").Click