提问人:Svj 提问时间:7/12/2020 最后编辑:braXSvj 更新时间:7/13/2020 访问量:330
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 函数以将数据返回到网页而无需重新加载。
这意味着您不能只设置属性。由于设置属性的行为不会在 Web 应用的变量中注册事件/值。
因此,尝试这样的事情,您将模拟页面上的操作以生成 AJAX 响应,特别是因为 SW 的网站使用生成的 QSI id 来指定页面的选择。
所以页面上的工作流程是:页面加载,在元素上设置事件,脚本资源保存函数。用户单击元素,触发事件,记录选择值,脚本资源创建随机 ID,随机 ID 是 ajax http 请求的输入,然后它从匹配的 id 返回价格值。
我在 DevTools 的控制台中执行类似操作,它模拟用户单击该项目。现在,您会看到该页面执行 Ajax 请求并返回价格。
document.querySelectorAll('#Listbox_10--item-3 > button')[0].click();
在像 Puppeteer 这样更高级的东西中,您实际上可以设置请求拦截以从 ajax 在页面上查找该请求,但在 VBA 中,您只需要等待加载,然后查找页面以更新它的 HTML。
现在,如果你有一种方法可以捕获 ID,然后将其作为参数发送到服务器,就像你在 DevTools 中看到的那样 -- 你可以使用 MS XML HTTP 发送它并获得漂亮的 JSON 响应。
评论