locked
FAQs: 如何通过WebBrowser来自动化操作一个web页面(比如获取页面文本,登陆网站,搜索,点击按钮或者链接)? RRS feed

  • 问题

  • 为了帮助大家更好地学习 Visual Basic技术,微软论坛技术支持团队编辑了一些列的 "Visual Basic 常见问题及解答" 精华帖。

    本帖的主题是:如何通过WebBrowser来自动化操作一个web页面(比如获取页面文本,登陆网站,搜索,点击按钮或者链接)?

    如果您觉得这个帖子对您的学习、工作有所帮助,请再把这个帖子分享给你的同学、同事和朋友。

    如果您想阅读更多的 "Visual Basic 常见问题及解答",请打开索引页面:
    http://social.msdn.microsoft.com/Forums/zh-CN/vbasiczhchs/thread/c9ab4b8e-99dc-49a2-bcea-30f3ecc3c3b7


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手
    2011年3月2日 12:39

答案

  • 1) 基本原则:

    首先在WebBrowser 对象中加载一个Web页面,然后使用GetElementsByTagName 或者 GetElementsByID函数在WebBrowser.Document中定位Web页面的元素(比如获取页面文本,登陆网站,搜索,点击按钮或者链接)然后将它们自动化。
     
    你要事先通过“查看源代码(右击Web页面 -> 查看源代码菜单项)”找出Web元素的html源代码。
     
    示例:如何自动登陆网站(输入用户名/密码然后点击登陆按钮)?
     
    加入此页http://www.website.com/login.aspx有以下元素:
    <input name="UserNameTextBox" type="text" value="myUser" id="UserNameTextBox">
    <input name="PasswordTextBox" type="text" value="myUser" id="PasswordTextBox">
    <INPUT type=submit value="Login" name="LoginButton">

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ' 第一部分: 使用WebBrowser控件加载web页面
            WebBrowser1.Navigate("http://www.website.com/login.aspx")

            System.Threading.Thread.Sleep(2000) ' 延迟2秒以便渲染页面

            ' 第二部分: 自动输入用户名和密码
            Dim theElementCollection As HtmlElementCollection
            theElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
            For Each curElement As HtmlElement In theElementCollection
                Dim controlName As String = curElement.GetAttribute("name").ToString
                If controlName = "UserNameTextBox" Then
                    curElement.SetAttribute("Value", "Username text here")
                ElseIf controlName = "PasswordTextBox" Then
                    curElement.SetAttribute("Value", "Password text here")
                    ' 另外你可以这样获取元素的值:
                    ' MessageBox.Show(curElement.GetAttribute("Value"))
                End If
            Next

            ' 第三部分: Automatically clck that Login button
            theElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
            For Each curElement As HtmlElement In theElementCollection
                If curElement.GetAttribute("value").Equals("Login") Then
                    curElement.InvokeMember("click")
                    ' javascript对于按钮和超链接有个点击事件可以被调用
                End If
            Next
        End Sub
    End Class
     
    2) 有关WebBrowser自动化的一些代码示例:

    自动登陆到Yahoo网站 (输入用户名/密码然后点击登陆)
    http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/0b77ca8c-48ce-4fa8-9367-c7491aa359b0/
     
    自动运行一个Windows Live查询或者Google查询 (输入查询关键字点击查询按钮)
    http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/f06fcdca-ed9b-464b-ba08-edd26b0dc801/
     
    定位html元素: DropDown List / Radio Button 和 RichTextBox
    http://forums.msdn.microsoft.com/en-US/vbgeneral/thread/4ec55500-56a7-4656-b4dd-1e5871fc9806/
     
    定位超链接元素并获取”href”属性的URL值,然后使用My.Computer.Network.DownloadFile方法下载文件。
    http://forums.msdn.microsoft.com/en-US/vbgeneral/thread/6cd60d72-0695-4408-bf40-d858aefc8945/
     
    3) 注意: 至于页面上的表格数据(没有足够的属性能够定位它们),你需要使用正则表达式 (System.Text.RegularExpressions命名空间)。
     
    相关链接:
    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/4795ab09-c963-4f5d-8f67-0e4717f6faed/
     
    这个是正则表达式论坛:
    http://social.msdn.microsoft.com/forums/en-US/regexp/threads/

     


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手
    2011年3月2日 12:42