Dom 在VBScript中捕获事件

Dom 在VBScript中捕获事件,dom,scripting,vbscript,Dom,Scripting,Vbscript,伙计们。这是一个VBS脚本,可以打开google、填写表单并单击搜索按钮 set ie = CreateObject("InternetExplorer.Application") ie.navigate("www.google.com") ie.visible = true while ie.readystate <> 4 wscript.sleep 100 WEnd set fields = ie.document.getelementsbyname("q") s

伙计们。这是一个VBS脚本,可以打开google、填写表单并单击搜索按钮

set ie = CreateObject("InternetExplorer.Application")

ie.navigate("www.google.com")

ie.visible = true

while ie.readystate <> 4
    wscript.sleep 100
WEnd

set fields = ie.document.getelementsbyname("q")
set buttons = ie.document.getelementsbyname("btnG")

fields(0).value = "some query"
buttons(0).click

ie.quit

Sub OnClickSub()
    MsgBox  "button clicked!", 0
End Sub
set ie=CreateObject(“InternetExplorer.Application”)
ie.navigate(“www.google.com”)
可见=真实
而ie.readystate 4
wscript.sleep 100
温德
设置字段=ie.document.getelementsbyname(“q”)
设置按钮=ie.document.getelementsbyname(“btnG”)
字段(0)。value=“一些查询”
按钮(0)。单击
不干了
Sub OnClickSub()
MsgBox“已单击按钮!”,0
端接头
显然,
按钮(0)。单击
会触发按钮的onclick事件,我需要在脚本中捕获该事件,并为其提供一些处理,如启动
OnClickSub()

有人知道该怎么做吗?

使用函数获取指向事件处理程序的指针并将其绑定到事件,如下所示:

buttons(0).onclick = GetRef("OnClickSub")

(显然,当从网页外部调用时不起作用。)

下面是一个非常简单的方法来捕获Excel中发生的事件。必须打开Excel才能使其工作。将其复制并粘贴到新的VBScript中,然后运行它。然后进入Excel,更改单元格的值。将弹出一个消息框,显示您更改的单元格

'/////////////////////////////////////////////////Event Constant Definitions/////////////////////////////////////////////////////
    EVENT_CELL_CHANGE = 1   '//////////////////////////////////////////////////////////////////////
    EVENT_SELECTED_CELL_CHANGE = 2 '/////////////////////////////////////////////////////
    EVENT_SELECTED_SHEET_CHANGE = 3 '///////////////////////////////////////////////////
    EVENT_SELECTED_WORKBOOK_CHANGE = 4 '///////////////////////////////////////
'/////////////////////////////////////////////////Event Constant Definitions/////////////////////////////////////////////////////
'_______________________________________________________________________
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////Global Program/////////////////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
set O = getObject( , "Excel.Application")
Call WaitUntil_Event(EVENT_CELL_CHANGE, O.Selection, RtnVar, "BLANK")
msgbox RtnVar.address

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////End of Global Program//////////////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'_______________________________________________________________________
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'///////////////////////////////////////////Start of Main Sub Program/////////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'///////////////////////////////////////////This program was written by///////////////////////////////////////////////////////
'///////////////////////////////////////////Ben Ahrens (April 5th, 2019///////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Sub WaitUntil_Event(EventType, CheckVal, ByRef ReturnVariable, RunVBScript_FileName)
    On Error Resume Next
    LoopedCycleTime = 50    
    WaitUntil_SelectionChange = False
    'msgbox EVENT_CELL_CHANGE 
    select case EventType
        Case EVENT_CELL_CHANGE
            Set CheckVal = O.Selection
            Do
                Set CheckVal = O.Selection
                Val= CheckVal.Value
                Do 
                    WScript.Sleep LoopedCycleTime
                Loop Until O.Selection.Address <> CheckVal.Address
            Loop While CheckVal.Value = Val
            Set RtnVar = CheckVal
        Case EVENT_SELECTED_CELL_CHANGE 
            Do 
                WScript.Sleep LoopedCycleTime
            Loop Until O.Selection.Address <> CheckVal.Address
        Case EVENT_SELECTED_SHEET_CHANGE 
            Do 
                WScript.Sleep LoopedCycleTime
            Loop Until O.Selection.Worksheet.Name <> CheckVal.Worksheet.Name

        Case EVENT_SELECTED_WORKBOOK_CHANGE 
            Do 
                WScript.Sleep LoopedCycleTime
            Loop Until O.Selection.Worksheet.Parent.Name <> CheckVal.Worksheet.Parent.Name
    End Select
    'WaitUntil_Event = True
    'Include RunVBScript_FileName

End Sub

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'///////////////////////////////////////////////End of Main Sub Program//////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
事件常量定义///////////////////////////////////////////////////// 事件\单元\更改=1'////////////////////////////////////////////////////////////////////// 事件\选定\单元格\更改=2'///////////////////////////////////////////////////// 事件\所选\工作表\更改=3'/////////////////////////////////////////////////// 事件\选定\工作簿\更改=4'/////////////////////////////////////// 事件常量定义///////////////////////////////////////////////////// '_______________________________________________________________________ '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// “//全球计划”///////////////////////////////////////////////////////////////// '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// set O=getObject(,“Excel.Application”) 调用WaitUntil_事件(事件单元格更改,O.选择,RtnVar,“空白”) msgbox RtnVar.address '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 全球计划的结束////////////////////////////////////////////////////////////// '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// '_______________________________________________________________________ '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 主要子计划的开始///////////////////////////////////////////////////////// '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 这个程序是由/////////////////////////////////////////////////////// “//本·阿伦斯(2019年4月5日)/////////////////////////////////////////////////////// '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 子WaitUntil_事件(EventType、CheckVal、ByRef ReturnVariable、RunVBScript_文件名) 出错时继续下一步 LoopedCycleTime=50 WaitUntil_SelectionChange=False 'msgbox事件\单元\更改 选择案例事件类型 案例事件\单元\变更 设置CheckVal=O。选择 做 设置CheckVal=O。选择 Val=检查Val.值 做 WScript.Sleep LoopedCycleTime 循环直到O.Selection.Address CheckVal.Address 当CheckVal.Value=Val时循环 设置RtnVar=CheckVal 案例事件\u选定\u单元格\u更改 做 WScript.Sleep LoopedCycleTime 循环直到O.Selection.Address CheckVal.Address 案例事件\u选定\u工作表\u更改 做 WScript.Sleep LoopedCycleTime 循环直到O.Selection.Worksheet.Name CheckVal.Worksheet.Name 案例事件\u选定\u工作簿\u更改 做 WScript.Sleep LoopedCycleTime 循环直到O.Selection.Worksheet.Parent.Name CheckVal.Worksheet.Parent.Name 结束选择 'WaitUntil_Event=True '包括RunVBScript\u文件名 端接头 '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// “/////////////End of Main Sub Program////////////////////////////////////////////////////// '/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
我认为不可能将VBS函数/Sub附加到网页中某个按钮的单击事件,我认为最好的方法是调用该按钮的单击所附加的任何内容。