Subir imagen con WebBrowser

Iniciado por Darkwizz, 18 Junio 2015, 14:42 PM

0 Miembros y 1 Visitante están viendo este tema.

okik

#10
Hola compañero

Mira no te complique más. Como no me rindo facilmente, finalmente encontré la solución  :P. Por lo menos para conseguir pulsar el botón. En cuanto a tu pregunta por lo del servidor, sinceramente no lo se.


Código (vbnet) [Seleccionar]
Public Class Form1

 

   Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
       WebBrowser1.ScriptErrorsSuppressed = True
       WebBrowser1.Navigate("http://www2.yapo.cl/ai/form/7?ca=15_s")
   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

       Dim clElement As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("Input")
       For Each Element As HtmlElement In clElement
           Dim controlName As String = Element.GetAttribute("input").ToString
           If Element.GetAttribute("name").Equals("file") Then
               Element.InvokeMember("click")
           End If
       Next
   End Sub
End Class




Explico como lo he averiguado.

Se me ocurrió que era mejor guardar la página web y luego analizarla. Tras guardarla la he abierto con el vb.net como web y justo donde está el botón hay controles uno encima de otro. Los separé, y conseguí determinar realmente cual es el control a llamar. Para ello guardé los cambios y luego lo abrí con el Google Chrome sin conexión  para determinar cual era realmente el que abre el cuadro. No es visible pero se detecta al pasar el ratón porque se pone el dedo. Después le doy con el botón derecho del ratón y hago clic en Inspeccionar y Chrome me muestra el código exácto que hace referencia al mismo.

Código (javascript) [Seleccionar]
<input multiple="multiple" type="file" name="file" style="height: 46px; position: absolute; right: 18px; top: 50px; font-family: Arial; font-size: 118px; margin: 0px; padding: 0px; cursor: pointer; opacity: 0; width: 1925px;">


No encontraba el control porque no es visible desde el webbrowser al obtener el código de la página al conectarse online. Si no ubiera guardado la página para analizarla no lo hubiera encontrado.

El control se crea desde un archivo de jscript que se descarga en el caché que se llama ai.js:

Código (javascript) [Seleccionar]
e=document.createElement("input");this._options.multiple&&e.setAttribute("multiple","multiple"),this._options.acceptFiles&&e.setAttribute








Darkwizz

Genial, eres un maestro!. Al fin una forma de hacerlo, me salvaste.

La última duda que me queda es que trabajando con WebBrowrser no funciona si dentro del mismo botón cargo la página y luego trato de pulsar botones dentro de esta página, es obligatorio que se cargue antes para poder usar el botón. Mi duda es si existe alguna forma de hacerlo o no?, porque intenté con ciclos for y tampoco funciona, pero es una acotación nomas, el problema principal ya está solucionado y te agradezco por la amabilidad y el tiempo que te tomaste. Saludos

okik

Que tal esto:

Código (vbnet) [Seleccionar]
Public Class Form1
    Dim WB As New WebBrowser

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Button1.Text = "Cargar página"
        Button2.Text = "Upload Image"
        Button2.Enabled = False
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        WB.ScriptErrorsSuppressed = True
        Try
            WB.Navigate("http://www2.yapo.cl/ai/form/7?ca=15_s")
            Me.Cursor = Cursors.WaitCursor 'Cambia el cursor a espera

            'Espera a que cargue la página
            Do While (WB.ReadyState <> WebBrowserReadyState.Complete)
                My.Application.DoEvents()
            Loop

            If WB.ReadyState = WebBrowserReadyState.Complete Then
                Me.Cursor = Cursors.Default 'Retorna el cursor normal
                Button2.Enabled = True
            End If
        Catch ex As Exception
            MsgBox("No se ha podido gargar la página")
        End Try

    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim clElement As HtmlElementCollection = WB.Document.GetElementsByTagName("Input")
        For Each Element As HtmlElement In clElement
            Dim controlName As String = Element.GetAttribute("input").ToString
            If Element.GetAttribute("name").Equals("file") Then
                Element.InvokeMember("click")
            End If
        Next
    End Sub
End Class


No me acaba de gustar porque si metes mal la URL el segundo botón se activa igualmente, pero por ahí va la cosa. Crear un sistema de espera a que se cargue la página.

Por cierto, para este código NO necesistas introducir físicamente un WebBrowser en el formulario, gracias a :        Dim WB As New WebBrowser


De modo que puedes introducir datos y hacer clics a botones sin que se vea la página.





Darkwizz

Hola compañero, de nuevo yo jajaja, mientras seguía viendo la página encontré, que cuando subes un producto, este queda en estado de espera, y no puedo lograr identificar si un producto está en revisión. Tu crees que sea posible alguna forma?

nomed

Que bueno , estaba buscando esto , voy a ver paso a paso si soy capaz de conseguirlo, gracias fenomeno