Vba InternetExplorer html属性更改

Vba InternetExplorer html属性更改,vba,internet-explorer,dom,Vba,Internet Explorer,Dom,源网页包含一个带有aria expanded='false'和aria activegroundant=“Listbox_18--item-0”的输入元素 当我将此属性更改为“true”(以编程方式)时,它会在开放IE上展开。我还可以更改“Listbox_18--item-3” 但我无法在更改后触发事件。 下面是我的VBA代码 IE.Document.body.getElementsByTagName("input")(0).Focus Debug.Print IE.Docu

源网页包含一个带有
aria expanded='false'
aria activegroundant=“Listbox_18--item-0”的输入元素

当我将此属性更改为“true”(以编程方式)时,它会在开放IE上展开。我还可以更改“Listbox_18--item-3”

但我无法在更改后触发事件。 下面是我的VBA代码

IE.Document.body.getElementsByTagName("input")(0).Focus
Debug.Print IE.Document.body.getElementsByTagName("input")(0).setAttribute("aria-expanded", "true")
Debug.Print IE.Document.body.getElementsByTagName("input")(0).setAttribute("aria-activedescendant", "Listbox_18--item-3")
Debug.Print IE.Document.body.getElementsByTagName("input")(0).setAttribute("aria-expanded", "false")

好的,这就是页面上发生的事情

您正在处理DOM中的元素,这些元素使用javascript侦听事件,然后触发函数,最后调用AJAX函数将数据返回到网页,而无需重新加载

这意味着您不能只设置属性。因为设置属性的行为不会在web应用程序的变量中注册事件/值

因此,尝试类似这样的方法,您必须模拟页面上的操作以生成AJAX响应,特别是因为SW的网站正在使用生成的QSI id thingy来指定页面的选择

因此,页面上的工作流是:页面加载,在元素上设置事件,脚本资源保存函数。用户单击元素,触发事件,记录选择值,脚本资源创建随机id,随机id是ajax http请求的输入,然后从匹配id返回价格值

我在DevTools的控制台中执行类似的操作,它模拟用户单击该项。现在您看到页面执行Ajax请求并返回价格

document.querySelectorAll('#Listbox_10--item-3 > button')[0].click();
在像Puppeter这样更高级的软件中,实际上可以设置请求拦截,从ajax在页面上查找该请求,但在VBA中,您只需等待加载,然后查找页面以更新其HTML


现在,如果您有一种捕获ID的方法,然后将其作为参数发送到服务器,就像您在DevTools中看到的那样——您可以使用MS XML HTTP发送它,并获得漂亮的JSON响应。

好的,这就是页面上发生的事情

您正在处理DOM中的元素,这些元素使用javascript侦听事件,然后触发函数,最后调用AJAX函数将数据返回到网页,而无需重新加载

这意味着您不能只设置属性。因为设置属性的行为不会在web应用程序的变量中注册事件/值

因此,尝试类似这样的方法,您必须模拟页面上的操作以生成AJAX响应,特别是因为SW的网站正在使用生成的QSI id thingy来指定页面的选择

因此,页面上的工作流是:页面加载,在元素上设置事件,脚本资源保存函数。用户单击元素,触发事件,记录选择值,脚本资源创建随机id,随机id是ajax http请求的输入,然后从匹配id返回价格值

我在DevTools的控制台中执行类似的操作,它模拟用户单击该项。现在您看到页面执行Ajax请求并返回价格

document.querySelectorAll('#Listbox_10--item-3 > button')[0].click();
在像Puppeter这样更高级的软件中,实际上可以设置请求拦截,从ajax在页面上查找该请求,但在VBA中,您只需等待加载,然后查找页面以更新其HTML


现在,如果您有一种捕获ID的方法,然后将其作为参数发送到服务器,就像您在DevTools中看到的那样——您可以使用MS XML HTTP发送它,并获得很好的JSON响应。

您可以尝试我在本文中写的一些方法:每个网站的操作都会略有不同,因此当您直接更改这些属性时,javascript web应用程序中的变量可能没有听到这种直接的更改,因此在输入/表单/post提交时不会更改它们的值。Jquery在很多网站中都有使用,它可以用来设置元素上的特定事件,因此,如果事件是通过单击或等方式触发的,那么它只能触发JS代码/变量更改。@Peyter,谢谢。这是我正在尝试使用的url。我能够成功地更改输入值(例如:“low fare”更改为“anytime”),但它不会更改下面的值(例如价格)。我尝试使用fireevent('onchange'),但没有帮助。input元素属性表示readonly,所以我猜它不能更改。属性还声明aria拥有:Listbox_10--menu,我找不到它。移动以回答,这样我可以在一秒钟内粘贴代码。尝试触发如下事件,并检查是否有任何区别。设置ieEvent=htmldoc.createEvent(“HTMLEvents”)ieEvent.initEvent“change”,False,True ie.document.all.Item(“txt1”)。dispatchEvent ieEvent你可以尝试我在这篇文章中写的一些方法:每个网站的操作都会有点不同,所以当你直接更改这些属性时,javascript web应用程序中的变量可能没有听到这种直接的更改,因此在输入/表单/post提交时不会更改它们的值。Jquery在很多网站中都有使用,它可以用来设置元素上的特定事件,因此,如果事件是通过单击或等方式触发的,那么它只能触发JS代码/变量更改。@Peyter,谢谢。这是我正在尝试使用的url。我能够成功地更改输入值(例如:“low fare”更改为“anytime”),但它不会更改下面的值(例如价格)。我尝试使用fireevent('onchange'),但没有帮助。input元素属性表示readonly,所以我猜它不能更改。属性还声明aria拥有:Listbox_10--menu,我找不到它。移动以回答,这样我可以在一秒钟内粘贴代码。尝试触发如下事件,并检查是否有任何区别。设置ieEvent=htmldoc.createEvent(“HTMLEvents”)ieEvent.initE