通过 VBS 进行表单操作 - 需要在第一次选择后更新表单

Form manipulation via VBS - need form to update after 1st selection

我创建了一个脚本来开始执行我需要的操作。此脚本与初始表单交互。

我可以填写表格并提交,但是它出错了。

经过进一步检查,在第一个下拉字段中进行选择后,表单应该会刷新并显示更新的下拉选项。

使用我的代码,它不允许在进行第一次选择后刷新表单。这是我的一些工作代码:

set ie = createobject("internetexplorer.application") 
Set objShell = CreateObject("WScript.Shell")

ie.navigate "https://www.myfloridalicense.com/wl11.asp?Mode=1&SID=&brd=&typ="
ie.Visible = True
do until ie.readystate = 4 : wscript.sleep 10: loop 

IE.Document.getElementsByTagName("select")("Board").Value = "25"
do until ie.readystate = 4 : wscript.sleep 10: loop 
IE.Document.getElementsByTagName("select")("County").Value = "11"
IE.Document.getElementsByTagName("select")("RecsPerPage").Value = "50"

For Each btn In IE.Document.getElementsByTagName("input")
If btn.type = "image" Then btn.Click()
Next

我的问题是 - 如何让表单在第一次选择后更新?第一选择是:

IE.Document.getElementsByTagName("select")("Board").Value = "25"

我尝试在之后添加这个,但没有成功:

do until ie.readystate = 4 : wscript.sleep 10: loop 

您提供的 link 的网页包含 function DDChange(),第一个和第二个表单字段具有 onchange 事件 link。但是由于某种原因,在更改字段后不会调用此函数。所以我在脚本中添加了与该函数相同的操作,以及一些额外的循环以获得完整的文档状态。这是第一个字段更改后表单更新的代码部分,对我来说没问题:

Set IE = CreateObject("internetexplorer.application")
IE.Visible = True
IE.Navigate "https://www.myfloridalicense.com/wl11.asp?Mode=1&SID=&brd=&typ="
Do Until IE.ReadyState = 4: WScript.sleep 10: Loop

IE.Document.getElementsByTagName("select")("Board").Value = "25"
' see function DDChange() {} for details
Set Form = IE.Document.Forms("reportForm")
Form.hDDChange.Value = "Y"
Form.Submit

Do Until IE.ReadyState = 4: WScript.sleep 10: Loop
' additional loop to check doc state
Do Until IE.Document.ReadyState = "complete": WScript.sleep 10: Loop
WScript.Echo IE.Document.getElementsByTagName("select")("LicenseType").OuterHtml

' the rest part of your code here ...

顺便说一句,数据网络抓取有两种方法:与IE交互(你正在实现),或者通过HTTP请求获取数据并解析它。第一个很明显,但不可靠(您知道,IE 很重、很慢,有时用户设置和旧 cookie 会影响工作流程)。第二种设置比较复杂,需要技巧,但不需要IE,所以没有IE的缺点。