InternetExplorer html 属性更改
InternetExplorer html attribute change
源网页包含带有 aria-expanded='false'
和 aria-activedescendant="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 函数来 return无需重新加载数据到网页。
这意味着您不能只设置属性。由于设置属性的行为不会在网络应用程序的变量中注册事件/值。
所以尝试这样的事情,你将模拟页面上的操作以生成 AJAX 响应,特别是因为 SW 的网站正在使用生成的 QSI id thingy,来指定什么该页面的选择是。
所以页面上的工作流程是:页面加载,元素上设置事件,脚本资源持有函数。用户单击该元素,触发事件,记录选择值,脚本资源创建随机 ID,随机 ID 是 ajax http 请求的输入,然后它是 return 价格值来自匹配的 ID。
我在 DevTools 的控制台中做了类似的事情,它模拟了用户点击该项目。现在您看到页面执行 Ajax 请求并且 return 是价格。
document.querySelectorAll('#Listbox_10--item-3 > button')[0].click();
在像 puppeteer 这样更高级的东西中,你实际上可以设置请求拦截来在页面上查找那个请求,来自 ajax,但在 VBA 中,你将拥有等待加载,并查找要更新的页面 HTML。
现在,如果您有办法捕获 ID,然后将其作为参数发送到服务器,就像您在 DevTools 中看到的那样——您可以使用 MS XML HTTP 发送它并获得很好的效果 JSON响应。
源网页包含带有 aria-expanded='false'
和 aria-activedescendant="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 函数来 return无需重新加载数据到网页。
这意味着您不能只设置属性。由于设置属性的行为不会在网络应用程序的变量中注册事件/值。
所以尝试这样的事情,你将模拟页面上的操作以生成 AJAX 响应,特别是因为 SW 的网站正在使用生成的 QSI id thingy,来指定什么该页面的选择是。
所以页面上的工作流程是:页面加载,元素上设置事件,脚本资源持有函数。用户单击该元素,触发事件,记录选择值,脚本资源创建随机 ID,随机 ID 是 ajax http 请求的输入,然后它是 return 价格值来自匹配的 ID。
我在 DevTools 的控制台中做了类似的事情,它模拟了用户点击该项目。现在您看到页面执行 Ajax 请求并且 return 是价格。
document.querySelectorAll('#Listbox_10--item-3 > button')[0].click();
在像 puppeteer 这样更高级的东西中,你实际上可以设置请求拦截来在页面上查找那个请求,来自 ajax,但在 VBA 中,你将拥有等待加载,并查找要更新的页面 HTML。
现在,如果您有办法捕获 ID,然后将其作为参数发送到服务器,就像您在 DevTools 中看到的那样——您可以使用 MS XML HTTP 发送它并获得很好的效果 JSON响应。