分享

Vs2017_VB_Net 操作IE浏览器实现网页自动化

 昵称19482803 2019-10-13

综合网上各位高人的方法,经过几天的整合简化,最终实现外部对IE浏览器网页自动化操作,现写下总结。

窗体界面及控件不是本文主要内容,自行发挥。

实现网页自动化也就是脚本操作行为,脚本都是需要延时等待功能的,所以先在窗体代码开关声明延时API,以便随时使用:

Private Declare Sub Sleep Lib "kernel32.DLL" (ByVal dwMilliseconds As Long)

写一个用IE浏览器打开指定网页的Sub:

   Sub 打开网站(strURLAs String)

       Dim objb As Object

        objb = CreateObject("WScript.Shell")

        objb.Run("iexplore.exe " & strURL, 0)

        objb = Nothing

        Sleep(3000)

End Sub

写一个主操控Sub:这里面涉及到三个重点:

1.Shell.Application

2.InternetExplorer.Application

3.InternetExplorer.Application.Document对象的属性和方法

   Sub 主操控()

       Dim strURL As String, Account As String, Password As String, AppPath As String = ".\次程序.exe"

       Dim objWin As Object, 传达操作指令 As Boolean

       Do

            strURL = Me.strURL.Text

            Account = Me.Account.Text

            Password = Me.Password.Text

           传达操作指令 = False

           For Each objWin In CreateObject("Shell.Application").Windows

               'Debug.WriteLine(TypeName(objWin.document))'显示对象类名

               If InStr(LCase(TypeName(objWin.document)),"htmldocumentclass") > 0 Then

                   IfobjWin.readyState = 4 Then

                       'Debug.WriteLine(objWin.LocationURL)'显示对象网址

                       If 0 = 1 Then

                       ElseIf objWin.LocationURLLike "*END*" Then '要结束自动操作的条件,可以用网址特征判断,当然也可以用别的方式,详细参见“InternetExplorer.Application的用法及属性解释”。

                           Exit Do

                       ElseIfobjWin.LocationURL Like "*" & strURL & "*" Then '要传达操作指令的条件,可以用网址特征判断

                           '以下为执行操作的方式,主程序不要执行具体操作,只传达指令,然后运行次程序操作,否则会在网页跳转后主程序出错。具体操作可参见“Document对象的属性和方法”。

                           'objWin.Document.all("form").target = "_self"

                           'objWin.Document.all("Account").value = Account

                           'objWin.Document.all("Password").value = Password

                           'objWin.Document.all("btn-submit").click()

                           'objWin.Navigate(objWin.document.links(line).href)

                            传达操作指令 = True

                           Exit For

                       ElseIfobjWin.LocationName Like "*标签名*" Then '要传达操作指令的条件,可以用网页标签名特征判断

                           传达操作指令 = True

                           Exit For

                       End If

                   Else

                       Exit For

                   End If

               End If

           Next

           If 传达操作指令 Then

               启动外部程序并等待程序退出(AppPath)

           Else

               打开网站(strURL) '没有操作指令时打开指定网址

           End If

            Sleep(2000) '必要的延时等待

       Loop

End Sub

写一个启动外部程序并等待程序退出Sub:

   Sub 启动外部程序并等待程序退出(AppPath As String)

       Dim timeOut As Long = 20000

       '创建一个新的进程结构

       Dim pInfo As NewProcessStartInfo()

       '设置其成员FileName为系统资料的Eula.txt

        pInfo.FileName = AppPath

       '运行该文件

       Dim p As Process = Process.Start(pInfo)

       '等待程序装载完成

        p.WaitForInputIdle()

       '等待程序退出

        p.WaitForExit(timeOut)

       '检查是否在超时前已关闭了.

       If p.HasExited = False Then

           '进行程还在运行

           '看进程有没有回应

           If p.Responding Then

                p.CloseMainWindow() '关闭窗口

           Else

                p.Kill()  '强行中断

           End If

            MessageBox.Show("可能出现特殊意外情况无法处理!程序关闭。")

           End

       Else

            Debug.WriteLine("外部程序运行结束!")

       End If

   End Sub

次程序一般设置为不可见,同时还要读取主程序里的设置,可以通过文件读写实现。可以用“Scripting.FileSystemObject”。

次程序里执行操作的判断代码跟主程序里发送操作指令的判断代码是一样的,其它也类似,不同的是把主程序里的传达操作指令改为具体的网页操作,操作完本网页就直接END销毁次程序。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多