none
[VS.NET] 網頁欄位自動填入並送出 RRS feed

  • 一般討論

  • 請問.
    我想要寫的自動填入表單並送出
    目前已經可以針對欄位的名字.填入資料
    謝謝!!

    目前問題:
    1.WebBrowser 載入網頁第一次很慢會.
    2.改用IE程式碼該如果改寫

    x.頁框頁如何判斷網頁下一頁LOAD完成
       (目前是採用網址的部分但是進入頁框網址都長得一樣.卡關中)(完成)

    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted

            pageLoadTimes = pageLoadTimes + 1
            'MsgBox(pageLoadTimes.ToString)
           
    If pageLoadTimes = 1 Then
               
    click_LoginButton_1()
            End If

            If pageLoadTimes = 2 Then                      click_superlink_1()
            EndIf

             If pageLoadTimes = 4 Then
               
    click_superlink_2()
            End If

             If pageLoadTimes = 7 Then
               
    click_superlink_3()
            End If

             If pageLoadTimes = 8 Then
               
    input_SearchRequery_1()
            End If

             If pageLoadTimes = 9 Then
               
    get_table_1()
            End If   
    End Sub

     x.如何 click WebBrowser 中的超連結(完成)
        Private Sub click_superlink_1()
            Dim elementList As HtmlElementCollection
            Dim curElement As HtmlElement
            elementList = WebBrowser1.Document.GetElementsByTagName("a")
            For Each curElement In elementList
                If curElement.GetAttribute("innerText").Equals("MIT ERP") Then
                    curElement.InvokeMember("click") '點超連結
                End If
            Next
        End Sub

    x.只會顯示半邊的框架.(原因等待網頁完成的語法放錯位置造成)
    x.程式會han住..(原因等待網頁完成的語法放錯位置造成)
           WhileNot WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                Application.DoEvents()
                System.Threading.Thread.Sleep(1)
            EndWhile

    x.等礙網頁LOAD完成在跑下一頁.
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            If e.Url = WebBrowser1.Document.Url Then
                If e.Url.LocalPath = "/misdev/" Then
                    click_LoginButton_1()
                ElseIf e.Url.LocalPath = "/APPMGR/selectCO.asp" Then
                    click_superlink_1()
                ElseIf e.Url.LocalPath = "/MISDev/default.asp" Then
                    click_superlink_2()
                End If
            End If
    End Sub


    目前全文程式碼狀態

    Imports Microsoft.Office.Interop.Excel
    
    Imports System
    Imports System.Xml
    
    Imports System.Net
    Imports System.IO
    Imports System.Text
    Imports System.Text.RegularExpressions
    Imports System.ComponentModel
    Imports System.Threading
    
    
    Public Class Form1
        Dim pageLoadTimes As Int32 = 0
    
        Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            Save_Settings() '程序關閉前將設定檔除儲存
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Load_Settings() '程序開啟後載入儲存的設定檔
        End Sub
    
    
        Sub Load_Settings()
            Dim doc As New System.Xml.XmlDocument
    
            'doc.Load(Application.StartupPath & "\XMLFile1.xml")
            doc.Load(System.Windows.Forms.Application.StartupPath & "\XMLFile1.xml")
            Dim Load_username_TMG = doc.GetElementsByTagName("s_username_TMG")
            Dim Load_password_TMG = doc.GetElementsByTagName("s_password_TMG")
            Dim Load_username_Web = doc.GetElementsByTagName("s_username_Web")
            Dim Load_password_Web = doc.GetElementsByTagName("s_password_Web")
            For Each item As System.Xml.XmlElement In Load_username_TMG
                Console.WriteLine(item.InnerText)
                TextBox_username_TMG.Text = item.InnerText
            Next
    
            For Each item As System.Xml.XmlElement In Load_password_TMG
                Console.WriteLine(item.InnerText)
                TextBox_password_TMG.Text = item.InnerText
            Next
    
            For Each item As System.Xml.XmlElement In Load_username_Web
                Console.WriteLine(item.InnerText)
                TextBox_username_Web.Text = item.InnerText
            Next
    
            For Each item As System.Xml.XmlElement In Load_password_Web
                Console.WriteLine(item.InnerText)
                TextBox_password_Web.Text = item.InnerText
            Next
    
        End Sub
    
        Sub Save_Settings()
            Dim settings As New XmlWriterSettings()
            settings.Indent = True
            Dim XmlWrt As XmlWriter = XmlWriter.Create(System.Windows.Forms.Application.StartupPath & "\XMLFile1.xml", settings)
            With XmlWrt
    
                ' Write the Xml declaration.
                .WriteStartDocument()
    
                ' Write a comment.
                .WriteComment("XML Database.")
    
                ' Write the root element.
                .WriteStartElement("WebAuto")
    
                ' Start our first person.
                .WriteStartElement("Settings")
    
                ' The person nodes.
    
                .WriteStartElement("s_username_TMG")
                .WriteString(TextBox_username_TMG.Text.ToString())
                .WriteEndElement()
    
                .WriteStartElement("s_password_TMG")
                .WriteString(TextBox_password_TMG.Text.ToString())
                .WriteEndElement()
    
                .WriteStartElement("s_username_Web")
                .WriteString(TextBox_username_Web.Text.ToString())
                .WriteEndElement()
    
                .WriteStartElement("s_password_Web")
                .WriteString(TextBox_password_Web.Text.ToString())
                .WriteEndElement()
    
    
                ' The end of this person.
                .WriteEndElement()
    
                ' Close the XmlTextWriter.
                .WriteEndDocument()
                .Close()
    
            End With
        End Sub
    
    
        Sub testweb()
            System.Net.ServicePointManager.Expect100Continue = False '未知
            System.Net.ServicePointManager.CheckCertificateRevocationList = False '未知
    
            Dim strURL_ERP As String = "http://192.168.1.1/misdev/"
            WebBrowser1.Navigate(strURL_ERP) ' 瀏覽網址
    
        End Sub
    
        Private Sub Button_shit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_shit.Click
            testweb()
        End Sub
    
        Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            pageLoadTimes = pageLoadTimes + 1
            'MsgBox(pageLoadTimes.ToString)
    
            If pageLoadTimes = 1 Then
                click_LoginButton_1()
            End If
    
            If pageLoadTimes = 2 Then
                click_superlink_1()
            End If
    
            If pageLoadTimes = 4 Then
                click_superlink_2()
            End If
    
            If pageLoadTimes = 7 Then
                click_superlink_3()
            End If
    
            If pageLoadTimes = 8 Then
                input_SearchRequery_1()
            End If
    
            If pageLoadTimes = 9 Then
                get_table_1()
            End If
        End Sub
        Private Sub click_LoginButton_1()
            WebBrowser1.Document.All("emp_no").InnerText = TextBox_username_Web.Text ' 帳號
            WebBrowser1.Document.All("password").InnerText = TextBox_password_Web.Text ' 密碼
            WebBrowser1.Document.All("submit1").InvokeMember("Click") ' 登入
        End Sub
    
        Private Sub click_superlink_1()
            Dim elementList As HtmlElementCollection
            Dim curElement As HtmlElement
            elementList = WebBrowser1.Document.GetElementsByTagName("a")
            For Each curElement In elementList
                If curElement.GetAttribute("innerText").Equals("MIT ERP") Then
                    curElement.InvokeMember("click") '點超連結
                End If
            Next
        End Sub
    
        Private Sub click_superlink_2()
            Dim elementList As HtmlElementCollection
            Dim curElement As HtmlElement
            elementList = WebBrowser1.Document.Window.Frames("right").Document.GetElementsByTagName("a")
            For Each curElement In elementList
                'MsgBox(curElement.InnerText.ToString)
                If curElement.GetAttribute("innerText").StartsWith("代理") Then
                    curElement.InvokeMember("click") '點超連結
                End If
            Next
        End Sub
        Private Sub click_superlink_3()
            Dim elementList As HtmlElementCollection
            Dim curElement As HtmlElement
            elementList = WebBrowser1.Document.Window.Frames("left").Document.GetElementsByTagName("a")
            For Each curElement In elementList
                'MsgBox(curElement.InnerText.ToString)
                If curElement.GetAttribute("innerText").Equals("需求查詢") Then
                    curElement.InvokeMember("click") '點超連結
                End If
            Next
        End Sub
    
        Private Sub input_SearchRequery_1()
            WebBrowser1.Document.Window.Frames("right").Document.All("sReq_DeptID1").InnerText = "" ' 帳號
            WebBrowser1.Document.Window.Frames("right").Document.All("sFinished_Date1").InnerText = "2012/09/01" ' 帳號
            WebBrowser1.Document.Window.Frames("right").Document.All("sFinished_Date2").InnerText = "2012/09/30" ' 帳號
            WebBrowser1.Document.Window.Frames("right").Document.GetElementById("sArea6").SetAttribute("checked", "checked")
            WebBrowser1.Document.Window.Frames("right").Document.GetElementsByTagName("INPUT").Item("sReq_Type1").SetAttribute("checked", "")
    
    
    
            Dim elementList As HtmlElementCollection
            Dim curElement As HtmlElement
    
            elementList = WebBrowser1.Document.Window.Frames("right").Document.GetElementsByTagName("INPUT")
            For Each curElement In elementList
                'MsgBox(curElement.InnerText.ToString)
                'MsgBox(curElement.GetAttribute("sPageYN").ToString)
                If curElement.GetAttribute("Name").Equals("sPageYN") And curElement.GetAttribute("Value").Equals("N") Then
                    curElement.SetAttribute("Checked", "True") '點超連結
                End If
            Next
    
    
            elementList = WebBrowser1.Document.Window.Frames("right").Document.GetElementsByTagName("INPUT")
            For Each curElement In elementList
                'MsgBox(curElement.InnerText.ToString)
                'MsgBox(curElement.GetAttribute("value").ToString)
                If curElement.GetAttribute("value").StartsWith("查詢") Then
                    curElement.InvokeMember("click") '點超連結
                End If
            Next
        End Sub
    
        Private Sub get_table_1()
            Dim out_temp As String
            out_temp = WebBrowser1.Document.Window.Frames("right").Document.GetElementsByTagName("TABLE")(1).InnerHtml
            out_temp = Replace(out_temp, "<TBODY>", "<TABLE>")
            out_temp = Replace(out_temp, "</TBODY>", "</TABLE>")
    
            Dim fileName As String = "c:\test.html"
            Using fs As New FileStream(fileName, FileMode.Create, FileAccess.Write)
                Dim sw As New StreamWriter(fs, _
                            Encoding.GetEncoding("big5"))
                sw.Write(out_temp)
                sw.Close()
            End Using
    
        End Sub
    End Class



    • 已編輯 X Z 2012年9月23日 下午 04:16 暫結 期待優化
    • 已變更類型 X Z 2012年9月23日 下午 04:19 主題結束, 延申另開, 期待優化
    2012年9月12日 下午 02:35

所有回覆

  • 謝謝妳 我去研究看看~

    不過會晚點回報..我卡在很麻煩的地方了. 登入後直接連到我要的網址結果網頁就過期了!
    還在想辦法用連結的方式(模擬點)或是找看看有沒有保留SESSION或是COOKIE方式 讓網頁頁不過期

    搞不定在上來請教

    謝謝

    2012年9月13日 上午 10:05
  • 對初學者來說,任何可以達到需求都可以考慮
    畢竟弄得出來才有用啊!

    感謝您 !我會去看看尼提供的資訊..有無結果都會上來做回覆
    供日後和我有類似需求的的人 參考

    謝謝

    2012年9月13日 下午 01:58
  • 爬了一票文 發現您提供的這個指令功能好強大
    可是有實作範例的大概都是類似您提供的那幾個連結卻是 C#
    教學的部分卻是VB.NET我找到的 湊不太起來

    話說我對程式與嚴都很爛 但是C# 比 VS.net更爛
    所以可以在請問一下針對網頁搜集資料和送出資料C# 好還是VS.NET好.我好考慮重頭改
    網路搜尋的結果好像很兩結 有人說不要給我VB.net語法  也要人說VB.net比較強大針對WEB


    VB .NET - HttpWebRequest Example - Sending POST Data
    http://www.youtube.com/watch?v=4RNsd3IuTQs

    VB.NET Tutorial 51 - HttpWebRequest POST Method (Part 1) (Visual Basic 2008/2010)
    http://www.youtube.com/watch?v=7Wzel-g1U54

    http://www.youtube.com/watch?v=UV5_b5oaUQk
    VB.NET Tutorial 51 - HttpWebRequest POST Method (Part 2) (Visual Basic 2008/2010)


    VB.NET Tutorial 52 - HttpWebRequest CookieContainer (Visual Basic 2008/2010)
    http://www.youtube.com/watch?v=HmJhjyLH3po

    關於自動填寫IE項目問題
    http://www.programfan.com/club/showpost.asp?id=2178

    cant login website using httpwebrequest/responce vb.net
    http://stackoverflow.com/questions/9046099/cant-login-website-using-httpwebrequest-responce-vb-net


    • 已編輯 X Z 2012年9月13日 下午 03:59
    2012年9月13日 下午 03:58
  • http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=WebClient%20232

    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年9月14日 下午 03:33
  • 您好 ~
    我知道搜尋可以找到很多方法
    我對解決的方向也有是關鍵字還不太能抓到重點 感謝您的提示 我在把您提供的搜尋結果再爬文看看

    我可以問一下232是代表什麼嗎? (已經知道了 原來是真對這VB.NET版面)

    97項瀏覽了一下.並無發現可以解決我目前的問題.網頁過期



    • 已編輯 X Z 2012年9月15日 下午 02:16 更新問題
    2012年9月15日 下午 02:03
  • 例如這篇,先把觀念看懂,觀念看不懂,討論啥都是廢話。

    http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/d2951e9d-a140-4e02-a4bb-eeca621da445

    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年9月15日 下午 04:25
  • 好的~ 謝謝!
    長長一大串我還不知道我能看的懂多少
    說不定看完就解出來也可能妳說的觀念我完全不懂!詢問對答依然是廢話
    給自己加油

    東抄西拼對現在的我來說簡單一點(由結果去回推)
    Visual Basic 2008 Click Html Buttons, VB.Net Clicking URL Link, VB Automating Web Browser Control
    2012年9月15日 下午 05:18
  • To  心冷熱情熄:
    sorry,可能要讓妳心冷了,您所說的觀念討論串我並沒有領悟出來
    還是謝謝.我已經存入書簽過陣子會再回去看看.看是否能領悟出來

    To  亂馬客:
    HttpWebRequest 不管我密碼對或錯她都返回了 MsgBox("Logged in", 0, "Success!")
    且也不會開一個網頁 任我完全不知道卡在哪.感覺HttpWebRequest強大很多..當相對的語法複雜
    我會和webborwser交叉測試的..
    謝謝

    =====================================================

    問題: 連結無法Click 與 webborwser載入實很慢
    尋找到以下方法測試

    1.

            Dim elementList As HtmlElementCollection
            Dim curElement As HtmlElement
            elementList = WebBrowser1.Document.GetElementsByTagName("a")
            For Each curElement In elementList
                'You can use the innerText attribute to locate the hyperlink
                If curElement.GetAttribute("innerText").Equals("MIT ERP") Then
                    curElement.InvokeMember("click")
                End If
            Next


    2.原始碼無classname 不知道怎麼利用

        Dim myLink = From Link As HtmlElement In WebBrowser1.Document.Links.OfType(Of HtmlElement)()
               Where Link.GetAttribute("classname") = "new-button send" AndAlso Link.InnerText = "MIT ERP"
               Select Link
        If myLink.Count <> 0 Then
          myLink.FirstOrDefault.InvokeMember("Click")
        Else
          'LINK WAS NOT FOUND
        End If

    3.原始碼無class不知道怎麼利用

    Dim bodytext As Windows.Forms.HtmlElementCollection = WebBrowser1.document.GetElementsByTagName("body")
    Dim prices As List(Of HtmlElement) = From bodyt As HtmlElement In bodytext.GetElementsByName("p") Select bodyt Where bodyt.GetAttribute("class") = "price" And bodyt.GetAttribute("id") = "price_8198552921665709576"
    
     For Each Tag As HtmlElement In prices
      MessageBox.Show(Tag.InnerText)
     Next


    4.

            Dim allelements As HtmlElementCollection = WebBrowser1.Document.All
            For Each webpageelement As HtmlElement In allelements
                If webpageelement.InnerText = "MIT ERP" Then
                    webpageelement.InvokeMember("click")
                End If
            Next

    要click部分的的原始碼

          <table>
          <TR>
          <TD nowrap>
               <P align=left style="COLOR: mediumblue"><a href="../MISDev/default.asp?mode=PASS&from=APPMGR&emp_no=XXXX&sess=XXXXXXXX">MIT ERP</a></p></TD>
      </td></tr>
      </table>
          <table width='90%' align='center' border='1'></TR>
    </TABLE>

    有路過的麻煩伸出援手.為什麼網頁就是不會轉跳
    程式完整碼在討論串開頭
    謝謝

     這篇感覺寫的還不錯順便分享
    getElementByID()、getElementsByName()、getElementsByTagName()的區別



    • 已編輯 X Z 2012年9月16日 上午 09:26 補充
    2012年9月16日 上午 08:41
  • 你需要先把 http 1.1 通訊協定先看懂,然後上面連結你就會看得懂,上面的連結算是應用例的一種。

    看懂以後,你就不會執著一定要用哪套,就算用哪套,也只要會用封包擷取器來比對就可以。

    當然,碰上有擋機器人的,你只要把 http 1.1 看懂,還有機會,不過破防不在本網站討論範圍內。

    所以換句話說,如果這套 ERP 有一些防禦性保護時,一般程式是根本進不去的。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年9月16日 下午 04:48
  • 發包呢 ?
    2012年9月18日 下午 03:36
  • TO 河蟹
    發包.不太懂~如果是付錢給廠商那可能就不用了
    這個只是為了工作可以更懶.因為不想每天去點!
    所以非絕對必要.但也不想太快放棄.
    若您要協助解決我是很感謝啦

    TO : 心冷
    去到處尋找了您說的HTTP 1.1 找到看起來比較詳細的 就回指向您之前提到的
    [VB 2008.NET] 載入HTML碼時的問題 (不是分析代碼)
    看到這頁又要轉到 "RFC 2616" 繞來繞去都是一些目前我無法了解的通訊協議
    經過兩天的努力但是又讓您失望了.

    看起來全部的網頁原始碼也不像是有防機器人(或許是我看不懂)
    所以看樣子我只能繼續亂爬.有進度再來詢問.
    感謝

     
    <HTML>
    <HEAD>
    <META http-equiv=Content-Type content="text/html; charset=Big5">
    <TITLE>選擇類別</TITLE>
    </HEAD>
     
      <BODY bgcolor=lightgrey>
      <TABLE border=0 cellPadding=1 cellSpacing=1 width="75%" align=center ID="Table2">
      <TR>
        <TD colspan="2" align=center>
        <P align=left style="BACKGROUND-COLOR: darkblue; COLOR: white">請選擇類別</P>
        </TD>
      </table>
      
      <TABLE border=0 cellPadding=1 cellSpacing=1 width="75%" align=center ID="Table3">
      <tr><td>
      <table>
          <TR>
          <TD nowrap>
               <P align=left style="COLOR: mediumblue"><a href="../MISDev/default.asp?mode=PASS&from=APPMGR&emp_no=XXXX&sess=XXXXXXXX">MIT ERP</a></p></TD>
      </td></tr>
      </table>
          <table width='90%' align='center' border='1'></TR> 
    </TABLE> 
    <table width='90%' align='center' border='1'> </tr> 	<tr><td width='20%'><font color='green' size='3'>代理QA00</font></TD>
    	<tr><td>&nbsp;</td><td> 	<font size='3'>代理待處理:10筆</font>	</td> 
    	</Tr></Table>
     
                 </table>
          
      </table>
      <p>&nbsp;</p>
      
      <TABLE border=0 cellPadding=1 cellSpacing=1 width="75%" align=center ID="Table3">
      <tr><td>
      <table>
          <TR>
          <TD nowrap>
               <P align=left style="COLOR: mediumblue"><a href="../TS/default.asp?mode=PASS&from=APPMGR&emp_no=XXXX&sess=XXXXXXXX">TS ERP</a></p></TD>
      </td></tr>
      </table>
          <table width='90%' align='center' border='1'></TR> 
    </TABLE> 
    <table width='90%' align='center' border='1'> </tr> 	</Tr></Table>
     
                 </table>
          
      </table>
      <p>&nbsp;</p>
      
      </center>
      </body>
      </html>
      

    我也用傻瓜除錯法測試發現 程式根本沒進去 click那邊
    那個字串(檢查瀏覽器)是在登入頁面的
    程式還沒等帳號登入 .就直接去判斷按鈕了ˇˇ
    把我一下面等待網頁載入當成裝飾用
    感覺錯的越來越上面....金害

     While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                Application.DoEvents()
     End While

    Dim oLogin As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("a")
            MsgBox("test0")
            For Each allelements As HtmlElement In oLogin
                MsgBox("test1")
                Dim controlText As String = allelements.GetAttribute("InnerText")
                MsgBox(controlText) <=== 這裡出線的字串是"檢查流覽器" 所以當然不會去點(雖然進入迴圈也可能失敗但至少要進去吧 哈哈)
                If controlText = "MIT ERP" Then
                    Dim url As String = allelements.GetAttribute("href")
                    WebBrowser1.Select()
                    'allelements.InvokeMember("click") ' Click the hyperlink
                    allelements.Focus()
                    'MsgBox(allelements.InnerText)
                    MsgBox("test3")

                    'SendKeys.Send("{ENTER}")
                End If
                MsgBox("test4")
            Next






    • 已編輯 X Z 2012年9月18日 下午 04:11
    2012年9月18日 下午 03:56
  • 哈~原來只要把位置換一換就會點了!

    但是遇到個怪問題.
    出現MSGBOX 4 之後!程序就不動了(只能用工作管理員結束不能X關閉)
    且MSGBOX 5 和6 都沒顯示
    且視窗指出現左半邊右半邊全白了(網頁有分左右兩個框架)
    請在指點一下迷津吧!
    謝謝

      Private Sub Button_shit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_shit.Click
            testweb()
    
            While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                Application.DoEvents()
            End While
    
            Dim elementList As HtmlElementCollection
            MsgBox("0")
            Dim curElement As HtmlElement
            MsgBox("1")
            elementList = WebBrowser1.Document.GetElementsByTagName("a")
            MsgBox("2")
            For Each curElement In elementList
                MsgBox("3")
                'You can use the innerText attribute to locate the hyperlink
                If curElement.GetAttribute("innerText").Equals("MIT ERP") Then
                    MsgBox("4")
                    curElement.InvokeMember("click")
                End If
                MsgBox("5")
            Next
            MsgBox("6")
    
        End Sub
    
        Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    
    
            While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                Application.DoEvents()
            End While
    
            WebBrowser1.Document.All("emp_no").InnerText = TextBox_username_Web.Text ' 帳號
            WebBrowser1.Document.All("password").InnerText = TextBox_password_Web.Text ' 密碼
            WebBrowser1.Document.All("submit1").InvokeMember("Click") ' 登入
        End Sub

    2012年9月18日 下午 04:39
  • 解決部分畫面無法顯示問題
    還是因為我的等待語法放錯位置 網頁持續等待 造成

    請問: 如何判斷含有頁框的網頁LOAD完成繼續下一個 動做
    判斷網址再頁框好像行不通
    (頂端同問題同步更新)

    解決方式:

        Private Sub Button_shit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_shit.Click
            testweb()
        End Sub
    
        Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            If e.Url = WebBrowser1.Document.Url Then
                If e.Url.LocalPath = "/misdev/" Then
                    click_LoginButton_1()
                ElseIf e.Url.LocalPath = "/APPMGR/selectCO.asp" Then
                    click_superlink_1()
                ElseIf e.Url.LocalPath = "/MISDev/default.asp" Then
                    click_superlink_2()
                ElseIf e.Url.LocalPath = "/MISDev/default.asp" Then
    MsgBox("imglink") End If End If End Sub Private Sub click_LoginButton_1() WebBrowser1.Document.All("emp_no").InnerText = TextBox_username_Web.Text ' 帳號 WebBrowser1.Document.All("password").InnerText = TextBox_password_Web.Text ' 密碼 WebBrowser1.Document.All("submit1").InvokeMember("Click") ' 登入 End Sub Private Sub click_superlink_1() Dim elementList As HtmlElementCollection Dim curElement As HtmlElement elementList = WebBrowser1.Document.GetElementsByTagName("a") For Each curElement In elementList If curElement.GetAttribute("innerText").Equals("MIT ERP") Then curElement.InvokeMember("click") '點超連結 End If Next End Sub Private Sub click_superlink_2() Dim elementList As HtmlElementCollection Dim curElement As HtmlElement elementList = WebBrowser1.Document.Window.Frames("right").Document.GetElementsByTagName("a") For Each curElement In elementList 'MsgBox(curElement.InnerText.ToString) If curElement.GetAttribute("innerText").StartsWith("代理") Then curElement.InvokeMember("click") '點超連結 End If Next End Sub

    除錯時主要參考資料.
    [VB.Net 2005] 請問一個有關 Application.DoEvents() 的問題哦! ( 謝謝! )
    WinForm WebBrowser (二) 實用方法總結
    The Document-Object Model
    • 已編輯 X Z 2012年9月20日 上午 08:40
    2012年9月20日 上午 08:33
  • 用網址的方式失敗
    改採用網頁載入次數方式排除
    完整程式碼在頂關

    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            pageLoadTimes = pageLoadTimes + 1
            'MsgBox(pageLoadTimes.ToString)
    
            If pageLoadTimes = 1 Then
                click_LoginButton_1()
            End If
    
            If pageLoadTimes = 2 Then
                click_superlink_1()
            End If
    
            If pageLoadTimes = 4 Then
                click_superlink_2()
            End If
    
            If pageLoadTimes = 7 Then
                click_superlink_3()
            End If
    
            If pageLoadTimes = 8 Then
                input_SearchRequery_1()
            End If
    
            If pageLoadTimes = 9 Then
                get_table_1()
            End If
        End Sub
    
    

    2012年9月23日 下午 04:18