我有一些代码可以很好地通过Excel / VBA将数据输入到Web表单中。
我在其他站点上都可以使用它,但是在这个站点上,数据被“输入”到文本框中,正如我在屏幕上看到的那样。
但是,如果我再单击文本框,数据就会消失。同样,如果我单击表单上的“提交”,则会收到一个错误消息,指出文本框为空(即使在屏幕上不是)。
正如我所说,我拥有的代码可以在其他网站上使用,因此它必须与我正在使用的网站有关。
仅供参考,这是我正在使用的简化代码,其中IE是Internet Explorer对象:
IE.document.all("EntryField_hdn_547").Value = "My Name"
(您需要单击进入第3页,然后单击“雇主”单选按钮以查看文本字段)
这是例如上面的文本输入框的HTML:
<input type="text" class="i" name="EntryField_hdn_547" tabindex="1469" aria-label="Name" style="text-align: left; vertical-align: middle; text-indent: 0px; padding: 0px 5.67px; height: 34.0157px; box-sizing: border-box; position: absolute; width: 566.93px;">
任何人都可以帮助建议一种将数据“粘贴”到文本框中的方法
(仅供参考,我也有单击单选按钮的代码,效果很好)
此外,我尝试了这个答案,该答案似乎非常相似,但仍然不令人满意: Text entered into Webpage Search Box via Excel VBA is not detected when clicking Search button
答案 0 :(得分:2)
使用selenium basic可以轻松实现。安装后,转到VBE>工具>参考>添加对硒类型库的参考。
Option Explicit
Public Sub EnterInfo()
Dim d As WebDriver
Set d = New ChromeDriver
Const url = "https://public-online.hmrc.gov.uk/lc/content/xfaforms/profiles/forms.html?contentRoot=repository:///Applications/NICs_iForms/1.0/CA3822&template=CA3822.xdp"
With d
.Start "Chrome"
.get url
.Window.Maximize
'.ExecuteScript "window.scrollTo(0, document.body.scrollHeight);"
.FindElementByCss(".S").Click
.FindElementByCss("#_hdn_30 > div._.widget.buttonfieldwidget.xfaButton").Click
.FindElementByCss("[aria-label=employer]").Click
.FindElementByCss("[aria-label=Name]").SendKeys "Wile E. Coyote"
.FindElementByCss("[aria-label='Name of company']").SendKeys "Acme Corporation"
.FindElementByCss("[aria-label='Position in company']").SendKeys "Entrepreneur"
.FindElementByCss("[aria-label='Telephone number']").SendKeys "012345678910"
.FindElementByCss("[tabindex='1511']").Click
.FindElementByCss("[tabindex='1537']").Click
.FindElementByCss("#_hdn_653 > div._.widget.buttonfieldwidget.xfaButton").Click
Stop
.Quit
End With
End Sub
答案 1 :(得分:1)
QHarrs链接提供了答案-通过使用SendKeys,我可以将数据作为文本输入到文本框中。
我确实需要首先将焦点设置为IE-我使用这里的信息来进行排序: Set Focus to Internet Explorer Object in Visual Basic
即
myIE.visible = false
DoEvents
myIE.visible = true