【问题标题】:Jquery events on VBAVBA 上的 Jquery 事件
【发布时间】:2019-06-07 15:17:57
【问题描述】:

我一直在尝试使用 VBA 将我在网站上执行的流程自动化,但我对 JavaScript 的了解有限。我已经问过这方面的问题,但还没有解决方案。

我需要做的是回答一系列类似这样的 Y/N 问题,例如该问题还有两个相关的子问题。如果您在第一个中选择“是”,则会出现第二个,依此类推。问题是我无法让 VBA 触发该网站的所有事件,这意味着我可以对第二个问题回答“是”(第一个问题在我开始工作时总是已经手动回答)现在它不会显示第三个也是最后一个问题。

我查看了 JS 代码,并且随着我对它的深入挖掘,我不断发现东西。到目前为止,我从浏览器上的调试中知道,文档上有一个“mousedown”事件,该事件由显示选项 Y/N 的第二个答案元素名称触发,然后是另一个来自 div 元素的事件“更改”第二个问题段落。

鼠标按下事件

更改事件 右侧面板上是参数的属性

关于 VBA 并尝试触发事件我已经尝试了很多东西..

.fireEvent“onchange”或“onclick”不起作用 .iedoc.parentWindow.execScript 和函数 eventHandle() 给出错误。

这是JS中的函数

elemData.handle = eventHandle = function() {
				// Handle the second event of a trigger and when
				// an event is called after a page has unloaded
				return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
					undefined;
			};

这不会给出错误,但也没有任何反应:

Dim event_onChange As Object
Set event_onChange = ieDoc.createEvent("HTMLEvents")

While ieApp.Busy Or ieApp.readyState <> 4: DoEvents: Wend
ieDoc.querySelector("select[name='meetingQuestionAnswer(221010)']").Focus
event_onChange.initEvent "mousedown", True, False
ieDoc.querySelector("select[name='meetingQuestionAnswer(221010)']").dispatchEvent event_onChange
    
    
event_onChange.initEvent "change", True, False
ieDoc.querySelector("select.auto-save[name='meetingQuestionAnswer(221010)']").dispatchEvent event_onChange
ieDoc.querySelector("select.auto-save[name='meetingQuestionAnswer(221010)']").Value = "Yes"

事件应该从目标元素还是 currentTarget 元素分派?或者我如何触发事件以显示 Y/N 选项框并加载其他问题?

【问题讨论】:

  • 您还可以通过使用 parentwindow.exescript 执行适当的 JavaScript 来触发事件
  • 我收到错误 80020101,表示操作无法完成。我将添加处理问题更改的函数...我在某处读到 VBA 上的错误可能是因为该函数的 JS 中的代码具有 cmets...
  • 有一个错字,应该是 execscript - 抱歉
  • 您拥有网页/javascript 代码吗?或者你想驱动别人的界面?如果您有 javascript 技能,那么我绝对建议您编写一个 Chrome 扩展程序,medium.freecodecamp.org/… 在我发现 Chrome 扩展程序后不久就退出了使用 VBA 编写 IE 脚本。
  • @SMeaden 我们所做的所有工作都与 Excel 上的信息有关,所以我在 VBA 方面的经验比在 JavaScript 方面更有经验

标签: javascript jquery html vba jquery-events


【解决方案1】:

在 VBA 上进行了很多搜索并尝试了很多事情后,我得出的结论是,不可能做我想做的事(如果它非常复杂且不方便),所以我决定在 Python 中使用 Selenium 并不到十行代码就解决了。

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多