Angularjs Excel VBA网页无法识别提交时填写的字段
我编写了一个Excel VBA宏,将一些数据粘贴到AngularJS中 表单--它打开一个Internet Explorer(11)窗口,导航到 包含表单的页面,并爬网文档树以查找 某些元素的ID,将其值从空白更改为 Excel工作表中的非空字符串。然而,当我提交 表单,表单逻辑将所有必填字段视为 仍然空白,在假定的违规字段周围绘制一个红色框。 (此时,我可以通过单击每个字段,键入 粘贴数据末尾的随机字符,并立即 删除它,这将触发所需字段被删除的逻辑 现在已满。) 我在这里链接的这个页面与我在上面强调的相关部分遇到的问题完全相同。其余的我什么都不知道。我已经尝试了评论中关于查找提交的内容,但它不起作用,或者我认为我只需要更正VBA代码就可以正确提交它 我最多只能说,当我手动键入时,它会验证字段是否符合条件并将其标记为OK。填写字段后,如何强制此页面进行自我检查 这就是我尝试过的。其中一些是我发现并尝试过的东西Angularjs Excel VBA网页无法识别提交时填写的字段,angularjs,vba,excel,internet-explorer,Angularjs,Vba,Excel,Internet Explorer,我编写了一个Excel VBA宏,将一些数据粘贴到AngularJS中 表单--它打开一个Internet Explorer(11)窗口,导航到 包含表单的页面,并爬网文档树以查找 某些元素的ID,将其值从空白更改为 Excel工作表中的非空字符串。然而,当我提交 表单,表单逻辑将所有必填字段视为 仍然空白,在假定的违规字段周围绘制一个红色框。 (此时,我可以通过单击每个字段,键入 粘贴数据末尾的随机字符,并立即 删除它,这将触发所需字段被删除的逻辑 现在已满。) 我在这里链接的这个页面与我在上
“Call.Document.getelementbyid(“firstName”).SetAttribute(“value”,ActiveCell.value)”尝试了另一种方法,但下一步仍保留了我的原始行
Set firstName=.Document.GetElementById(“firstName”)有效
firstName.Value=ActiveCell.Value'有效,但对于提交,字段为空
在要提交的代码末尾,
.Document.InvokeMember(“vm.onSubmit()”)
设置HTMLForm=.Document.GetElementsByName(“vm.onSubmit()”)
HTMLForm.Submit
.Document.getElementsByClassName(“btn btn主btn lg btn next”)(0)。单击“工作”,如果字段工作,则转到下一页
.Document.forms(0).submit'有效,只需将页面重置为上一页
编辑:这就是我的工作
' Fire the onChange event for the fields on the website
Dim oEvent
Set oEvent = .Document.createEvent("HTMLEvents")
oEvent.initEvent "change", False, True
然后,在需要下一节内容的地方:
Set firstName = .Document.getElementById("firstName")
firstName.Value = ActiveCell.Value ' Column 0, starting column to know where to start the offsets
firstName.dispatchEvent oEvent ' Example here since it is used for current field. Each field needs its own change event
Set lastName = .Document.getElementById("lastName")
lastName.Value = ActiveCell.Offset(0, 1).Value ' Column 1
lastName.dispatchEvent oEvent
其余的代码只是对每个字段重复,但dispatchEvent oEvent帮助我解决了这个问题。当时我尝试了各种解决方案才找到答案,但希望这能有所帮助。您需要在更改的字段上触发
输入事件
var inputs = document.getElementsByTagName("input");
for (var input in inputs) {
var $input = angular.element(input);
$input.triggerHandler('input');
}
您需要在更改的字段上触发input
事件
var inputs = document.getElementsByTagName("input");
for (var input in inputs) {
var $input = angular.element(input);
$input.triggerHandler('input');
}
你能分享网站的URL或目前为止尝试的代码吗?请将此添加到问题中。雷诺兹,你有解决办法吗?我也面临同样的问题。请检查我对您的问题的编辑。希望有帮助。你能分享网站的URL或迄今为止尝试过的代码吗?请将此添加到问题中。雷诺兹,你有解决办法吗?我也面临同样的问题。请检查我对您的问题的编辑。希望能有帮助。我在VBA代码中尝试了这个,但没有被识别。我假设这是另外一回事,但我如何使用它触发输入事件字段,或者让VBA触发它们?您必须在浏览器Javascript vm中执行此操作。但我不知道如何从vba中做到这一点。也许你可以直接触发这个事件,避免使用Javascript。我在VBA代码中尝试过这个,但没有被识别出来。我假设这是另外一回事,但我如何使用它触发输入事件字段,或者让VBA触发它们?您必须在浏览器Javascript vm中执行此操作。但我不知道如何从vba中做到这一点。也许您可以直接触发事件,避免使用Javascript。