【发布时间】:2019-02-13 22:03:35
【问题描述】:
我正在尝试使用 VBA 自动输入网页 https://www.cpf.gov.sg/eSvc/Web/Schemes/LifePayoutEstimator/LifePayoutEstimator。我编写了以下填充各种输入字段的 VBA 代码,作为我想要实现的示例。
Sub SubmitEstimatorForm()
Dim ie As InternetExplorer
Dim html As HTMLDocument
Set ie = New InternetExplorer
ie.Visible = True
ie.navigate "https://www.cpf.gov.sg/eSvc/Web/Schemes/LifePayoutEstimator/LifePayoutEstimator"
Do While ie.READYSTATE <> 4
DoEvents
Loop
Set htmldoc = ie.document
Set htmldisclaimercheck = htmldoc.getElementbyid("is-disclaimer-checked")
Set htmlmaleradio = htmldoc.getElementbyid("radioMale")
Set htmlfemaleradio = htmldoc.getElementbyid("radioFemale")
Set htmldobfield = htmldoc.getElementbyid("DateOfBirth")
Set htmlrabalfield = htmldoc.getElementbyid("RetirementAccountBalance_display")
Set htmlnextbutton = htmldoc.getElementbyid("btnCalculate")
htmldisclaimercheck.Click
htmlmaleradio.Click
htmldobfield.Value = "01/01/1960"
htmlrabalfield.Value = "50000.00"
htmlnextbutton.Click
End Sub
不幸的是,如果我在网页中手动键入相同的“50000.00”,“当前退休帐户余额”字段似乎会触发额外的验证,但当通过 VBA 以编程方式填充该字段时不会这样做。在尝试提交表单(即单击下一步按钮)时,缺少此验证会导致错误。
我尝试了各种通过 FireEvents 触发验证的方法,使用 onclick、onchange、onfocus 等,但到目前为止都没有成功。
在做了一些研究之后,我认为解决这个问题的方法可能应该是通过执行底层的 javascript/jquery,并且在 How to scrape a form that requires field validation by user? 找到了类似的问题,但是尽管多次尝试使用 .execScript() 我仍然无法达到我所需要的。由于不熟悉 javascript/jquery 和 DOM 资源管理器,我正在努力寻找合适的脚本或 jquery 来执行。
不胜感激有关如何继续的建议或提示,无论是通过上述方法还是通过其他替代方法。谢谢!
【问题讨论】:
-
如果目标是学习 VBA,那就继续努力吧!但是,如果目标是像网站那样简单地自动化您的 CPF 计算,那么这是一种可怕的方法。该网站所做的只是一个简单的计算,并且您需要通过努力从网站上抓取数字,您最好自己在 Excel 中进行计算。 (因为它的目的是!)有几个页面包含有关计算的详细信息,其中一些具有现成的可下载 Excel 工作簿。 Here's the first one I found.
-
谢谢 - 感谢您的建议,同意使用 Excel 更有效。不过,我仍然想寻求原始编程问题的解决方案 - 你可以认为我正在尝试学习 VBA,是的:)
标签: jquery html excel vba web-scraping